Основной класс Parser

В программной реализации для работы с синтаксическим анализатором представлен класс Parser, который содержит единственный статический метод process. Этот метод получает на вход список токенов (объект типа TokenList), а возвращает построенное дерево разбора (объект типа SyntaxTree).

class Parser {
  public:
    Parser() = delete;
    Parser(const Parser &) = delete;
    Parser(Parser &&) = delete;
    ~Parser() = delete;

    static SyntaxTree process(const TokenList &tokens);
};

Благодаря используемому подходу реализация метода process довольно проста:

  1. Создается новый (пустой) объект типа SyntaxTree, представляющий выходное дерево, и в качестве корневого в него добавляется узел типа «начало программы».

  2. Создается контекст, в него помещаются: указатель на корневой узел дерева, указатель (итератор) на первый токен в списке, указатель (итератор) на последний токен в списке.

  3. Вызывается парсер parseProgramRoot для запуска разбора от начала программы, в который передается созданный контекст. В дальнейшем этот парсер рекурсивно вызывает внутри себя другие парсеры, которые, в свою очередь, также делают рекурсивные вызовы функций, благодаря чему выполняется обход всего списка токенов и построение полного синтаксического дерева.

  4. После построения синтаксическое дерево возвращается в качестве выходного значения.

Назад