1

私は自然の文法規則を書きたいと思います:

program = { expression }

ここで{}は 1 以上を示します。

たとえば、Lua の文法は同じ構文を使用します。

chunk ::= {stat [`;´]} [laststat [`;´]]

これは可能ですか?これは文脈自由文法に準拠していますか?

4

2 に答える 2

2

最も簡単な解決策は次のとおりだと思います。

program : expression
        | program NEWLINE expression

これは、PLY が LR 文法を生成するためのみ機能します。非終端記号は、LL 文法でそれ自体 (左再帰) で開始することはできません (ANTLR などのツールを使用している場合)。

次のこともできます。

program : expression
        | expression NEWLINE program

この 2 番目のバージョンは、LL 文法と LR 文法の両方と互換性があるため優れていますが、LR パーサーには最初の規則の方が効率的だと思います。

于 2013-07-10T06:26:49.740 に答える
0

私は答えを見つけました:

program : expression
        | expression NEWLINE expression
于 2013-07-10T05:59:50.183 に答える