ANTLR 4:跳过多参数线的空间

时间:2013-09-29 08:55:04

标签: antlr

我正在尝试用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 '''

有关如何修复语法以解析跳过空格,制表符上方的行文本的任何想法,在行的中间返回?

1 个答案:

答案 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'|' ' )+