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 (его собственный синтаксис)

Другие вопросы по тегам