Разбор файлов заголовка C - PullRequest
0 голосов
/ 12 июля 2011

У меня есть файл заголовка C, который я предварительно скомпилировал с использованием флага gcc -E, и теперь пытаюсь выполнить синтаксический анализ с использованием Lex и Yacc; однако, он зависает от переменных typedef.

например:

typedef unsigned long ULONG;
ULONG i = 5;

выдаст синтаксическую ошибку в ULONG второй строки.

Я попытался переопределить часть грамматики (найдена здесь) http://www.quut.com/c/ANSI-C-grammar-y.html, специально под type_specifer, заменив TYPE_NAME на IDENTIFIER, однако это приводит к множественным ошибкам s / r и r / r, которые Я не могу исправить.

Есть ли другие подходы, которые вы бы порекомендовали? Или другой подход к прекомпиляции всего вместе?

1 Ответ

3 голосов
/ 12 июля 2011

В коде, который вы ссылаетесь тоже:
http://www.quut.com/c/ANSI-C-grammar-y.html,

посмотрите внизу:
Вы увидите эту функцию

int check_type(void)
{
 /*
  * pseudo code --- this is what it should check
  *
  * if (yytext == type_name)
  *     return TYPE_NAME;
  *
  * return IDENTIFIER;
  */

/*
 *  it actually will only return IDENTIFIER
 */

    return IDENTIFIER;
}

Вам действительно нужно написатькод, который идентифицирует последовательность (yytest, yytext + yylength), является идентификатором или TYPE_NAME. Это означает, что в синтаксическом анализаторе вам необходимо создать некоторую структуру при анализе кода, чтобы эта функция могла искать идентификатор в структуре.

Предварительно заполните структуру типами по умолчанию char / int / short / long / float / double и т. Д. Другие типы, которые вам нужно будет добавить при разборе ввода.

...