2016-02-25 46 views
1

我正在编写一个转到Python编译器的OCamllex和Menhir,但是我的词法分析器无法导入Core包。OCamllex无法导入Core包(转到Python编译器)

这里是我的lex.mll文件:

{ 
    (* Header *) 

    open Core.Std 
    open Lexing 
    open Parser 

    exception SyntaxError of string 

    let next_line lexbuf = 
    let pos = lexbuf.lex_curr_p in 
    lexbuf.lex_curr_p <- 
     { pos with pos_bol = lexbuf.lex_curr_pos; 
      pos_lnum = pos.pos_lnum + 1 
     } 

    let syntaxError msg = raise (SyntaxError (msg^" on line "^(string_of_int next_line))) 


    (* End Header *) 
} 

[ lexer rules ] 

我有一个make文件,make.sh把词法和语法分析器一起

#! /bin/bash 
echo "==Creating compiler==" 

echo "- OCamllex : lex.mll -> lex.ml" 
ocamllex lex.mll 

echo "- OCaml : lex.ml -> lex" 
ocamlc lex.ml -o lex 

# echo "- OCamlBuild -> main.ml" 
# ocamlbuild -use-menhir main.native 

但是当我运行./make。 SH我得到这个错误:

==Creating compiler== 
- OCamllex : lex.mll -> lex.ml 
1030 states, 16995 transitions, table size 74160 bytes 
- OCaml : lex.ml -> lex 
File "lex.mll", line 4, characters 7-15: 
Error: Unbound module Core 

我能够在OCaml的解释,以开核,通过编辑我的.ocamlinit文件,但如何即时通讯由ocamlc编译的脚本中的端口核心?

+1

你可以使用'ocamlfind'吗?然后你可以做一些像'ocamlfind ocamlc -package core lex.ml -o lex'。 – RichN

+0

我试过'ocamlfind ocamlc -thread -package core lex.ml -o lex',它发现了包Core! –

+0

太棒了!建筑时我总是使用'ocamlfind',因为它工作正常。 – RichN

回答

2

从你的脚本中删除一切,只使用

corebuild -use-menhir main.native 

corebuild将推断所有的依赖和编译他们,做所有的东西。