срочный вопрос по Yacc

Prise

Допустим, правило для Yacc описывает некую входную конструкцию, содержащую
идентификатор (idword):
myrule: HELLO idword { fprintf(my_file, "%s", ?); }
Требуется указанной функцией фпринтф записать идентификатор idword в my_file как
строку.
Как это сделать?
Я пробовал ?=$2, но получаются ворнинги про неприводимость указателей, и в
итоге в файл пишется всякая лабуда.

yolki

$1, $2, $$ имеют тип YYSTYPE, что по умолчанию - int.
если ты под $1 "адресуешь" терминал, например, то его значение равно yylex (то, что вернул лексер. если ты следишь за его значениями, можно поймать его текст через yytext).
если через $1 "адресуешь" нетерминал - то его значение - это то, что ты присвоил при его выводе в "переменную" $$, например:


ClassBody
: '{' ClassDecls '}'
{
...
$$:=TreeNode ... // здесь возвращаем какой-нибудь int
}
| ...


потом, при свёртке правила


ClassDecl
: CLASS ClassId BaseClause ClassBody ';'
{
...
DoClassDecl($2,$3,$4); // << здесь в $4 будет лежать int, который вернул в правиле ClassBody
...
}
| ...

nhtyth

Уже всё выяснилось, но спасибо.
Оставить комментарий
Имя или ник:
Комментарий: