[OCaml] Скомпилить код про прасеры.

 
0
 
Functional languages
ava
Kakadu | 14.09.2009, 22:28
взял отсюда
let lexer s =
    let ll = Genlex.make_lexer ["+";"*"] in
        ll (Stream.of_string s) ;; 
(*val lexer : string -> Genlex.token Stream.t = <fun> #*)

let rec stream_parse s =
    match s with parser  
        | [<'Genlex.Ident x>] -> x
        | [<'Genlex.Int n>] -> string_of_int n
        | [<'Genlex.Kwd "+"; e1=stream_parse; e2=stream_parse>] -> "("^e1^"+"^e2^")" 
        | [<'Genlex.Kwd "*"; e1=stream_parse; e2=stream_parse>] -> "("^e1^"*"^e2^")" 
        | [<>] -> failwith "Parse error" ;; 
(* val stream_parse : Genlex.token Stream.t -> string = <fun> #*)
let infix_of s = stream_parse (lexer s) ;;
(* val infix_of : string -> string = <fun>*)
infix_of "* +3 11 22";; 

На восьмой строчке начинается маты: syntax error на [<.
И ещё не совсем понятно слово parser после with.
Comments (1)
ava
Void | 14.09.2009, 21:58 #
Вещь эта компилируется с участием препроцессора CamlP4.
Чтобы использовать его в интерактивной среде, нужно загрузить модули:
Цитата
# #load "dynlink.cma";; (нужно начиная с OCaml 3.11)

# #load "camlp4o.cma";;

Чтобы скомпилировать исходник, нужно указать препроцессор компилятору:
Цитата
$ ocamlc -pp camlp4o program.ml -o program

или

$ ocamlopt -pp camlp4o program.ml -o program
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  Void   Kakadu
advanced
Submit