0

以下は、正常に動作する 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;
4

1 に答える 1