Python - Lark - Грамматика - Не может генерировать AST - PullRequest
0 голосов
/ 18 октября 2018

В настоящее время я пытаюсь сгенерировать абстрактное синтаксическое дерево из функционального выражения, которое может быть, например, следующим:

OR(FunctionOne("valueA", "valueB", "valueC"), FunctionTwo("valueD", "valueE", "valueF"))

В основном, простая конкатенация операторов (AND | OR) и их функций (может бытьnested).

Я хотел бы перенести эту строку в абстрактное синтаксическое дерево, например:

value
  OR
    FunctionOne:
      value1: valueA
      value2: valueB
      value3: valueC
    FunctionTwo:
      value4: valueD
      value5: valueE
      value6: valueF

Что я сделал до сих пор ...

из импорта larkLark

parser = Lark(r"""
    value: operator

    operator : operatorvalue"("function"(how_to_handle_params)"*")"
    operatorvalue : "OR" | "AND"

    function : "FunctionOne" | "FunctionTwo"

    """, start='value')

Кто-нибудь может мне помочь с этой проблемой?

Просто нужна некоторая отправная точка, так как документы обрабатывают только json ...

Спасибо и привет!

1 Ответ

0 голосов
/ 25 октября 2018

Как правило, вы должны попытаться представить ответственность каждого объекта в синтаксисе.Так, например, функция содержит свои собственные аргументы:

function: NAME "(" params? ")"

params: (NAME ","?)+

У Lark есть множество примеров грамматик, таких как калькулятор , Python и Жаворонок (собственный синтаксис)

...