Какова область действия% union в yacc? - PullRequest
1 голос
/ 05 февраля 2011

Меня немного смущает% union в yacc. Определен ли уникальный союз для каждого токена или существует один глобальный союз? Я пытаюсь решить, нужно ли мне сделать все в объединении списком и просто добавить данные к нужному типу.

1 Ответ

1 голос
/ 05 февраля 2011

Вы получаете отдельный %union объект для каждого токена. Например, типичное правило будет выглядеть примерно так:

expr: value '+' value:     { $$ = $1 + $3; }

В этом случае $$, $1 и $3 каждый представляет отдельный объект типа, который вы определили в операторе %union. Как правило, у вас будет что-то вроде:

%union { 
    int int_val;
    /* ... */
}

и

%type <int_val> value expr

, что означает, что правила value и expr производят объекты% union, в которых допустим элемент int_val.

...