私は、C のような言語 (より単純な言語) 用のコンパイラ (lex や bison などのツールを使用せずに) の構築に取り組んでおり、lexer と parser を通過しました。パーサーの実行方法が正しいかどうかはわかりません。これまでのところ、構文が正しいかどうかを確認するなどの構文解析を行うために、リンクされたリストをまったく使用していません。基本的に、私のパーサーは次のようになります。
<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」でキーワードをチェックしています。この方法は大丈夫ですか?
この時点から、意味解析を行うにはどうすればよいでしょうか? シンボル テーブルの作成はどこから始めればよいですか?
考えるための提案や指針は素晴らしいです! どうもありがとうございました