Python - Lark - грамматика - не может генерировать AST
В настоящее время я пытаюсь сгенерировать абстрактное синтаксическое дерево из функционального выражения, которое может быть, например:
OR(FunctionOne("valueA", "valueB", "valueC"), FunctionTwo("valueD", "valueE", "valueF"))
В основном это простая конкатенация операторов (AND | OR) и их функций (может быть вложенной).
Я хотел бы перенести эту строку в абстрактное синтаксическое дерево, например:
value
OR
FunctionOne:
value1: valueA
value2: valueB
value3: valueC
FunctionTwo:
value4: valueD
value5: valueE
value6: valueF
Что я сделал до сих пор...
из жаворонка импорт жаворонок
parser = Lark(r"""
value: operator
operator : operatorvalue"("function"(how_to_handle_params)"*")"
operatorvalue : "OR" | "AND"
function : "FunctionOne" | "FunctionTwo"
""", start='value')
Кто-нибудь может мне помочь с этим вопросом?
Просто нужна некоторая отправная точка, так как документы обрабатывают только JSON...
Спасибо и привет!
1 ответ
Как правило, вы должны попытаться представить ответственность каждого объекта в синтаксисе. Так, например, функция содержит свои собственные аргументы:
function: NAME "(" params? ")"
params: (NAME ","?)+
У Lark есть множество примеров грамматик, таких как калькулятор, Python и Lark (его собственный синтаксис)