В настоящее время я пытаюсь сгенерировать абстрактное синтаксическое дерево на основе моей грамматики, используя библиотеку синтаксического анализа грамматики tatsu и строку, содержащую логические операторы:
простой пример:
test = 'OR(functionA("valueA", "valueB", "valueC"),functionB("valueA", "valueB", "valueC"))'
Что должноразрешить в своего рода этот json:
{
"OR",
"[",
"{"
"functionA": ["valueA", "valueB", "valueC"]
"}",
"{"
"functionB": ["valueA", "valueB", "valueC"]
"}"
"]"
}
Мои операторы также содержат вложенные AND / OR ..
Моя грамматика до сих пор:
GRAMMAR = '''
@@grammar::TEST
start = operator $ ;
operator
=
| operatorvalue'(' operand ')'
| operatorvalue'(' operand ')'
;
operatorvalue
=
| 'AND'
| 'OR'
;
operand
=
| operandvalue'(' listofvalues ')'
| operandvalue'(' listofvalues ')'
;
operandvalue
=
| operator
| 'functionA'
| 'functionB'
;
listofvalues
=
/(.*?)/
;
'''
if __name__ == '__main__':
import pprint
import json
from tatsu import parse
from tatsu.util import asjson
test = 'OR(functionA("valueA", "valueB", "valueC"),functionB("valueA", "valueB", "valueC"))'
ast = parse(GRAMMAR, test)
print('# JSON')
print(json.dumps(asjson(ast), indent=2))
print()
На данный момент он просто выбрасывает:
tatsu.exceptions.FailedParse: (1:4) no available options :
Кто-нибудь может мне помочь с этой настройкой?
Спасибо и привет!