Расщепление грамматического правила в бизоне - PullRequest
0 голосов
/ 29 августа 2010

У меня есть правило Bison

block: LBRACE  { some code } decls stmts RBRACE {more code } 
     ;

Проблема в разделе "больше кода", у меня есть

$$ = $3 ;

В принципе, я хочу, чтобы возвращаемое значение блока былоstmts.Когда я делаю это, Бизон говорит: «У блока $ 3 нет типа».Если я удалю блок кода, содержащий некоторый код, и вставлю его в последний блок, бизон не будет жаловатьсяУ меня есть stmts и все его производные, объявленные как типы.Значит, это не разрешено Бизоном?Я могу внести изменения в грамматику, чтобы приспособиться к этому, но это будет утомительно и намного проще просто использовать выше.

1 Ответ

2 голосов
/ 29 августа 2010

Используйте $4 для обозначения stmts.Поскольку у вас есть действие среднего правила , все номера исходящих символов смещены, поскольку само действие может иметь значение.

Соответствующие номера компонентов:
$ 1 LBRACE
$ 2 { some code }
$ 3 decls
$ 4 stmts
5 RBRACE
6 { more code }

...