Я создаю C компилятор для небольшого языка программирования, и я застрял в фазе анализа semanti c. Я читал об AST и таблицах символов и не знаю, как работать с ними обоими. Википедия говорит это о AST
The AST is used intensively during semantic analysis, where the compiler checks for correct usage of the elements of the program and the language.
У меня есть файлы lexer.l
и parser.y
.
Также у меня есть ast.h
, где я объявил структуры вроде struct expression { ... }
struct statement { ... }
, и этот файл включен в parser.y
, где я заполняю эти структуры. Я также объявил эти структуры в %union { ... }
. Одним из примеров правила может быть
statements : statements SEMICOLON statement {
struct statement *stmt;
stmt = $3; /*The statement */
stmt->prev = $1; /*The previous statement */
$$ = stmt;
}
| {$$ = NULL;}
:
И другие правила похожи, поэтому, когда yyparse()
заканчивается, я должен заполнить AST и указатель на узел root (я не проверял его но я не хочу продолжать, не зная, правильно ли я поступил)
После создания AST я не знаю, как начать анализ semanti c с использованием AST. Также я не знаю, как использовать таблицу символов (создать, заполнить и использовать ее) вместе с AST для этой цели.