Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/ml-yacc/src/yacc.grm
ViewVC logotype

Annotation of /sml/trunk/src/ml-yacc/src/yacc.grm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 250 - (view) (download)

1 : monnier 249 (* ML-Yacc Parser Generator (c) 1989 Andrew W. Appel, David R. Tarditi *)
2 :    
3 :     (* parser for the ML parser generator *)
4 :    
5 :     open Hdr
6 :     %%
7 :    
8 :     %name Mlyacc
9 :     %eop EOF
10 :     %noshift EOF
11 :     %right ARROW
12 :     %left ASTERISK
13 :     %pos int
14 :    
15 :     %term ARROW | ASTERISK | BLOCK | BAR | CHANGE | COLON |
16 :     COMMA | DELIMITER | EOF | FOR |
17 :     HEADER of string | ID of string*int | IDDOT of string |
18 :     PERCENT_HEADER | INT of string | KEYWORD | LBRACE | LPAREN |
19 :     NAME | NODEFAULT | NONTERM | NOSHIFT | OF |
20 :     PERCENT_EOP | PERCENT_PURE | PERCENT_POS | PERCENT_ARG |
21 :     PERCENT_TOKEN_SIG_INFO |
22 :     PREC of Header.prec | PREC_TAG | PREFER |
23 :     PROG of string | RBRACE | RPAREN | SUBST | START |
24 :     TERM | TYVAR of string | VERBOSE | VALUE |
25 :     UNKNOWN of string | BOGUS_VALUE
26 :    
27 :     %nonterm
28 :     BEGIN of string * Hdr.declData * (Hdr.rule list) |
29 :     CONSTR_LIST of (Hdr.symbol * Hdr.ty option) list |
30 :     ID_LIST of Hdr.symbol list |
31 :     LABEL of string |
32 :     MPC_DECL of Hdr.declData |
33 :     MPC_DECLS of Hdr.declData |
34 :     QUAL_ID of string |
35 :     RECORD_LIST of string |
36 :     RHS_LIST of {rhs:Hdr.symbol list,code:string,
37 :     prec:Hdr.symbol option} list |
38 :     G_RULE of Hdr.rule list |
39 :     G_RULE_LIST of Hdr.rule list |
40 :     G_RULE_PREC of Hdr.symbol option |
41 :     SUBST_DECL of (Hdr.symbol list * Hdr.symbol list) list |
42 :     SUBST_DEC of (Hdr.symbol list * Hdr.symbol list) |
43 :     CHANGE_DECL of (Hdr.symbol list * Hdr.symbol list) list |
44 :     CHANGE_DEC of (Hdr.symbol list * Hdr.symbol list) |
45 :     TY of string
46 :     %header (
47 :     functor MlyaccLrValsFun(structure Hdr : HEADER
48 :     where type prec = Header.prec
49 :     structure Token : TOKEN)
50 :     )
51 :     %arg (inputSource) : Hdr.inputSource
52 :     %%
53 :    
54 :     BEGIN : HEADER MPC_DECLS DELIMITER G_RULE_LIST
55 :     (HEADER,MPC_DECLS,rev G_RULE_LIST)
56 :    
57 :     MPC_DECLS : MPC_DECLS MPC_DECL
58 :     (join_decls(MPC_DECLS,MPC_DECL,inputSource,MPC_DECLleft))
59 :    
60 :     MPC_DECLS: (DECL {prec=nil,nonterm=NONE,term=NONE,eop=nil,control=nil,
61 :     keyword=nil,change=nil,
62 :     value=nil})
63 :    
64 :     MPC_DECL: TERM CONSTR_LIST
65 :     (DECL { prec=nil,nonterm=NONE,
66 :     term = SOME CONSTR_LIST, eop =nil,control=nil,
67 :     change=nil,keyword=nil,
68 :     value=nil})
69 :    
70 :     | NONTERM CONSTR_LIST
71 :     (DECL { prec=nil,control=nil,nonterm= SOME CONSTR_LIST,
72 :     term = NONE, eop=nil,change=nil,keyword=nil,
73 :     value=nil})
74 :    
75 :     | PREC ID_LIST
76 :     (DECL {prec= [(PREC,ID_LIST)],control=nil,
77 :     nonterm=NONE,term=NONE,eop=nil,change=nil,
78 :     keyword=nil,value=nil})
79 :    
80 :     | START ID
81 :     (DECL {prec=nil,control=[START_SYM (symbolMake ID)],nonterm=NONE,
82 :     term = NONE, eop = nil,change=nil,keyword=nil,
83 :     value=nil})
84 :    
85 :     | PERCENT_EOP ID_LIST
86 :     (DECL {prec=nil,control=nil,nonterm=NONE,term=NONE,
87 :     eop=ID_LIST, change=nil,keyword=nil,
88 :     value=nil})
89 :    
90 :     | KEYWORD ID_LIST
91 :     (DECL {prec=nil,control=nil,nonterm=NONE,term=NONE,eop=nil,
92 :     change=nil,keyword=ID_LIST,
93 :     value=nil})
94 :    
95 :     | PREFER ID_LIST
96 :     (DECL {prec=nil,control=nil,nonterm=NONE,term=NONE,eop=nil,
97 :     change=map (fn i=>([],[i])) ID_LIST,keyword=nil,
98 :     value=nil})
99 :    
100 :     | CHANGE CHANGE_DECL
101 :     (DECL {prec=nil,control=nil,nonterm=NONE,term=NONE,eop=nil,
102 :     change=CHANGE_DECL,keyword=nil,
103 :     value=nil})
104 :     | SUBST SUBST_DECL
105 :     (DECL {prec=nil,control=nil,nonterm=NONE,term=NONE,eop=nil,
106 :     change=SUBST_DECL,keyword=nil,
107 :     value=nil})
108 :     | NOSHIFT ID_LIST
109 :     (DECL {prec=nil,control=[NSHIFT ID_LIST],nonterm=NONE,term=NONE,
110 :     eop=nil,change=nil,keyword=nil,
111 :     value=nil})
112 :     | PERCENT_HEADER PROG
113 :     (DECL {prec=nil,control=[FUNCTOR PROG],nonterm=NONE,term=NONE,
114 :     eop=nil,change=nil,keyword=nil,
115 :     value=nil})
116 :     | PERCENT_TOKEN_SIG_INFO PROG
117 :     (DECL {prec=nil,control=[TOKEN_SIG_INFO PROG],
118 :     nonterm=NONE,term=NONE,
119 :     eop=nil,change=nil,keyword=nil,
120 :     value=nil})
121 :     | NAME ID
122 :     (DECL {prec=nil,control=[PARSER_NAME (symbolMake ID)],
123 :     nonterm=NONE,term=NONE,
124 :     eop=nil,change=nil,keyword=nil, value=nil})
125 :    
126 :     | PERCENT_ARG PROG COLON TY
127 :     (DECL {prec=nil,control=[PARSE_ARG(PROG,TY)],nonterm=NONE,
128 :     term=NONE,eop=nil,change=nil,keyword=nil,
129 :     value=nil})
130 :    
131 :     | VERBOSE
132 :     (DECL {prec=nil,control=[Hdr.VERBOSE],
133 :     nonterm=NONE,term=NONE,eop=nil,
134 :     change=nil,keyword=nil,
135 :     value=nil})
136 :     | NODEFAULT
137 :     (DECL {prec=nil,control=[Hdr.NODEFAULT],
138 :     nonterm=NONE,term=NONE,eop=nil,
139 :     change=nil,keyword=nil,
140 :     value=nil})
141 :     | PERCENT_PURE
142 :     (DECL {prec=nil,control=[Hdr.PURE],
143 :     nonterm=NONE,term=NONE,eop=nil,
144 :     change=nil,keyword=nil,
145 :     value=nil})
146 :     | PERCENT_POS TY
147 :     (DECL {prec=nil,control=[Hdr.POS TY],
148 :     nonterm=NONE,term=NONE,eop=nil,
149 :     change=nil,keyword=nil,
150 :     value=nil})
151 :     | VALUE ID PROG
152 :     (DECL {prec=nil,control=nil,
153 :     nonterm=NONE,term=NONE,eop=nil,
154 :     change=nil,keyword=nil,
155 :     value=[(symbolMake ID,PROG)]})
156 :    
157 :     CHANGE_DECL : CHANGE_DEC BAR CHANGE_DECL
158 :     (CHANGE_DEC :: CHANGE_DECL)
159 :     | CHANGE_DEC
160 :     ([CHANGE_DEC])
161 :    
162 :     CHANGE_DEC : ID_LIST ARROW ID_LIST
163 :     (ID_LIST1, ID_LIST2)
164 :    
165 :     SUBST_DECL : SUBST_DEC BAR SUBST_DECL
166 :     (SUBST_DEC :: SUBST_DECL)
167 :     | SUBST_DEC
168 :     ([SUBST_DEC])
169 :    
170 :     SUBST_DEC: ID FOR ID
171 :     ([symbolMake ID2],[symbolMake ID1])
172 :    
173 :     CONSTR_LIST : CONSTR_LIST BAR ID OF TY
174 :     ((symbolMake ID,SOME (tyMake TY))::CONSTR_LIST)
175 :    
176 :     | CONSTR_LIST BAR ID
177 :     ((symbolMake ID,NONE)::CONSTR_LIST)
178 :    
179 :     | ID OF TY ([(symbolMake ID,SOME (tyMake TY))])
180 :    
181 :     | ID ([(symbolMake ID,NONE)])
182 :    
183 :     G_RULE : ID COLON RHS_LIST
184 :     (map (fn {rhs,code,prec} =>
185 :     Hdr.RULE {lhs=symbolMake ID,rhs=rhs,
186 :     code=code,prec=prec})
187 :     RHS_LIST)
188 :    
189 :     G_RULE_LIST: G_RULE_LIST G_RULE (G_RULE@G_RULE_LIST)
190 :     | G_RULE (G_RULE)
191 :    
192 :     ID_LIST : ID ID_LIST (symbolMake ID :: ID_LIST)
193 :     | (nil)
194 :    
195 :     RHS_LIST : ID_LIST G_RULE_PREC PROG
196 :     ([{rhs=ID_LIST,code=PROG,prec=G_RULE_PREC}])
197 :    
198 :     | RHS_LIST BAR ID_LIST G_RULE_PREC PROG
199 :     ({rhs=ID_LIST,code=PROG,prec=G_RULE_PREC}::RHS_LIST)
200 :    
201 :     TY : TYVAR
202 :     (TYVAR)
203 :     | LBRACE RECORD_LIST RBRACE
204 :     ("{ "^RECORD_LIST^" } ")
205 :     | LBRACE RBRACE
206 :     ("{}")
207 :     | PROG
208 :     (" ( "^PROG^" ) ")
209 :     | TY QUAL_ID
210 :     (TY^" "^QUAL_ID)
211 :     | QUAL_ID
212 :     (QUAL_ID)
213 :     | TY ASTERISK TY
214 :     (TY1^"*"^TY2)
215 :     | TY ARROW TY
216 :     (TY1 ^ " -> " ^ TY2)
217 :    
218 :     RECORD_LIST : RECORD_LIST COMMA LABEL COLON TY
219 :     (RECORD_LIST^","^LABEL^":"^TY)
220 :     | LABEL COLON TY
221 :     (LABEL^":"^TY)
222 :    
223 :     QUAL_ID : ID ((fn (a,_) => a) ID)
224 :     | IDDOT QUAL_ID (IDDOT^QUAL_ID)
225 :    
226 :     LABEL : ID ((fn (a,_) => a) ID)
227 :     | INT (INT)
228 :    
229 :     G_RULE_PREC : PREC_TAG ID (SOME (symbolMake ID))
230 :    
231 :     G_RULE_PREC : (NONE)

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0