我正在尝试用ANTLR 4解析这样的一行:
circle 'my circle' : posx = '800'; posy = '640';
我希望能够解析它而不需要处理空格,制表符和新行,例如:
circle'my circle':posx='800';posy='640';
或
circle
'my circle':
posx='800'; posy=
'640'
我的语法目前是:
grammar Circle;
prog
: statement*
;
statement
: circle
;
circle
: INDENT? 'circle' '\'' VALUES '\'' ':' params
;
params
: param+
;
param
: ARG '=' '\'' VALUES '\'' ';'
;
INDENT : [ \t]+;
VALUES : ARG (ARG)* ;
ARG : [a-zA-Z0-9]+;
WS : [ \t\n\r]+ -> skip;
无论如何试图解析这个:
circle 'my circle' : posx='800'; posy = '640';
我得到了:
line 1:5 mismatched input ' ' expecting '''
有关如何修复语法以解析跳过空格,制表符上方的行文本的任何想法,在行的中间返回?
答案 0 :(得分:0)
那是因为在你的解析器规则中你要求WS。
就像圈INDENT? 'circle' WS '\'' VALUES '\'' WS ':' params
一样,然后在词法规则中你跳过所有WS [ \t\n\r]+ -> skip;
line 1:5 mismatched input ' ' expecting '''
您收到此错误,因为在ARG中您可以拥有WS,因此您需要在词法分析器ARG规则中添加''。我不知道ANTLR 4,但在ANTLR 3中,它看起来应该是这样的
ARG : ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9'|' ' )+