Встраивание кода в Yacc - PullRequest
0 голосов
/ 20 мая 2011

Я пишу 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

в этой строке в моем файле .y:

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

Когда я удаляю внутренний встроенный код:

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

Работает просто отлично.

Существуют ли ограничения для встраивания кода в yacc?У меня сложилось впечатление, что это возможно.

Спасибо.

1 Ответ

1 голос
/ 20 мая 2011

Я думаю, что вы использовали неправильные индексы.В предыдущем случае встроенные коды также индексируются, скажем,

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

Таким образом, коды действий должны быть

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