
ksson
By: a guest on
Jun 19th, 2009 | syntax:
OCaml | size: 0.75 KB | hits: 180 | expires: Never
{
type expr =
| NL
}
let digit = ['0'-'9']
let float = digit
+ ('.' digit
+)?
rule token = parse
| [ ' ' '\t' ] { token lexbuf }
| '+' { Op (+.) }
| '/' { Op (/.) }
| '-' { Op (-.) }
| '*' { Op ( *. ) }
| '\n' { NL }
| _
as c
{ failwith (Printf.sprintf "invalid char: %c\n" c
) }
{
let main =
let lexbuf
= Lexing.from_channel stdin in
let rec aux stack =
match token lexbuf with
| Const f -> aux (f::stack)
| NL
-> Format.printf "%f@." (List.hd stack
); aux stack
| Op f ->
match stack with
| x :: y :: r -> aux ( f y x :: r)
| _ -> assert false
in
aux []
}