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

    На этом шаге мы приведем текст этой функции и прокомментируем его.

    В примере 9.12 приведён код, анализирующий множитель.


Пример 9.12. Синтаксический анализ множителя
1
2
3
4
5
6
7
8
9
10
def factor(tokens):
    if tokens == []:
        raise SyntaxError('Syntax error')
    elif len(tokens) == 1:
        if is_number(tokens[0]):
            return float(tokens[0])
        else:
            raise SyntaxError('Syntax error')
    else:
        return parenthesized_expression(tokens)    
Архив с файлом можно взять здесь.

    Если входной список состоит из одной лексемы, то она может быть только числом, и функция возвращает её значение (строка 6). Если же лексема не является числом, то исходное выражение ошибочно. Наконец, если длина входного списка лексем больше 1, множитель может быть только выражением в скобках, и метод должен вызвать соответствующую ему функцию со всем входным списком (строка 10).

    На следующем шаге мы рассмотрим функцию parenthesized_expression().




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