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' */
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
%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
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