Возможная ошибка в примере Calc

Когда я даю строку 3 + 5 ( 10 - 20 ) к примеру Tatsu Calc parser принимает и возвращает ['3', '+', ['(', ['10', '-', '20'], ')']], Я не думаю, что эта строка должна быть принята. Не могли бы вы помочь мне увидеть, что мне здесь не хватает?

Ура!

Полный код выглядит следующим образом:

    GRAMMAR = '''
     @@grammar::CALC

    start
        =
        expression $
        ;


    expression
        =
        | expression '+' term
        | expression '-' term
        | term
        ;


    term
        =
        | term '*' factor
        | term '/' factor
        | factor
        ;


    factor
        =
        | '(' expression ')'
        | number
        ;


    number
        =
        /\d+/
        ;
    '''


    if __name__ == '__main__':
        import pprint
        import json
        from tatsu import parse
        from tatsu.util import asjson

        ast = parse(GRAMMAR, '3 + 5 ( 10 - 20 )')
        print('# PPRINT')
        pprint.pprint(ast, indent=2, width=20)
        print()

        print('# JSON')
        print(json.dumps(asjson(ast), indent=2))
        print()

Затем Python производит следующее:

>>> print(ast) ['3', '+', ['(', ['10', '-', '20'], ')']]

0 ответов

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