Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] unbound value Parser.main?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Patrick M Doane <patrick@w...>
Subject: Re: [Caml-list] unbound value Parser.main?
Hi Michael,

You'll want to swap the ordering of lexer.mll and parser.mly so that the
parser.cmi file will be built before compiling the lexer.

Hope that helps!

Patrick

On Thu, 30 Aug 2001, Michael Leary wrote:

> doh!  the OcamlMakefile... is picky about names.
> 
> I've got it like this now:
> 
> SOURCES = lexer.mll parser.mly fbot.ml 
> RESULT = fbot
> LIBS=str
> 
> but now getting:
> 
> ocamllex.opt lexer.mll
> 134 states, 7680 transitions, table size 31524 bytes
> ocamlyacc  parser.mly
> make[1]: Entering directory `/home/leary/dev/ocaml/fbot'
> making ._ncdi/parser.di from parser.mli
> making ._d/parser.d from parser.ml
> making ._d/lexer.d from lexer.ml
> making ._d/fbot.d from fbot.ml
> make[1]: Leaving directory `/home/leary/dev/ocaml/fbot'
> make[1]: Entering directory `/home/leary/dev/ocaml/fbot'
> ocamlopt.opt -c       lexer.ml
> File "lexer.mll", line 2, characters 0-11:
> Unbound module Parser
> make[1]: *** [lexer.cmi] Error 2
> make[1]: Leaving directory `/home/leary/dev/ocaml/fbot'
> make: *** [native-code] Error 2
> 
> which seems closer to the problem... :/
> 
> 
> On Thu, Aug 30, 2001 at 06:46:00PM -0700, Michael Leary wrote:
> > || ocamllex.opt lexer.mll
> > || 134 states, 7680 transitions, table size 31524 bytes
> > || ocamlyacc  parser.mly
> > || make[1]: Entering directory `/home/leary/dev/ocaml/fbot'
> > || making ._ncdi/parser.di from parser.mli
> > || making ._d/parser.d from parser.ml
> > || making ._d/lexer.d from lexer.ml
> > || making ._d/fbot.d from fbot.ml
> > || make[1]: Leaving directory `/home/leary/dev/ocaml/fbot'
> > || make[1]: Entering directory `/home/leary/dev/ocaml/fbot'
> > || ocamlopt.opt -c       fbot.ml
> > fbot.ml|302 col 16| File "fbot.ml", line 302, characters 16-27: Unbound
> > value Parser.main
> > || make[1]: *** [fbot.cmi] Error 2
> > || make[1]: Leaving directory `/home/leary/dev/ocaml/fbot'
> > || make: *** [native-code] Error 2
> > 
> > let _ =
> > 	try
> > 		let lexbuf = Lexing.from_channel stdin in
> > 		while true do
> > 			let result = Parser.main Lexer.token lexbuf in ();   <--- here
> > 		done
> > 	with Lexer.Eof -> exit 0
> > 
> > I'm assuming that (as usual) there's something plainly obvious I'm missing
> > here, but just in case, here's the lexer and parser:
> > 
> > lexer.mll:
> > 
> > {
> > open Parser
> > exception Eof
> > }
> > rule token = parse
> > 		[' ' '\t']                         { token lexbuf }
> > 	| ['\n']                             { EOL }
> > 	| "Initialize"                       { INITIALIZE }
> > 	| "YourName"                         { YOURNAME }
> > 	| "YourColour"                       { YOURCOLOUR }
> > 	| "GameOption"                       { GAMEOPTION }
> > 	| "GameStarts"                       { GAMESTARTS }
> > 	| "Radar"                            { RADAR }
> > 	| "Info"                             { INFO }
> > 	| "Coordinates"                      { COORDINATES }
> > 	| "RobotInfo"                        { ROBOTINFO }
> > 	| "RotationReached"                  { ROTATIONREACHED }
> > 	| "Energy"                           { ENERGY }
> > 	| "RobotsLeft"                       { ROBOTSLEFT }
> > 	| "Collision"                        { COLLISION }
> > 	| "Warning"                          { WARNING }
> > 	| "Dead"                             { DEAD }
> > 	| "GameFinishes"                     { GAMEFINISHES }
> > 	| "ExitRobot"                        { EXITROBOT }
> > 	| ['0' - '9']+                       { INT(int_of_string(Lexing.lexeme lexbuf)) }
> > 	| ['0' - '9']+ '.' ['0' - '9']+      { DOUBLE(float_of_string(Lexing.lexeme lexbuf)) }
> > 	| ['0' - '9' 'a' - 'f' 'A' - 'F']    { HEX }
> > 	| ['a' - 'z' 'A' - 'Z']+             { STRING }
> > 	| eof                                { raise Eof }
> > 
> > 
> > parser.mly:
> > 
> > %token <int> INT
> > %token <float> DOUBLE
> > %token <string> HEX
> > %token <string> STRING
> > %token EOL INITIALIZE YOURNAME YOURCOLOUR GAMEOPTION GAMESTARTS RADAR INFO COORDINATES ROBOTINFO ROTATIONREACHED ENERGY ROBOTSLEFT COLLISION WARNING DEAD GAMEFINISHES EXITROBOT
> > %start main
> > %type <int> main
> > %%
> > main:
> > 	| INITIALIZE INT EOL { initialize INT }
> > 	| YOURNAME STRING EOL { your_name STRING }
> > 	| YOURCOLOUR HEX EOL { your_color HEX }
> > 	| GAMEOPTION INT DOUBLE EOL { game_option INT }
> > 	| GAMESTARTS EOL { game_starts }
> > 	| RADAR DOUBLE INT DOUBLE EOL { radar DOUBLE INT DOUBLE }
> > 	| INFO DOUBLE DOUBLE DOUBLE EOL { info DOUBLE DOUBLE DOUBLE }
> > 	| COORDINATES DOUBLE DOUBLE DOUBLE EOL { coordinates DOUBLE DOUBLE DOUBLE }
> > 	| ROBOTINFO DOUBLE INT EOL { robot_info DOUBLE INT }
> > 	| ROTATIONREACHED INT EOL { rotation_reached INT }
> > 	| ENERGY DOUBLE EOL { energy DOUBLE }
> > 	| ROBOTSLEFT INT EOL { robots_left INT }
> > 	| COLLISION INT DOUBLE EOL { collision INT }
> > 	| WARNING INT STRING EOL { warning INT STRING }
> > 	| DEAD EOL { dead }
> > 	| GAMEFINISHES EOL { game_finishes }
> > 	| EXITROBOT EOL { exit_robot }
> > ;
> > 
> > 
> > thanks!
> > Mike
> > 
> > -- 
> > -------------------
> > Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
> > To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr
> 
> -- 
> -------------------
> Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
> To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr
> 

-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr