The last two assignments for the quarter involve implementing a simple calculator in Ruby. This document specifies the input language for the calculator. The calculator allows the user to evaluate formulas involving floating-point values and the usual arithmetic operations, as well as to set and reference variables that can hold the results of these calculations.
A calculator program is specified by the following grammar..
program ::= statement | program statement
statement ::= exp | id=exp |clearid |list|quit|exit
exp ::= term | exp+term | exp-term
term ::= power | term*power | term/power
power ::= factor | factor**power
factor ::= id | number |(exp)|sqrt(exp)
= exp is executed by evaluating
    the expression and binding that value to the given identifier. Any previous
    value bound to that identifier is replaced. No output is printed.id not defined 
    is printed (with the actual identifier substituted for id)
    and the value of the expression is not defined.
    If an expression contains multiple occurrences of undefined identifiers,
    the error message is printed for each occurrence of each undefined identifier.clear id deletes the identifier from
    the list of known (bound) identifiers.PI is already defined
    and is bound to 3.14159... (i.e., Math::PI in Ruby). It may
    be cleared or bound to a different value like any other identifier.list causes all known identifiers to be printed
     along with the values they are currently bound to. The order in which the
    identifier, value pairs
    are printed is not specified.quit and exit have the same effect.
    Both terminate execution of the calculator.list, clear, quit,
    and exit)
    are reserved and may not be used as identifiers. 
    The built-in function name sqrt also is reserved and cannot be used as an identifier.**), which is right-associative.sqrt function is the usual floating-point square root
   function and is defined only on non-negative numbers.
   The value of an expression that attempts to evaluate the square root
   of a negative number is not defined.