Как использовать стек в семантическом анализе компилятора? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть следующий код, который использует узлы из AST и выполняет шаги в зависимости от того, какой это тип узла.

switch (kind(*node)) {
        case(scope_node):
        case(declarations):
        case(statements):
        case(declaration):
        case(statement):
 }

Например, если у меня есть узел объявления, представляющий что-то вроде

int a = 5;

Я знаю, что AST будет рассматривать это как узел объявления, затем узел оператора, целочисленный узел и т. Д. Я хочу выделить стек для каждого типа узла, чтобы я мог отслеживать «потомки» этого узла и вызывать соответствующие функции, когда я выталкиваю их из стека.

Семантический анализатор: С точки зрения проектирования семантического анализатора, использующего узлы AST, было бы наиболее целесообразным иметь стек как функцию, которую я бы назвал, которая бы выделяла и освобождала стек после посещения всех дочерних элементов? Или было бы более разумно создать объект или структуру?

Любая помощь приветствуется! Любые наглядные материалы и примеры будут очень полезны.

...