У меня есть следующий код, который использует узлы из AST и выполняет шаги в зависимости от того, какой это тип узла.
switch (kind(*node)) {
case(scope_node):
case(declarations):
case(statements):
case(declaration):
case(statement):
}
Например, если у меня есть узел объявления, представляющий что-то вроде
int a = 5;
Я знаю, что AST будет рассматривать это как узел объявления, затем узел оператора, целочисленный узел и т. Д.
Я хочу выделить стек для каждого типа узла, чтобы я мог отслеживать «потомки» этого узла и вызывать соответствующие функции, когда я выталкиваю их из стека.
Семантический анализатор:
С точки зрения проектирования семантического анализатора, использующего узлы AST, было бы наиболее целесообразным иметь стек как функцию, которую я бы назвал, которая бы выделяла и освобождала стек после посещения всех дочерних элементов? Или было бы более разумно создать объект или структуру?
Любая помощь приветствуется! Любые наглядные материалы и примеры будут очень полезны.