没有标签的 antlr4 节点
antlr4 nodes without labels
我正在用 Antlr 4 (v4.9.2) 解析语法
语法如下:
grammar Test;
start
:
command+ EOF
;
command: commandType params ;
commandType: 'DISPLAY' ;
params: param (',' param)*
| ;//parameter list
param: ID;
ID : [a-z]+[a-z0-9]*
;
WS
:
[ \t\r\n]+ -> skip
;
语法的输入文本是:
DISPLAY hello, really, sdfdsf
DISPLAY one more now
下面是生成的解析树。
(start (command (commandType DISPLAY) (params (param hello) , (param really) , (param sdfdsf))) (command (commandType DISPLAY) (params (param one))) 现在更多 )
节点“more now”没有被标记。
为什么解析器没有为“more now”抛出错误?
它确实产生错误,但 ANTLR 的默认策略是(尝试)从无效输入中恢复,并继续解析。
这是在尝试解析您的输入时显示的内容:
尝试 Google“ANTLR 错误策略”、“ANTLR 错误处理”,或查看此问答:Handling errors in ANTLR4
我正在用 Antlr 4 (v4.9.2) 解析语法
语法如下:
grammar Test;
start
:
command+ EOF
;
command: commandType params ;
commandType: 'DISPLAY' ;
params: param (',' param)*
| ;//parameter list
param: ID;
ID : [a-z]+[a-z0-9]*
;
WS
:
[ \t\r\n]+ -> skip
;
语法的输入文本是:
DISPLAY hello, really, sdfdsf
DISPLAY one more now
下面是生成的解析树。 (start (command (commandType DISPLAY) (params (param hello) , (param really) , (param sdfdsf))) (command (commandType DISPLAY) (params (param one))) 现在更多 )
节点“more now”没有被标记。
为什么解析器没有为“more now”抛出错误?
它确实产生错误,但 ANTLR 的默认策略是(尝试)从无效输入中恢复,并继续解析。
这是在尝试解析您的输入时显示的内容:
尝试 Google“ANTLR 错误策略”、“ANTLR 错误处理”,或查看此问答:Handling errors in ANTLR4