1 回答

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個贊
在詞法分析器中,您定義了 2 個單獨(dú)的標(biāo)記,因此詞法分析器對 input 沒有問題"Hello"。
如果該 hello-token 應(yīng)始終跟在 之后"world",則必須將其包含在令牌中:
HELLO : 'Hello' ' '+ 'world';
如果您調(diào)用解析器規(guī)則start,則會導(dǎo)致錯誤。這通常是強(qiáng)制WORLD令牌存在的方式(在解析器中),而不是在詞法分析器中。
編輯
您正在使用所有令牌,然后將此“使用的詞法分析器”提供給解析器。跳過標(biāo)記的打印,或在打印標(biāo)記后重新初始化詞法分析器。
這應(yīng)該這樣做:
func main() {
is := antlr.NewInputStream(`Hello`)
lexer := parser.NewhelloworldLexer(is)
stream := antlr.NewCommonTokenStream(lexer,
antlr.TokenDefaultChannel)
p := parser.NewhelloworldParser(stream)
antlr.ParseTreeWalkerDefault.Walk(&testListener{}, p.Start())
}
- 1 回答
- 0 關(guān)注
- 129 瀏覽
添加回答
舉報