void expression(expr_rec *result)
{
        /*  <expression> ::= <primary>{ <add op> <primary> }  */

        expr_rec left_operand, right_operand;
        op_rec op;

        primary(&left_operand);

        while (next_token() == PLUSOP || next_token() == MINUSOP)
        {
               add_op(&op);
               primary(&right_operand);
                left_operand = gen_infix(left_operand, op, right_operand);
        }

        *result = left_operand;
}