Python PLY - что-то не так с этой грамматикой? - PullRequest
2 голосов
/ 06 октября 2011

Я пытаюсь использовать Python PLY для простого парсера выражений, и я не могу заставить его работать.Код доступен на битбакете , но нарушающие его части:

Во-первых, определения:

def p_expr_minus(p):
    '''expr :   expr MINUS term'''
    p[0] = p[1]-p[3]

и

def p_term_divide(p):
    '''term :   term DIVIDE factor'''
    p[0] = p[1]/p[3]

кажутсяперевернуть и получить результаты: 3-9 = 6 и 2/8 = 4.

Во-вторых, выражение в скобках factor: ( expr ) не работает.В частности, часть:

def p_factor_brackets(p):
    '''factor : OBRACKET expr CBRACKET'''
    p[0] = p[2]

работает неправильно.При разборе выражения типа (9+7) поднимается:

TypeError: unknown text at ')'

Что является источником этих ошибок?

1 Ответ

2 голосов
/ 07 октября 2011

С вашим парсером все в порядке, но вы делаете глупость в своем методе main():

def main():
    data = "3*4+5*6-10"
    data = raw_input()
    print yacc.parse(data[::-1])

Вы используете синтаксический анализатор с обратной строкой: data[::-1]! Неудивительно, что (9+7) выдает ошибку, она видится парсером как )7+9(. Просто передайте реальный data и все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...