代码之家  ›  专栏  ›  技术社区  ›  Srikar

用于拆分数字的antlr4语法

  •  0
  • Srikar  · 技术社区  · 7 年前
    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')+ ;
    

    这是我写的语法,用于将数字序列考虑为一位数,直到检测到逗号,然后将数字序列考虑为4位数

    例如,我的输入为00000 12345678912345678912 现在它应该考虑00000并将其拆分为个位数,如

    token 1 =0, 
    token 2 =0,
    token 3 =0,
    token 4 =0, 
    token 5 =0,
    

    逗号后应考虑12345678912345678912 然后像这样分开

    token 1 =1234, 
    token 2 =5678,
    token 3 =9123,
    token 4 =4567, 
    token 5 =8912,
    

    但它并不是采用第二条规则,并将其打印为逗号后的一位数

    任何人,请帮忙

    提前感谢

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  0
  •   Raven Bill Karwin    7 年前

    你几乎答对了。您所犯的唯一错误是希望循环解析器规则,而不是lexer规则。因此,您的语法应该如下所示:

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