使用syntax-cli解析简单表达式遇Token错误,求助排查
问题排查与解决
问题根源
你的BNF语法存在大小写不匹配的错误,导致解析器无法建立从起始符号E到NUMBER的合法推导路径:
- 在
E的产生式中,你使用了小写的t,但定义的非终结符是大写的T,小写t并未被定义,解析器无法识别该符号 - 输入
2时,解析器生成NUMBERtoken后,无法通过F→NUMBER→T→F→E→T的合法路径匹配起始符号E,因此抛出"Unexpected token"错误
修正后的letter.bnf
%lex %% \s+ /* do nothing */ \d+ return 'NUMBER' /lex %% E : E '+' T | T ; T : T '*' F | F ; F : NUMBER ;
验证操作
执行原命令即可正常解析输入:
syntax-cli --grammar letter.bnf --mode LALR1 --parse '2'
该修正同时支持解析更复杂的算术表达式(如2+3*4),符合LALR(1)解析的语法规范。
内容的提问来源于stack exchange,提问作者Daniel Serrano
相关产品推荐
相关产品推荐

