0

我的语法不接受像“x = 4, xy = 1”这样的输入

grammar Ex5;

prog : stat+;
stat : ID '=' NUMBER;

LETTER : ('a'..'z'|'A'..'Z');
DIGIT : ('0'..'9');
ID : LETTER+;
NUMBER : DIGIT+;
WS : (' '|'\t'| '\r'? '\n' )+ {skip();};

我该怎么做才能让它接受大量的输入,比如 ID = NUM​​BER?先感谢您。

4

1 回答 1

1

您必须考虑','语法中的逗号 , 。此外,由于您(很可能)不希望创建LETTERDIGIT标记,因为它们仅用于其他词法分析器规则,因此您应该进行以下操作fragments

grammar Ex5;

prog : stat (',' stat)*;
stat : ID '=' NUMBER;

ID     : LETTER+;
NUMBER : DIGIT+;

fragment LETTER : 'a'..'z' | 'A'..'Z';
fragment DIGIT  : '0'..'9';

WS : (' '|'\t'| '\r'? '\n')+ {skip();};
于 2013-10-17T06:39:02.053 回答