2
私はPLYで自分のパーサーを作成しています。PLYのlexとyaccを2つの別々のクラスにカプセル化する方法
class Lex:
tokens = (
'NAME', 'NUMBER',
)
literals = ['=', '+', '-', '*', '/', '(', ')']
# Tokens
t_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*'
...
(YACCを使用)パーサコード:
class Parser:
# Parsing rules
tokens = Lex.tokens
def p_statement_assign(self, p):
'statement : NAME "=" expression'
self.names[p[1]] = p[3]
...
def run(self):
print self.tokens
lex.lex(module=Lex) # ----what should I do here?-----
parser = yacc.yacc(module=self)
parser.parse("1+2")
そして、私は次しまった私はここでクラスレックスのコード がある
それぞれのlexとyaccをカプセル化したいですエラー: バインドされていないメソッドt_NUMBER()は最初の引数としてLexインスタンスとともに呼び出される必要があります(代わりにLexTokenインスタンスがあります)
私はyacc.yacc(module=self)
のように、module=Lex
をlexに使ってみましたが、うまくいきませんでした。