Line 9: | Line 9: | ||
== The Syntactic Analyzer (YACC) Specification == | == The Syntactic Analyzer (YACC) Specification == | ||
+ | The syntactic analyzer will be built to immediately compute the expressions in a syntax-directed fashion as they occur. It is, thus, important to use trees that build nodes as the expressions occur (left-recursive grammars). If the grammar were right-recursive, the last node would be the first to be built and the (syntax-directed) evaluation would be from the last expression to the first. | ||
+ | |||
+ | The first task is to define the grammar itself (without worrying with semantics). | ||
+ | <text> | ||
+ | </text> | ||
[[category:Compilers]] | [[category:Compilers]] | ||
[[category:Teaching]] | [[category:Teaching]] |
This example implements a simple calculator. The calculator has an unspecified number of integer variables and the common binary integer operators (namely, addition, subtraction, multiplication, division, and modulus), and unary integer operators (+ and -).
The lexical analyzer is very simple and limited to recognizing variable names, integers numbers, and the operators themselves. <text> </text>
The syntactic analyzer will be built to immediately compute the expressions in a syntax-directed fashion as they occur. It is, thus, important to use trees that build nodes as the expressions occur (left-recursive grammars). If the grammar were right-recursive, the last node would be the first to be built and the (syntax-directed) evaluation would be from the last expression to the first.
The first task is to define the grammar itself (without worrying with semantics). <text> </text>