This is a sample interactive calculator built using ML-Yacc and ML-Lex. The calculator is defined by the files calc.lex (* defines lexer *) calc.grm (* defines grammar *) calc.sml (* defines driver function, Calc.parse *) sources.cm (* cm description file *) To compile this example, type - CM.make "sources.cm"; in this directory. CM will invoke ml-lex and ml-yacc to process the lexer specification calc.lex and the grammar specification calc.grm respectively. Then it will compile the resulting SML source files calc.lex.sml calc.grm.sig calc.grm.sml and the calc.sml file containing the driver code. The end result of loading these files is a structure Calc containing a top-level driver function named parse. Calc.parse : unit -> unit The calculator can be invoked by applying Calc.parse to the unit value. - Calc.parse(); 1+3; result = 4 The calculator reads a sequence of expressions from the standard input and prints the value of each expression after reading the expression. Expressions must be separated by semicolons. An expression is not evaluated until the semicolon is encountered. The calculator terminates when an end-of-file is encountered. There is no attempt to fix input errors: a lexical error will cause exception LexError to be raised, while a syntax error will cause ParseError to be raised. NOTE: The CM description file sources.cm mentions the ml-yacc library (ml-yacc-lib.cm). CM's search path should be configured so that this library will be found. This should normally be the case if SML/NJ is properly installed.
Click to toggle
does not end with </html> tag
does not end with </body> tag
The output has ended thus: that this library will be found. This should normally be the case if SML/NJ is properly installed.