微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用递归使ANTLR消耗所有可用元素?

如何解决如何使用递归使ANTLR消耗所有可用元素?

这是我的语法:

[enter code here][1]

这是它完全解析的输入:

grammar test;

text: foo EOF;

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

tail: (' ' foo)+;

但是,正如我之前解释的here一样,输出树包含太多的X (X! (X)! (X X X)!!!) X 元素。可以解决这个问题吗?

解决方法

感谢@ kaby76,找到了解决方案:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。