我正在使用golang构建ANTLRv4自动补全功能。
这是我正在使用的ANTLR的golang运行时软件包:https://godoc.org/github.com/antlr/antlr4/runtime/Go/antlr
我创建了简单的语法:
grammar Simple;
start : START (MIDDLE | END) ;
START : 'start' ;
MIDDLE : 'middle' ;
END : 'end' ;
WS : [ \t] -> skip ;
这是我的Go代码:
listener := new(simple.BaseSimpleListener)
lexer := simple.NewSimpleLexer(input)
stream := antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel)
parser := simple.NewSimpleParser(stream)
parser.BuildParseTrees = true
tree := parser.Start()
antlr.ParseTreeWalkerDefault.Walk(listener, tree)
// Print expected tokens
fmt.Println(parser.GetExpectedTokens())
当我像这样运行代码时
$ go build && echo 'start' | ./autocompletion
我感到恐慌:
line 1:5 missing {'middle', 'end'} at '<EOF>'
panic: Invalid state number.
但是最重要的是ErrorListener按摩:
line 1:5 missing {'middle', 'end'} at '<EOF>
这意味着ErrorListener正常工作。他可以预测丢失的令牌。
我怎么能不慌不张地获得这个{'middle','end'}令牌?