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, затем корректно вводит параграф, но после второго), он ожидает a; вместо {. Так что выдает синтаксическую ошибку. Я очень новичок во всей этой грамматике. Я просто хотел бы разобрать мой код в AST:(

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.

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

Другие вопросы по тегам