我的语法不接受像“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 = NUMBER?先感谢您。
我的语法不接受像“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 = NUMBER?先感谢您。
您必须考虑','
语法中的逗号 , 。此外,由于您(很可能)不希望创建LETTER
和DIGIT
标记,因为它们仅用于其他词法分析器规则,因此您应该进行以下操作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();};