From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id EAA05569; Fri, 31 Aug 2001 04:37:49 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id EAA05475 for ; Fri, 31 Aug 2001 04:37:48 +0200 (MET DST) Received: from fledge.watson.org ([204.156.12.50]) by nez-perce.inria.fr (8.11.1/8.10.0) with ESMTP id f7V2bl515167 for ; Fri, 31 Aug 2001 04:37:47 +0200 (MET DST) Received: from localhost (patrick@localhost) by fledge.watson.org (8.11.6/8.11.5) with SMTP id f7V2Z2L01142; Thu, 30 Aug 2001 22:35:03 -0400 (EDT) (envelope-from patrick@watson.org) Date: Thu, 30 Aug 2001 22:35:02 -0400 (EDT) From: Patrick M Doane To: Michael Leary cc: caml Subject: Re: [Caml-list] unbound value Parser.main? In-Reply-To: <20010830191958.B32310@ip178.usw22.rb1.bel.nwlink.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk 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 > > %token DOUBLE > > %token HEX > > %token STRING > > %token EOL INITIALIZE YOURNAME YOURCOLOUR GAMEOPTION GAMESTARTS RADAR INFO COORDINATES ROBOTINFO ROTATIONREACHED ENERGY ROBOTSLEFT COLLISION WARNING DEAD GAMEFINISHES EXITROBOT > > %start main > > %type 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