(bison.info)Mfcalc Decl

Next: Mfcalc Rules Up: Multi-function Calc

Declarations for `mfcalc'

   Here are the C and Bison declarations for the multi-function

     #include <math.h>  /* For math functions, cos(), sin(), etc. */
     #include "calc.h"  /* Contains definition of `symrec'        */
     %union {
     double     val;  /* For returning numbers.                   */
     symrec  *tptr;   /* For returning symbol-table pointers      */
     %token <val>  NUM        /* Simple double precision number   */
     %token <tptr> VAR FNCT   /* Variable and Function            */
     %type  <val>  exp
     %right '='
     %left '-' '+'
     %left '*' '/'
     %left NEG     /* Negation--unary minus */
     %right '^'    /* Exponentiation        */
     /* Grammar follows */

   The above grammar introduces only two new features of the Bison
language.  These features allow semantic values to have various data
types (Note: More Than One Value Type.).

   The `%union' declaration specifies the entire list of possible types;
this is instead of defining `YYSTYPE'.  The allowable types are now
double-floats (for `exp' and `NUM') and pointers to entries in the
symbol table.  Note: The Collection of Value Types.

   Since values can now have various types, it is necessary to
associate a type with each grammar symbol whose semantic value is used.
These symbols are `NUM', `VAR', `FNCT', and `exp'.  Their declarations
are augmented with information about their data type (placed between
angle brackets).

   The Bison construct `%type' is used for declaring nonterminal
symbols, just as `%token' is used for declaring token types.  We have
not used `%type' before because nonterminal symbols are normally
declared implicitly by the rules that define them.  But `exp' must be
declared explicitly so we can specify its value type.  *Note
Nonterminal Symbols: Type Decl.

automatically generated by info2www