DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(bison.info) Rpcalc Rules

Info Catalog (bison.info) Rpcalc Decls (bison.info) RPN Calc (bison.info) Rpcalc Lexer
 
 Grammar Rules for `rpcalc'
 --------------------------
 
    Here are the grammar rules for the reverse polish notation
 calculator.
 
      input:    /* empty */
              | input line
      ;
      
      line:     '\n'
              | exp '\n'  { printf ("\t%.10g\n", $1); }
      ;
      
      exp:      NUM             { $$ = $1;         }
              | exp exp '+'     { $$ = $1 + $2;    }
              | exp exp '-'     { $$ = $1 - $2;    }
              | exp exp '*'     { $$ = $1 * $2;    }
              | exp exp '/'     { $$ = $1 / $2;    }
            /* Exponentiation */
              | exp exp '^'     { $$ = pow ($1, $2); }
            /* Unary minus    */
              | exp 'n'         { $$ = -$1;        }
      ;
      %%
 
    The groupings of the rpcalc "language" defined here are the
 expression (given the name `exp'), the line of input (`line'), and the
 complete input transcript (`input').  Each of these nonterminal symbols
 has several alternate rules, joined by the `|' punctuator which is read
 as "or".  The following sections explain what these rules mean.
 
    The semantics of the language is determined by the actions taken
 when a grouping is recognized.  The actions are the C code that appears
 inside braces.   Actions.
 
    You must specify these actions in C, but Bison provides the means for
 passing semantic values between the rules.  In each action, the
 pseudo-variable `$$' stands for the semantic value for the grouping
 that the rule is going to construct.  Assigning a value to `$$' is the
 main job of most actions.  The semantic values of the components of the
 rule are referred to as `$1', `$2', and so on.
 

Menu

 
* Rpcalc Input
* Rpcalc Line
* Rpcalc Expr
 
Info Catalog (bison.info) Rpcalc Decls (bison.info) RPN Calc (bison.info) Rpcalc Lexer
automatically generated byinfo2html