У меня есть простая структура под названием Polyn, например:
typedef struct Polyn {
int sign;
int coeff;
int exp;
struct Polyn *next;
} Polyn;
В моей грамматике bison для рекурсивного построения многочленов я получаю только первый и последний элемент. Я использую эти функции для добавления и согласования со структурой Polyn:
Polyn *addmonomial(Polyn *pol, Polyn *monom) {
pol -> next = monom;
return pol;
}
Таким образом, для a = 1x2 + 2x + 3 он дает мне только 1x2 + 3. Рекурсия построит только первый и последний элементы. Я не знаю, менять ли возвращаемое значение функции добавления или как изменить грамматику, чтобы были включены средние термины. Похоже, проблема в том, что 1 доллар в моих последних двух рекурсивных правилах всегда является первым термином и не становится средним. Мне нужно вернуть первый член для других правил грамматики, а также построить многочлен.
|poln T_PLUS poln { $$ = addmonomial($1, $3);}
|poln T_MINUS poln { Polyn *p2n = negate($3); $$ = addmonomial($1, p2n); }