Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [OCaml] Скомпилить код про прасеры. 
V
    Опции темы
Kakadu
Дата 14.9.2009, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



взял отсюда
Код
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.


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
Void
Дата 14.9.2009, 21:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 1
Всего: 173



Вещь эта компилируется с участием препроцессора CamlP4.
Чтобы использовать его в интерактивной среде, нужно загрузить модули:
Цитата
# #load "dynlink.cma";; (нужно начиная с OCaml 3.11)
# #load "camlp4o.cma";;

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



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума «Функциональные языки: общие вопросы»
Void
  • Пожалуйста, создавайте темы с содержательными названиями. Если у Вас вопрос по конкретному языку, укажите его в заголовке, например: «[Haskell] Как использовать монаду State».
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Функциональные языки: общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.