1 (* Modified by Vesa Karvonen on 2007-12-18.
2 * Create line directives in output.
4 (* ML-Yacc Parser Generator (c) 1989 Andrew W. Appel, David R. Tarditi *)
6 (* parser for the ML parser generator *)
18 %term ARROW | ASTERISK | BLOCK | BAR | CHANGE | COLON |
19 COMMA | DELIMITER | EOF | FOR |
20 HEADER of string | ID of string*Header.pos | IDDOT of string |
21 PERCENT_HEADER | INT of string | KEYWORD | LBRACE | LPAREN |
22 NAME | NODEFAULT | NONTERM | NOSHIFT | OF |
23 PERCENT_EOP | PERCENT_PURE | PERCENT_POS | PERCENT_ARG |
24 PERCENT_TOKEN_SIG_INFO |
25 PREC of Header.prec | PREC_TAG | PREFER |
26 PROG of string | RBRACE | RPAREN | SUBST | START |
27 TERM | TYVAR of string | VERBOSE | VALUE |
28 UNKNOWN of string | BOGUS_VALUE
31 BEGIN of string * Hdr.declData * (Hdr.rule list) |
32 CONSTR_LIST of (Hdr.symbol * Hdr.ty option) list |
33 ID_LIST of Hdr.symbol list |
35 MPC_DECL of Hdr.declData |
36 MPC_DECLS of Hdr.declData |
38 RECORD_LIST of string |
39 RHS_LIST of {rhs:Hdr.symbol list,code:{text:string, pos:Header.pos},
40 prec:Hdr.symbol option} list |
41 G_RULE of Hdr.rule list |
42 G_RULE_LIST of Hdr.rule list |
43 G_RULE_PREC of Hdr.symbol option |
44 SUBST_DECL of (Hdr.symbol list * Hdr.symbol list) list |
45 SUBST_DEC of (Hdr.symbol list * Hdr.symbol list) |
46 CHANGE_DECL of (Hdr.symbol list * Hdr.symbol list) list |
47 CHANGE_DEC of (Hdr.symbol list * Hdr.symbol list) |
50 functor MlyaccLrValsFun(structure Hdr : HEADER
51 where type prec = Header.prec
52 structure Token : TOKEN)
54 %arg (inputSource) : Hdr.inputSource
57 BEGIN : HEADER MPC_DECLS DELIMITER G_RULE_LIST
58 (HEADER,MPC_DECLS,rev G_RULE_LIST)
60 MPC_DECLS : MPC_DECLS MPC_DECL
61 (join_decls(MPC_DECLS,MPC_DECL,inputSource,MPC_DECLleft))
63 MPC_DECLS: (DECL {prec=nil,nonterm=NONE,term=NONE,eop=nil,control=nil,
64 keyword=nil,change=nil,
67 MPC_DECL: TERM CONSTR_LIST
68 (DECL { prec=nil,nonterm=NONE,
69 term = SOME CONSTR_LIST, eop =nil,control=nil,
70 change=nil,keyword=nil,
74 (DECL { prec=nil,control=nil,nonterm= SOME CONSTR_LIST,
75 term = NONE, eop=nil,change=nil,keyword=nil,
79 (DECL {prec= [(PREC,ID_LIST)],control=nil,
80 nonterm=NONE,term=NONE,eop=nil,change=nil,
81 keyword=nil,value=nil})
84 (DECL {prec=nil,control=[START_SYM (symbolMake ID)],nonterm=NONE,
85 term = NONE, eop = nil,change=nil,keyword=nil,
89 (DECL {prec=nil,control=nil,nonterm=NONE,term=NONE,
90 eop=ID_LIST, change=nil,keyword=nil,
94 (DECL {prec=nil,control=nil,nonterm=NONE,term=NONE,eop=nil,
95 change=nil,keyword=ID_LIST,
99 (DECL {prec=nil,control=nil,nonterm=NONE,term=NONE,eop=nil,
100 change=map (fn i=>([],[i])) ID_LIST,keyword=nil,
104 (DECL {prec=nil,control=nil,nonterm=NONE,term=NONE,eop=nil,
105 change=CHANGE_DECL,keyword=nil,
108 (DECL {prec=nil,control=nil,nonterm=NONE,term=NONE,eop=nil,
109 change=SUBST_DECL,keyword=nil,
112 (DECL {prec=nil,control=[NSHIFT ID_LIST],nonterm=NONE,term=NONE,
113 eop=nil,change=nil,keyword=nil,
115 | PERCENT_HEADER PROG
116 (DECL {prec=nil,control=[FUNCTOR PROG],nonterm=NONE,term=NONE,
117 eop=nil,change=nil,keyword=nil,
119 | PERCENT_TOKEN_SIG_INFO PROG
120 (DECL {prec=nil,control=[TOKEN_SIG_INFO PROG],
121 nonterm=NONE,term=NONE,
122 eop=nil,change=nil,keyword=nil,
125 (DECL {prec=nil,control=[PARSER_NAME (symbolMake ID)],
126 nonterm=NONE,term=NONE,
127 eop=nil,change=nil,keyword=nil, value=nil})
129 | PERCENT_ARG PROG COLON TY
130 (DECL {prec=nil,control=[PARSE_ARG(PROG,TY)],nonterm=NONE,
131 term=NONE,eop=nil,change=nil,keyword=nil,
135 (DECL {prec=nil,control=[Hdr.VERBOSE],
136 nonterm=NONE,term=NONE,eop=nil,
137 change=nil,keyword=nil,
140 (DECL {prec=nil,control=[Hdr.NODEFAULT],
141 nonterm=NONE,term=NONE,eop=nil,
142 change=nil,keyword=nil,
145 (DECL {prec=nil,control=[Hdr.PURE],
146 nonterm=NONE,term=NONE,eop=nil,
147 change=nil,keyword=nil,
150 (DECL {prec=nil,control=[Hdr.POS TY],
151 nonterm=NONE,term=NONE,eop=nil,
152 change=nil,keyword=nil,
155 (DECL {prec=nil,control=nil,
156 nonterm=NONE,term=NONE,eop=nil,
157 change=nil,keyword=nil,
158 value=[(symbolMake ID,PROG)]})
160 CHANGE_DECL : CHANGE_DEC BAR CHANGE_DECL
161 (CHANGE_DEC :: CHANGE_DECL)
165 CHANGE_DEC : ID_LIST ARROW ID_LIST
168 SUBST_DECL : SUBST_DEC BAR SUBST_DECL
169 (SUBST_DEC :: SUBST_DECL)
174 ([symbolMake ID2],[symbolMake ID1])
176 CONSTR_LIST : CONSTR_LIST BAR ID OF TY
177 ((symbolMake ID,SOME (tyMake TY))::CONSTR_LIST)
180 ((symbolMake ID,NONE)::CONSTR_LIST)
182 | ID OF TY ([(symbolMake ID,SOME (tyMake TY))])
184 | ID ([(symbolMake ID,NONE)])
186 G_RULE : ID COLON RHS_LIST
187 (map (fn {rhs,code,prec} =>
188 Hdr.RULE {lhs=symbolMake ID,rhs=rhs,
189 code=code,prec=prec})
192 G_RULE_LIST: G_RULE_LIST G_RULE (G_RULE@G_RULE_LIST)
195 ID_LIST : ID ID_LIST (symbolMake ID :: ID_LIST)
198 RHS_LIST : ID_LIST G_RULE_PREC PROG
199 ([{rhs=ID_LIST,code={text=PROG,pos=PROGleft},prec=G_RULE_PREC}])
201 | RHS_LIST BAR ID_LIST G_RULE_PREC PROG
202 ({rhs=ID_LIST,code={text=PROG,pos=PROGleft},prec=G_RULE_PREC}::RHS_LIST)
206 | LBRACE RECORD_LIST RBRACE
207 ("{ "^RECORD_LIST^" } ")
221 RECORD_LIST : RECORD_LIST COMMA LABEL COLON TY
222 (RECORD_LIST^","^LABEL^":"^TY)
226 QUAL_ID : ID ((fn (a,_) => a) ID)
227 | IDDOT QUAL_ID (IDDOT^QUAL_ID)
229 LABEL : ID ((fn (a,_) => a) ID)
232 G_RULE_PREC : PREC_TAG ID (SOME (symbolMake ID))