自动完成恐慌

时间:2019-01-29 06:07:43

标签: go antlr4

我正在使用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'}令牌?

0 个答案:

没有答案