2016-02-25 7 views
1

J'écris un compilateur Aller à Python avec OCamllex et Menhir mais mon lexer ne parvient pas à importer le paquet Core.OCamllex ne peut pas importer le paquet Core (Aller au compilateur Python)

Voici mon fichier 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 ] 

J'ai un fichier make, make.sh pour mettre l'analyseur et ensemble lexer

#! /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 

Mais quand je lance ./make. sh Je reçois cette erreur:

==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 

Je suis en mesure d'ouvrir de base dans l'interpréteur OCaml, en éditant mon fichier .ocamlinit, mais comment im Port Core dans un script compilé par ocamlc?

+1

Pouvez-vous utiliser 'ocamlfind'? Ensuite, vous pouvez faire quelque chose comme 'ocamlfind ocamlc -paquetage core lex.ml -o lex'. – RichN

+0

J'ai essayé 'ocamlfind ocamlc -thread-paquet core lex.ml -o lex' et il trouve le paquet Core! –

+0

C'est génial! J'utilise toujours 'ocamlfind' quand je construis parce que ça marche. – RichN

Répondre

2

Retirez tout de votre script et il suffit d'utiliser

corebuild -use-menhir main.native 

corebuild déduira toutes les dépendances et les compiler et faire toutes les choses.