Я работаю над созданием компилятора (без использования каких-либо инструментов, подобных lex или bison) для языка, подобного C (более простого), и уже прошел через лексер и парсер.Я не уверен, что мой анализатор работает правильно или нет.Поскольку до сих пор для анализа, т. Е. Для проверки правильности синтаксиса, я вообще не использовал связанные списки.По сути, мой синтаксический анализатор выглядит следующим образом: предположим, что синтаксис -
<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".Этот метод в порядке?
С этого момента, как проводить семантический анализ?С чего мне начать строить таблицу символов?
Любое предложение или указатель на мысль, что это здорово!Большое спасибо