Node:Rpcalc Decls, Next:Rpcalc Rules, Up:RPN Calc
rpcalc
Here are the C and Bison declarations for the reverse polish notation
calculator. As in C, comments are placed between /*...*/
.
/* Reverse polish notation calculator. */ %{ #define YYSTYPE double #include <math.h> %} %token NUM %% /* Grammar rules and actions follow */
The C declarations section (see The C Declarations Section) contains two preprocessor directives.
The #define
directive defines the macro YYSTYPE
, thus
specifying the C data type for semantic values of both tokens and
groupings (see Data Types of Semantic Values). The
Bison parser will use whatever type YYSTYPE
is defined as; if you
don't define it, int
is the default. Because we specify
double
, each token and each expression has an associated value,
which is a floating point number.
The #include
directive is used to declare the exponentiation
function pow
.
The second section, Bison declarations, provides information to Bison about
the token types (see The Bison Declarations Section). Each terminal symbol that is
not a single-character literal must be declared here. (Single-character
literals normally don't need to be declared.) In this example, all the
arithmetic operators are designated by single-character literals, so the
only terminal symbol that needs to be declared is NUM
, the token
type for numeric constants.