次の形式で行を解析しようとしています:
(OP something something (OP something something ) ) ( OP something something )
OP は論理ゲート (AND、OR、NOT) の記号であり、評価したいものは何かです。
探している出力は次のようなものです。
{ 'OPERATOR': [condition1, condition2, .. , conditionN] }
条件自体が dict/list のペアになる場合があります (ネストされた条件)。これまでのところ、次のようなことを試しました:
tree = dict()
cond = list()
tree[OP] = cond
for string in conditions:
self.counter += 1
if string.startswith('('):
try:
OP = string[1]
except IndexError:
OP = 'AND'
finally:
if OP == '?':
OP = 'OR'
elif OP == '!':
OP = 'N'
# Recurse
cond.append(self.parse_conditions(conditions[self.counter:], OP))
break
elif not string.endswith(")"):
cond.append(string)
else:
return tree
return tree
他の方法も試しましたが、この再帰全体に頭を悩ませることはできないので、ここでいくつかのポインターを取得できるかどうか疑問に思っています.Webを見回して、再帰降下解析に関するいくつかのものを見つけましたが、チュートリアルはすべて試していました必要以上に複雑なことをするために。
PS: 既存の python ライブラリでこれを行うことができることはわかっていますが、それを行うことで何を学ぶことができますか?