Antlr语法不起作用

时间:2013-10-16 22:07:55

标签: antlr

我的语法不会接受像“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? 提前谢谢。

1 个答案:

答案 0 :(得分: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();};