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

如何使用递归让ANTLR使用所有可用的元素?

  •  0
  • yegor256  · 技术社区  · 5 年前

    grammar test;
    
    text: foo EOF;
    
    foo:
        'X'
        |
        '('
        foo
        ')'
        |
        foo
        '!'
        |
        foo
        tail
        ;
    
    tail: (' ' foo)+;
    

    这是它完美解析的输入:

    X (X! (X)! (X X X)!!!) X
    

    tail 元素,正如我之前解释的 here

    0 回复  |  直到 5 年前
        1
  •  0
  •   yegor256    5 年前

    多亏了@kaby76,我们找到了解决方案:

    foo:  
      'X' tail? 
      | 
      '(' foo ')' tail? 
      | 
      foo '!' tail? 
      ; 
    tail: 
      (
        ' ' 'X' 
        | 
        ' ' '(' foo ')' 
        | 
        ' ' foo '!'
      )+ 
      ;