ANTLR4简单LETTER匹配语法触发无限循环的原因是什么?
ANTLR4语法无限循环问题触发原因
- 入口规则未显式匹配EOF标记
你编写的entry规则仅要求匹配一个或多个小写字母,没有强制要求匹配到整个输入的结束标记EOF。ANTLR解析器默认只需要匹配输入的前缀即可满足规则,因此在匹配完你输入的asdf序列后,会持续等待后续输入内容,不会主动终止解析流程,表象就是处于卡住的无限循环状态。
修复该问题只需将entry规则调整为:
grammar Hello; entry : LETTER+ EOF ; LETTER : [a-z] ; WS : [ \t\r\n]+ -> skip ;
- Windows平台EOF标记输入不符合要求
你在输入asdf后直接按下Ctrl+Z输入EOF标记,但Windows的cmd环境下,只有当Ctrl+Z单独出现在一行的行首时,才会被系统识别为输入结束的信号。你输入的asdf^Z没有换行直接追加EOF,系统不会触发输入结束回调,因此grun测试工具会一直等待输入,无法进入后续的解析树输出环节。
正确操作方式为:输入asdf后先按回车换行,再在新的空行开头按Ctrl+Z后回车,即可正常结束输入。
内容的提问来源于stack exchange,提问作者Sergey Slepov
相关产品推荐
相关产品推荐

