Шаг 151.
Рекурсия на Python. Взаимная рекурсия. Грамматики и синтаксический анализатор ... . Синтаксический анализатор. Функция parenthesized_expression()

    На этом шаге мы завершим создание калькулятора.

    Пример 9.13 анализирует выражение, заключенное в скобки.


Пример 9.13. Синтаксический анализ скобочного выражения
1
2
3
4
5
def parenthesized_expression(tokens):
    if tokens == [] or tokens[0] != '(' or tokens[-1] != ')':    
        raise SyntaxError('Syntax error')
    else:
        return expression(tokens[1:-1])
Архив с файлом можно взять здесь.

    Помимо проверки входного списка на пустоту, метод проверяет также наличие открывающей и закрывающей круглых скобок соответственно в начале и в конце выражения. Если ошибок нет, метод продолжает вычисление выражения в круглых скобках (строка 5) и возвращает результат. Таким образом, вызовом функции expression() этот метод замыкает всю цепь взаимно-рекурсивных функций.

    И наконец, в примере 9.14 приводится сам калькулятор в целом.


Пример 9.14. Основной код программы-калькулятора
1
2
s = input('> ')
print(expression(tokenize_unary(s)))    
Архив с текстом всего калькулятора можно взять здесь.

    На следующем шаге мы приведем решения нескольких задач.




Предыдущий шаг Содержание Следующий шаг