GOLD Parser: грамматика ANSI-C на самом деле не разбирает ANSI-C? - PullRequest
0 голосов
/ 12 августа 2011

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

Пример:

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

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

1 Ответ

1 голос
/ 19 октября 2011

В соответствии с грамматикой, первая строка может быть <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.

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

...