Python - разбор грамматики Tatsu - PullRequest
0 голосов
/ 19 октября 2018

В настоящее время я пытаюсь сгенерировать абстрактное синтаксическое дерево на основе моей грамматики, используя библиотеку синтаксического анализа грамматики 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 :

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

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

...