Mfcalc Rules
Previous: <Mfcalc Decl=>MfcalcDecm> * Next: <Mfcalc Symtab=>MfcalcSymu> * Up: <Multi-function Calc=>Multifunct>

#Wrap on
{fH4}Grammar Rules for {fCode}mfcalc{f}{f}

Here are the grammar rules for the multi-function calculator.
Most of them are copied directly from {fCode}calc{f}; three rules,
those which mention {fCode}VAR{f} or {fCode}FNCT{f}, are new.

#Wrap off
#fCode
input:   \/\* empty \*\/
        | input line
;

line:
          '\\n'
        | exp '\\n'   \{ printf ("\\t%.10g\\n", $1); \}
        | error '\\n' \{ yyerrok;                  \}
;

exp:      NUM                \{ $$ = $1;                         \}
        | VAR                \{ $$ = $1->value.var;              \}
        | VAR '=' exp        \{ $$ = $3; $1->value.var = $3;     \}
        | FNCT '(' exp ')'   \{ $$ = (\*($1->value.fnctptr))($3); \}
        | exp '+' exp        \{ $$ = $1 + $3;                    \}
        | exp '-' exp        \{ $$ = $1 - $3;                    \}
        | exp '\*' exp        \{ $$ = $1 \* $3;                    \}
        | exp '\/' exp        \{ $$ = $1 \/ $3;                    \}
        | '-' exp  %prec NEG \{ $$ = -$2;                        \}
        | exp '^' exp        \{ $$ = pow ($1, $3);               \}
        | '(' exp ')'        \{ $$ = $2;                         \}
;
\/\* End of grammar \*\/
%%
#f
#Wrap on

