им пытаются разобрать строки в виде:рекурсивного синтаксического анализа для сюсюкать как синтаксис
(OP something something (OP something something)) (OP something something)
Где OP является символом для логического ворот (AND, OR, NOT) и что-то есть, что я хочу, чтобы оценить ,
Выход им ищет что-то вроде:
{ 'OPERATOR': [condition1, condition2, .. , conditionN] }
Если само условие может быть сама по себе (вложенные условия) ДИКТ/список пар. До сих пор я пытался что-то вроде:
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
Я попробовал другие способы как хорошо, но я просто не могу обернуть мою голову вокруг этого вся рекурсии вещь так что им интересно, если я мог бы получить некоторые указатели здесь, я посмотрел вокруг сети и Я нашел кое-что о рекурсивном синтаксическом анализе спуска, но все учебники пытались сделать что-то более сложное, чем нужно.
PS: Я понимаю, что могу сделать это с существующими библиотеками python, но что бы я узнал, выполнив это?
ли фактическая [рекурсия] (http://en.wikipedia.org/wiki/Recursion_%28computer_science%29) у вас есть проблемы с пониманием, или как [метод рекурсивного спуска] (HTTP://en.wikipedia.org/wiki/Recursive_descent_parser) работает? –
И что, если есть пробел после '('? Не пытайтесь изобретать велосипед, * учите * из хорошей и чистой библиотеки, например https://code.google.com/p/funcparserlib/ или http: // pyparsing.wikispaces.com/ –
@JoachimPileborg Я предполагаю, что это целая рекурсия, я просто не могу понять это правильно. – axujen