[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |

## 2.5 Multi-Function Calculator: `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:

$mfcalcpi = 3.141592653589⇒ 3.1415926536

sin(pi)⇒ 0.0000000000

alpha = beta1 = 2.3⇒ 2.3000000000alpha⇒ 2.3000000000ln(alpha)⇒ 0.8329091229exp(ln(beta1))⇒ 2.3000000000 $

Note that multiple assignment and nested function calls are permitted.

2.5.1 Declarations for `mfcalc` | Bison declarations for multi-function calculator. | |

2.5.2 Grammar Rules for `mfcalc` | Grammar rules for the calculator. | |

2.5.3 The `mfcalc` Symbol Table | Symbol table management subroutines. | |

2.5.4 The `mfcalc` Lexer | The lexical analyzer. | |

2.5.5 The `mfcalc` Main | The controlling function. |

[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |

This document was generated on *December 1, 2013* using *texi2html 5.0*.