grammar Te;
/*
* Parser Rules
*/
test : (example+ EOF);
example: digit COMMA digit2 NEWLINE;
digit: (INT)+? ;
digit2: (INT INT INT INT)+?;
/*
* Lexer Rules
*/
INT :[0-9];
COMMA: ',';
NEWLINE : ('\r'? '\n' | '\r')+ ;
这是我编写的语法,用于将数字序列视为单个数字,直到检测到COMMA,然后将数字序列视为4位数
例如,让我的输入为00000,12345678912345678912 现在它应该考虑00000并将其分成单个数字,如
token 1 =0,
token 2 =0,
token 3 =0,
token 4 =0,
token 5 =0,
在COMMA之后应该考虑12345678912345678912 和分裂如
token 1 =1234,
token 2 =5678,
token 3 =9123,
token 4 =4567,
token 5 =8912,
但它没有采用第二条规则并在COMMA之后将其打印为单个数字
任何人,请帮助
提前致谢
答案 0 :(得分:0)
你几乎做对了。您唯一的错误是您想循环解析器规则而不是词法分析器规则。因此你的语法应该是这样的:
example: digit+ COMMA digit2+ NEWLINE ;
digit: INT ;
digit2: INT INT INT INT ;