下面是一个 ANTLR 语法的片段,它可以正常工作。
它旨在成为一个 tex 解析器。
如果我everywhere
通过取消注释来修改规则| text
,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;