Re: ML-Yacc generated code error
Boris D <[email protected]> Sun, 25 Jan 2009 10:58:30 -0800
| Newsgroups | gmane.comp.lang.sml.smlnj |
|---|---|
| Message-ID | <[email protected]> |
That solved it. Thanks. John Reppy wrote: > Your problem is that the types stm and exp are defined in the Absyn > structure. > You need to refer to them as A.stm and A.exp. > > - John > > On Jan 25, 2009, at 11:22 AM, Boris D wrote: > >> Hi, >> I'm trying to compile the parser for the straight-line language from >> the book "Modern Compiler Implementation in ML" (p.96). ML-Yacc >> processes the grammar file without problems, but the generated ML >> code gives me the following errors: >> >> slp.grm.sml:164.46-164.49 Error: unbound type constructor: stm >> slp.grm.sml:164.21-164.24 Error: unbound type constructor: stm >> slp.grm.sml:163.51-163.54 Error: unbound type constructor: exp >> slp.grm.sml:163.22-163.25 Error: unbound type constructor: exp >> slp.grm.sml:167.15-167.18 Error: unbound type constructor: stm >> >> I would appreciate any help in resolving these errors. The version of >> SML/NJ I'm using is 110.68, and I have attached the grammar file below. >> >> >> structure Absyn = struct >> type id = string >> datatype binop = Plus | Minus | Times | Div >> datatype stm = CompoundStm of stm * stm >> | AssignStm of id * exp >> | PrintStm of exp list >> and exp = IdExp of id >> | NumExp of int >> | OpExp of exp * binop * exp >> | EseqExp of stm * exp >> end >> structure A = Absyn >> %% >> %term INT of int | ID of string | PLUS | MINUS | TIMES | DIV >> | ASSIGN | PRINT | LPAREN | RPAREN | COMMA | SEMICOL | EOF >> %nonterm prog of stm | stm of stm | exp of exp | exps of exp list >> %right SEMICOL >> %left PLUS MINUS >> %left TIMES DIV >> %start prog >> %eop EOF >> %noshift EOF >> %pos int >> %name Slp >> %% >> prog: stm (stm) >> >> stm: stm SEMICOL stm (A.CompoundStm(stm1, stm2)) >> stm: ID ASSIGN exp (A.AssignStm(ID, exp)) >> stm: PRINT LPAREN exps RPAREN (A.PrintStm(exps)) >> >> exps: exp (exp :: nil) >> exps: exp COMMA exps (exp :: exps) >> >> exp: INT (A.NumExp(INT)) >> exp: ID (A.IdExp(ID)) >> exp: exp PLUS exp (A.OpExp(exp1, A.Plus, exp2)) >> exp: exp MINUS exp (A.OpExp(exp1, A.Minus, exp2)) >> exp: exp TIMES exp (A.OpExp(exp1, A.Times, exp2)) >> exp: exp DIV exp (A.OpExp(exp1, A.Div, exp2)) >> exp: stm COMMA exp (A.EseqExp(stm, exp)) >> exp: LPAREN exp RPAREN (exp) >> ------------------------------------------------------------------------------ >> >> This SF.net email is sponsored by: >> SourcForge Community >> SourceForge wants to tell your story. >> http://p.sf.net/sfu/sf-spreadtheword_______________________________________________ >> >> Smlnj-list mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/smlnj-list ------------------------------------------------------------------------------ This SF.net email is sponsored by: SourcForge Community SourceForge wants to tell your story. http://p.sf.net/sfu/sf-spreadtheword