|
|
1.1 ! root 1: type Lineno = int ! 2: val lineno = ref 1 ! 3: fun error s l = output std_out ! 4: ("line " ^ makestring (l:int) ^ ":" ^ s ^ "\n") ! 5: fun lookup s = ordof(s,0) - ord("a")+1 ! 6: %% ! 7: %structure Calc ! 8: %eof EOF ! 9: %start START ! 10: ! 11: %left SUB PLUS ! 12: %left TIMES DIV ! 13: ! 14: %right CARAT ! 15: ! 16: %term ID of string | NUM of int | PLUS | TIMES | PRINT | EOS | EOF | ! 17: CARAT | DIV | SUB ! 18: %nonterm EXP of int | START | STMT | STMT_LIST ! 19: ! 20: %% ! 21: START : STMT_LIST () ! 22: STMT_LIST : STMT_LIST STMT EOS () ! 23: STMT_LIST : () ! 24: STMT : PRINT EXP (print EXP; print "\n"; flush_out std_out) ! 25: STMT : EXP () ! 26: EXP : NUM (NUM) ! 27: | ID (lookup ID) ! 28: | EXP PLUS EXP (EXP1+EXP2) ! 29: | EXP TIMES EXP (EXP1*EXP2) ! 30: | EXP DIV EXP (EXP1 div EXP2) ! 31: | EXP SUB EXP (EXP1-EXP2) ! 32: | EXP CARAT EXP (let fun e (m,0) = 1 ! 33: | e (m,i) = m*e(m,i-1) ! 34: in e (EXP1,EXP2) ! 35: end)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.