2010-07-10 9 views
17

Tôi muốn sử dụng regexps trong OCaml và có vẻ như mô-đun Str cung cấp các chức năng này.Cụm từ thông dụng trong OCaml

Vì vậy, tôi cố gắng với một chương trình đơn giản:

open Str 
let regx = regexp "." 

nhưng nó mang lại cho tôi những lỗi sau

File "lol.ml", line 1, characters 0-1: Error: Error while linking lol.cmo: Reference to undefined global `Str'

Như nếu module không có mặt nhưng nếu tôi loại bỏ open Str nó nói rằng regexp là một giá trị không liên kết.

Tôi không gặp vấn đề gì, Str phải là mô-đun chuẩn (theo http://caml.inria.fr/pub/docs/old-311/libref/Str.html) vì vậy tôi không biết gì cả. Tôi nghĩ là chữ ký đó (mli) hiện diện nhưng thực hiện (ml) thì không.

Tôi đang chạy Objective Caml version 3.11.0 theo công cụ ocaml.

Có ai có thể giúp tôi tìm ra điều này không? Cảm ơn trước

+3

Nếu bạn có thể tránh nó, bạn * thực sự * don không muốn sử dụng mô-đun 'Str'. API của nó không phải là reentrant, dẫn đến tất cả các cách thức của các vấn đề. May mắn thay, PCRE có các ràng buộc OCaml tốt tại: http://www.ocaml.info/home/ocaml_sources.html Bạn cũng có thể muốn kiểm tra Mikmatch để hỗ trợ cú pháp trên đầu PCRE engine. –

Trả lời

25

Từ the manual:

Programs that use the str library must be linked as follows:

ocamlc other options str.cma other files 
ocamlopt other options str.cmxa other files 
+1

Cảm ơn, tôi không biết vấn đề đó! – Jack

16

Hoặc bạn có thể đặt

#load "str.cma";; 

nếu bạn đang làm việc đó trong thông dịch

+0

Cảm ơn, điều này sẽ hữu ích trong khi cố gắng từ toplevel – Jack

+0

hi @newacct, bạn có thể vui lòng giải thích lý do tại sao ocamllex hiển thị lỗi khi tôi đặt dòng đó trong dòng 1 trong lexer.mll của tôi? lỗi là: Tham chiếu đến undefined global 'Str '.... –

1

Để thay thế cho các mô-đun Str có cũng Re2.

  1. Cài đặt nó bằng cách sử opam install re2
  2. Sử dụng các module trong your_file.ml như thế này:

    open Re2.Std 
    open Re2.Infix 
    let change input_text = Re2.rewrite_exn ~/"change this" "to that" input_text 
    let() = printf "%s" (change "change this") 
    
  3. Compile với ocamlbuild -use-ocamlfind -package re2 -package core -tag thread your_file.byte