2010-08-28 6 views
0

J'ai une règle BisonFractionnement d'une règle de grammaire dans Bison

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

La question est dans la section « plus de code », j'ai

$$ = $3 ; 

Fondamentalement, je veux la valeur de retour du bloc être des stmts. Quand je fais cela, Bison dit "$ 3 de bloc n'a aucun type." Si je supprime le bloc de code contenant du code et le colle dans le dernier bloc, Bison ne se plaint pas. J'ai stmts et tous ses dérivés déclarés comme types. Alors, est-ce que ce n'est pas permis par Bison? Je peux apporter des modifications à la grammaire pour accommoder ceci, mais ce sera fastidieux et beaucoup plus facile d'utiliser juste ce qui précède.

Répondre

2

Utilisez $4 pour faire référence à stmts. Comme vous avez un mid-rule action, tous les numéros de symbole en cours sont décalés car l'action elle-même peut avoir une valeur.

Les nombres d'éléments correspondants sont les suivants:
1 $LBRACE
$ { some code }
$ 3decls
$ 4stmts
5 $RBRACE
6 ${ more code }

Questions connexes