単純な再帰的降下構文解析プログラムを作成することで、パーサーの仕組みを学びます。しかし、私は文法をLL(1)と定義するのに問題があります。 1(LLを使用している場合しかし、これは曖昧につながるLL(1)文法の作成に関する問題
statement: assignent | expression
assignment: NAME EQUALS expression
expression: term [(PLUS|MINUS) term]
term: NAME | NUMBER
:この私は、次の文法規則を作成した操作を行うに
a = 1
a + 1
:私は、次の2つのステートメントを解析することができるようにしたいです)パーサーのように、NAMEトークンがstatement
ルールで検出された場合、ルックアヘッドなしでassignment
かexpression
かどうかはわかりません。
Pythonの文法はLLです(1)。これは可能ですが、私はそれを行う方法を理解できません。私はPythonの文法規則(https://docs.python.org/3/reference/grammar.html)を見てきましたが、まだ実装しているかどうかはまだ分かりません。
任意の助けをいただければ幸いです:)
LL(1)はルックアヘッドを意味するものではなく、1トークンの先読み(1が出てくるところ)があることを意味します。 NAMEトークンを見つけたら、次のトークンを探します。これはEQUALS、PLUS、またはMINUSトークンになります。そして、この情報に基づいてどのルールを従うべきかを知っています。 – Mephy
私が間違っている場合は私を訂正してください。しかし、単一の先読みがNAMEトークンになると思いましたか? – soarjay
私はコンパイラを学んでから用語が間違っているかもしれませんが、NAMEは現在のトークン(レクサーによって生成されたもの)であり、EQUALS/PLUSは最初の先読みトークンです"覗く"が実際にポップしない)。 – Mephy