Я создал сканер и парсер (с flex и bison соответственно) и AST для реализации транслятора Java-Python.Я не понимаю, как управлять семантическими действиями в AST (проверка типов, проверка объявления переменных, ...), где вставить функции, которые реализуют эти проверки, и как подключить таблицу символов (которую я создал) к AST.Учитывая, например, это производство в синтаксическом анализаторе:
VariableDeclaration
: VariableName {$$ = varDec_new($1,NULL);}
| VariableName ASSIGNOP ExpressionStatement {$$ = varDec_new($1,$3);}
;
С varDec_new , определенным следующим образом в ast.c:
ast_node *varDec_new(ast_node *variableName, ast_node *exprStmt)
{
ast_node *n = newast(AST_VARDEC); // ast_node allocation (in this case for the ast_node AST_VARDEC (type of ast_node)
n->varDec.variableName = variableName; // pointer to variableName struct in AST
n->varDec.exprStmt = expreStmt; //pointer to expreStmt struct in AST
return n;
}
Как мне управлять типомпроверка (между VariableName и ExpressionStatement)?Должен ли я создать функцию со всем параметром, подобным AST (в ast.c), или я должен вызывать эту функцию всякий раз, когда нахожу производственный процесс, требующий проверки типа в парсере?