2016-02-25 6 views
1

Я пишу компилятор Go to Python с OCamllex и Menhir, но мой lexer не может импортировать пакет Core.OCamllex не может импортировать основной пакет (Перейти к компилятору 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.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. ш Я получаю эту ошибку:

==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, но как им port Core в скрипте, составленном 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' при построении, потому что это Just Works. – RichN

ответ

2

Удалите все из вашего сценария и просто использовать

corebuild -use-menhir main.native 

corebuild будет выводить все зависимости и компилировать их, и делать все вещи.