PLYを使用するときに問題が発生しました。 PLYでコールグラフジェネレータを作成したいと思います。 状況によっては、文法ファイル内にトークンをいくつか破棄する必要があります。 これは、パーザがそのトークンを破棄する前にそれを認識するときに何かする必要があるからです。 私はlexerファイルで破棄することはできません。 たとえば、 'IF'トークンは破棄したいトークンです。 文法ファイルでそれを破棄する何かをしようとします。 ただ好き:PLY(Python Lex-Yacc)で文法ファイルで非終端記号を破棄する方法
def p_if(p):
'if : IF'
print "if"
parser.symstack.pop()
しかし、物事は私が考える方法を行きませんでした。 symstackを出力します(これはパーサの属性です。パーサはyacc.pyのLRParserインスタンスです)。 symstackのリストには前のトークンが含まれていますが、 'if'は含まれていません。 このような状況でトークンを破棄する方法は不思議です。 誰か助けてくれますか?どうもありがとう!