我正在为类似 C 的语言(一种更简单的语言)构建编译器(不使用任何工具,如 lex 或 bison),并且已经通过了词法分析器和解析器。我不确定我做解析器的方式是否正确。因为,到目前为止,要进行解析,即检查语法是否正确,我根本没有使用过链表。基本上,我的解析器看起来像这样:假设语法是 -
<program> ::= <program_header> <program_body>
<program_header>::= program <identifier> is
<program_body> ::= (<declaration>;)*
begin
(<statement>;)*
end program
我的程序如下所示:
parser()
{
char *next_token;
next_token = get_token();
check_for_program(next_token);
}
check_for_program(next_token)
{
check_for_program_header(next_token);
if (header_found)
check_for_program_body();
}...
我基本上有所有非终端的功能,并在适当的时候调用它们,我正在通过“strcmp”检查关键字。这种方法好吗?
从这一点来看,如何进行语义分析呢?我应该从哪里开始构建符号表?
任何建议或思考的指针都很棒!非常感谢