ML-Yacc generated code error
Boris D <[email protected]> Sun, 25 Jan 2009 09:22:22 -0800
| Newsgroups | gmane.comp.lang.sml.smlnj |
|---|---|
| Message-ID | <[email protected]> |
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. ------------------------------------------------------------------------------ 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
slp.grm
(text/plain, 1.1 KB)
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)