(bison.info.gz) Mfcalc Decl
Info Catalog
(bison.info.gz) Multi-function Calc
(bison.info.gz) Mfcalc Rules
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 ( More Than One Value Type Multiple Types.).
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. The Collection of Value Types Union Decl.
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.
Nonterminal Symbols Type Decl.
Info Catalog
(bison.info.gz) Multi-function Calc
(bison.info.gz) Mfcalc Rules
automatically generated byinfo2html