2011-05-20 7 views
0

J'écris un fichier yacc dans le cadre d'un compilateur. J'ai l'erreur suivante:Incorporation de code dans Yacc

lang_grammar.y:143.54-55: $2 of `ClassDeclaration' has no declared type 
lang_grammar.y:143.69-70: $4 of `ClassDeclaration' has no declared type 
lang_grammar.y:143.84-85: $6 of `ClassDeclaration' has no declared type 

se produisant sur cette ligne dans mon dossier .y:

CLASS { /* code will be embedded here */ } ID EXTENDS ID '{' ClassBody '}' 
    { $$.classDeclaration = new ClassDeclaration($2.identifier, $4.identifier, $6.classBody); } 

Lorsque je supprime le code intégré interne:

CLASS ID EXTENDS ID '{' ClassBody '}' 
    { $$.classDeclaration = new ClassDeclaration($2.identifier, $4.identifier, $6.classBody); } 

Il fonctionne très bien .

Y a-t-il des limites à l'intégration de code dans yacc? J'avais l'impression que c'était possible.

Merci.

Répondre

1

Je pense que vous avez utilisé de mauvais index. Dans façon précédente, les codes embarqués sont également indexés, disent

CLASS { /* code will be embedded here */ } ID EXTENDS ID '{' ClassBody '}' 
$1 $2         $3 $4  $5 $6 $7  $8 

Ainsi, les codes d'action doivent être

{ $$.classDeclaration = new ClassDeclaration($3.identifier, $5.identifier, $7.classBody); } 
+0

ah, donc toute la section intégrée (de {à}) compte pour un index, puis – pseudosudo