Next:

Declarations for `mfcalc' ------------------------- Here are the C and Bison declarations for the multi-function calculator. %{ #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.