GOLD Parser: грамматика ANSI-C на самом деле не анализирует ANSI-C?

Я пытаюсь проверить грамматику ANSI-C, представленную на веб-сайте GOLD Parser. Кажется, я даже не могу полностью разобрать самый маленький файл C.

Пример:

int test_inc1(void)
{
  int t;
  t = 2 + 2;
  return 0;
}

Он находит int как тип, затем test_inc1 как Id, затем правильно скобки, но после второго), он ожидает; вместо {. Таким образом, возникает синтаксическая ошибка. Я новичок во всей этой грамматической напуганности. Я просто хотел бы разобрать свой код на AST :(


person Leo    schedule 12.08.2011    source источник
comment
Для справки это грамматика ANSI-C, которую я использую с веб-сайта GOLD. Я тестирую его в GOLD Parser Builder 4.1.1: devincook. com / goldparser / grammars / files / C-ANSI.zip   -  person Leo    schedule 12.08.2011


Ответы (1)


Согласно грамматике, первая строка могла быть <Func Proto>, если она оканчивалась точкой с запятой:

<Func Proto> ::= <Func ID> '(' <Types>  ')' ';'
               | <Func ID> '(' <Params> ')' ';'
               | <Func ID> '(' ')' ';'

Для синтаксического анализа объявления функции эта продукция из цитируемой грамматики должна соответствовать части, заключенной в круглые скобки:

<Param>      ::= const <Type> ID
               |       <Type> ID

void подходит для <Type>, но ID, о котором просит грамматика, просто отсутствует.

Но грамматика также содержит эту подсказку:

! Note: This is an ad hoc version of the language. If there are any flaws, 
! please visit the contact page and tell me.

так что, вероятно, не следует воспринимать это слишком серьезно.

person Gunther    schedule 18.10.2011