exp:num ‘+’ num ; {$$ = $1 + $3;}
те $$ , $ 1 , $ 3 являются семантическими значениями для символов и токенов, используемых в правиле, в том порядке, в котором онипоявляются.Семантическое значение - это значение, которое вы получаете в yylval, когда сканер получает новый токен.
$ 1 имеет семантическое значение первого числа.
$ 3 имеет семантическое значение второго числа
$ 2 не используется, так как это токен '+'.Лексический анализатор отправляет этот токен парсеру.Также у него есть семантическое значение '0'.
$$ определяет семантическое значение 'exp' (целое группирование по этому правилу).
Пробовали ли вычто-то вроде:
exp:num ‘+’ num ; {$$ = $1 + $3;printf("%d", $$);}
Также проверьте: почему $ 1 в yacc / bison имеет значение 0