Python Parsimonious Parserを使用して、設計中の単純な言語のインタープリターを構築しようとしています。このチュートリアル ビデオは非常に役に立ちましたが、今は自分のルールに合わせてコードをゆっくりと修正しています。もともと次のように定義されていた割り当てルールに固執しています。
def assignment(self, node, children):
'assignment = lvalue "=" expr'
lvalue, _, expr = children
self.env[lvalue] = expr
return expr
次の文法でルールを少し変更しました。
def assignment(self, node, children):
'assignment = "SET" lvalue "," expr'
_, lvalue, _, expr = children
self.env[lvalue] = expr
return expr
SET a, 7
たとえば、パーサーが同じように評価し、値を name にa = 7
バインドしたいと思います。ただし、解析しようとすると、Parsimonious ライブラリから次のエラーが発生します。7
a
parsimonious.exceptions.IncompleteParseError: Rule 'program' matched in its
entirety, but it didn't consume all the text. The non-matching portion of
the text begins with 'SET a, 7' (line 1, column 1).
私は解析/字句解析にかなり慣れていないため、ルールを正しく定義したかどうか完全にはわかりません。解析/字句解析の経験が豊富な人が、ルールを適切に定義し、どこが間違っているかを説明するのを手伝ってくれることを望んでいました. また、倹約的な誤りを私に説明してくれませんか?