0

私は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 '''

スペース、タブ、改行をスキップして行の途中で行のテキストを解析するように文法を修正する方法について何か考えはありますか?

4

1 に答える 1

0

これは、パーサー ルールで WS を要求するためです。サークルINDENT? 'circle' WS '\'' VALUES '\'' WS ':' paramsのように、レクサー ルールではすべての WS をスキップします[ \t\n\r]+ -> skip;

line 1:5 mismatched input ' ' expecting '''

このエラーが発生するのは、ARG では WS を使用できるため、lexer ARG ルールに ' ' を追加する必要があるためです。ANTLR 4はわかりませんが、ANTLR 3では次のようになります ARG : ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9'|' ' )+

于 2013-09-29T12:59:48.287 に答える