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.
так что это, вероятно, не следует воспринимать слишком серьезно.