其中是左递归



下面是一个运行良好的ANTLR语法片段。

它旨在成为一个tex解析器。

如果我通过取消对| text的注释来修改规则everywhere,ANTLR将报告规则escSeq中的左递归我觉得这很有趣
我找不到左递归:要么我是盲人,要么我误解了什么是左递归

有什么建议吗?

afterNewline : (everywhere | par );
par : EoL {System.out.println("<PAR>");} afterNewline ;
everywhere : (Esc escSeq //| text
        );
escSeq : (
            EoL          {System.out.println("<cmd:''>");}        afterNewline |
            Space        {System.out.println("<cmd:' '>");}       skipSpace |
            name=Letter+ {System.out.println("<cmd:"+$name.text+">");} skipSpace |
            Other        {System.out.println("<cmd:Other>");}      inLine // **** Other is too restrictive. 
        );
text : (Letter | Other) inLine;
skipSpace : (everywhere | (Space|EoL) {System.out.println("<SKIP>");});
inLine : (everywhere | Space | EolInLine);
EolInLine : EoL {System.out.println("<text:' '>");};
texDocument : afterNewline EOF;

上面的语法没有左递归,无论是否在everywhere中使用| text替代项。ANTLR 4不报告左递归。如果ANTLR 3.5报告左递归,您应该将其作为一个问题发布在这里:

https://github.com/antlr/antlr3/issues

相关内容

  • 没有找到相关文章

最新更新