我需要在antlr4

时间:2017-11-16 10:47:07

标签: antlr4

我刚刚开始使用antlr4我只想编写一个可以解析数字序列但只能一次选择4位数的语法

例如,我的号码是1234567891234567 然后我希望它将前4个数字解析为1个令牌,然后将下一个数字解析为另一个令牌,然后将另一个数字解析为另一个令牌,以便获得4个不同的4位数令牌。

token1 = 1234,
token2 = 5678,
token3 = 9123,
token4 = 4567,

任何人都可以帮我写这个语法吗

   grammar TEST;

    /*
     * Parser Rules
     */

    test             :   (example+ EOF);
    example          :   digit COMMA digit2 NEWLINE;
    digit            :   SINGLE+;
    digit2           :   QUADRUPLE+;


    /*
     * Lexer Rules
     */

     SINGLE:
        INT 
   ;

    QUADRUPLE:
       INT INT INT INT
   ;

   fragment INT:
       [0-9]
    ;
   NEWLINE    : ('\r'? '\n' | '\r')+ ;
   COMMA      : ',';

enter image description here

这里的语法我已经写了我需要它来打印单个数字作为标记第1个然后在逗号之后我需要将数字打印为4digits在标记中请检查附加图像并帮助我< / p>

1 个答案:

答案 0 :(得分:1)

相应的词法分析器规则如下所示:

QUADRUPLE:
    INT INT INT INT
;

fragment INT:
    [0-9]
;

因此,这个问题的关键是放弃使用ANTLR&#34;重复运算符&#34; (*+)并且只需手动编写重复内容,使其与所需的数字完全匹配。