Отслеживайте ошибки синтаксического анализа ast.Walk () в Go - PullRequest
0 голосов
/ 23 сентября 2018

Я пишу собственный анализатор и хотел бы отслеживать ошибки, с которыми сталкиваюсь.Как отслеживать ошибки во время синтаксического анализа без использования глобальной переменной при выполнении ast.Walk?

type visitor struct {
    err error
}

func (v visitor) Visit(n ast.Node) ast.Visitor {
    switch d := n.(type) {
    case *ast.BinaryExpr:
        if d.Op != token.LAND {
            v.err = fmt.Errorf("Illegal operator :%s", d.Op) // NOT WORKING
                return v
        }
    }
    return v
}

Я использую приведенный выше код как: -

var v visitor
ast.Walk(v, astTree)

Это, вероятно, не работает, так как в func (v visitor) v не является указателем на struct.Какой рекомендуемый способ отслеживать это?

1 Ответ

0 голосов
/ 23 сентября 2018

Сбор ошибок в структуре - это хороший подход, но для его работы необходимо использовать указатель-приемник.

func (v *visitor) Visit(n ast.Node) ast.Visitor {  // change to pointer receiver
     ...
}

...

var v visitor
ast.Walk(&v, astTree) // pass pointer to visitor
...