我需要用antlr4中的4位数字来解析一个数字

我需要用antlr4中的4位数字来解析一个数字,antlr4,Antlr4,我刚开始使用antlr4,我只想写一个语法,可以解析一个数字序列,但一次只能选择4个数字 例如,我有一个号码1234567891234567 然后我希望它将前4个数字解析为1个标记,下一个解析为另一个,下一个解析为另一个,这样我就得到了4个不同的4个数字标记 token1 = 1234, token2 = 5678, token3 = 9123, token4 = 4567, 谁能帮我写一个语法吗 grammar TEST; /* * Parser Rules

我刚开始使用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      : ',';

这是我所写的语法,我需要它首先将单个数字打印为记号,然后在逗号之后,我需要将数字打印为记号中的4位数字。请检查所附图像并帮助我解决问题。

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

QUADRUPLE:
    INT INT INT INT
;

fragment INT:
    [0-9]
;

因此,这个问题的关键是放弃使用ANTLR的一个重复运算符*,+,只需手工编写重复,使其与所需的计数完全匹配。

不客气。如果这是你一直在寻找的解决方案,你可以将我的答案标记为正确答案;我做了,但它说它已经记录了我的反馈,但它需要15个声誉才能向公众展示。很抱歉,一旦我的声誉提高,我将再次投票决定答案…:我如何一次接受一个数字,并将输入作为日期打印?例如,输入为00000我希望它打印为token1=0、token2=0、token3=0、token4=0、token5=0,对于日期,输入为161117,并将其解析为token=16-11-17。有趣的。。。那一定是新的^^你问的是不可能的。它需要上下文敏感的词法分析,词法分析程序需要知道给定的数字是否与日期对应。也许如果你提出一个新问题,描述你想要什么,为什么要提供输入和预期输出,你可以用另一种方式打印出来好吧,那么我发布的上述语法呢,它不是把输入作为我想要的,我想它把数字作为逗号之前的逗号作为4位数字,逗号作为一个数字,但它不考虑语法在开始时采取一个数字,任何想法如何做它。