Next: Exercises, Previous: Location Tracking Calc, Up: Examples [Contents][Index]
mfcalc
Now that the basics of Bison have been discussed, it is time to move on to
a more advanced problem. The above calculators provided only five
functions, ‘+’, ‘-’, ‘*’, ‘/’ and ‘^’. It would
be nice to have a calculator that provides other mathematical functions such
as sin
, cos
, etc.
It is easy to add new operators to the infix calculator as long as they are
only single-character literals. The lexical analyzer yylex
passes
back all nonnumeric characters as tokens, so new grammar rules suffice for
adding a new operator. But we want something more flexible: built-in
functions whose syntax has this form:
function_name (argument)
At the same time, we will add memory to the calculator, by allowing you to create named variables, store values in them, and use them later. Here is a sample session with the multi-function calculator:
$ mfcalc pi = 3.141592653589 ⇒ 3.1415926536
sin(pi) ⇒ 0.0000000000
alpha = beta1 = 2.3 ⇒ 2.3000000000 alpha ⇒ 2.3000000000 ln(alpha) ⇒ 0.8329091229 exp(ln(beta1)) ⇒ 2.3000000000 $
Note that multiple assignment and nested function calls are permitted.
• Mfcalc Declarations: | Bison declarations for multi-function calculator. | |
• Mfcalc Rules: | Grammar rules for the calculator. | |
• Mfcalc Symbol Table: | Symbol table management subroutines. | |
• Mfcalc Lexer: | The lexical analyzer. | |
• Mfcalc Main: | The controlling function. |
Next: Exercises, Previous: Location Tracking Calc, Up: Examples [Contents][Index]