用于分割数字的antlr4语法

时间:2017-11-17 11:34:46

标签: antlr4

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之后将其打印为单个数字

任何人,请帮助

提前致谢

enter image description here

1 个答案:

答案 0 :(得分:0)

你几乎做对了。您唯一的错误是您想循环解析器规则而不是词法分析器规则。因此你的语法应该是这样的:

example: digit+ COMMA digit2+ NEWLINE ;
digit: INT ;
digit2: INT INT INT INT ;