これは宿題ではありません。私は構文解析を学びたいと思っています。論理式を解析して構文解析する
次のように私の質問は、私は、(abc or def) or def)
両側が再び中置表現することができ、式そのものであることができるので、私のプログラムは、中置式a or b
にたわごとに行くような文を解析しようとしている、ありますパーサーは、再帰の深さに達するまで繰り返され、処理は行われません。以下
コード:
# infix operators are automatically created and dealt with
infix_operators = ['and', '&', 'or', '|', 'implies', '->']
variable = Word(alphas)
infix_op = oneOf(infix_operators, caseless=True)
expr = Forward()
infix_expr = (expr + infix_op + expr)
complex_expr = nestedExpr('(', ')', content=expr)
expr << (infix_expr | complex_expr | variable)
print str(expr.parseString("(abc or def) or def)")[0])
私の質問は非常に単純です。このような状況で無限ループを回避するにはどうすればいいでしょうか? 、それはexpr
になったとき、>- >factor
からexpr
は、最終的にterm
を通じて再帰的にもかかわらず、左再帰の問題があるため対処される
atom := variable | 'True' | 'False' | '(' expr ')'
factor := [ 'not' ]... atom
term := factor [ '&' factor ]...
expr := term [ '|' term ]...
:
感謝を –