|
|
1.1 root 1: type Lineno = int
2: val lineno = ref 0
3: val error = fn x => fn (lineno : int) =>
4: (output std_out (makestring lineno ^ ": " ^ x ^ "\n"))
5: %%
6: %term EOF | ID | DOT | TYVAR | INT | REAL | STRING |
7: ABSTRACTION | ABSTYPE | AND | ARROW | AS | BAR | BARBAR |
8: CASE |
9: DATATYPE |
10: DOTDOTDOT | ELSE | END | EQUAL | EQTYPE | EXCEPTION |
11: EXCEPTIONX |
12: DO | DARROW | FN | FUN | FUNCTOR | HANDLE | HANDLEX | HASH |
13: IF | IN | INCLUDE | INFIX | INFIXR | LET |
14: LOCAL | NONFIX | OF | OP | OPEN | OVERLOAD |
15: QUERY | RAISE | RAISEX | REC |
16: SHARING | SIG | SIGNATURE | STRUCT | STRUCTURE |
17: THEN | TYPE | VAL | WHILE | WILD | WITH | WITHTYPE |
18: ASTERISK | COLON | COMMA | LBRACE | LBRACKET | LPAREN |
19: RBRACE | RBRACKET | RPAREN | SEMICOLON |
20: ORELSE | ANDALSO
21:
22: %nonterm iddot | ident | nonfix_ident | opid | qid | selector | elabel |
23: elabels | plabel | plabels | tlabel | tabels0 | ty0 | ty0_pc |
24: ty2 | ty | withclause | match | rule | handlerx | hrulex | exp_ps |
25: exp | exp1 | exp2 | constraint | exp3 | exp4 | aexp | bexp |
26: exp_2c | pat | pat1 | pat2 | pat3 | apat | apat1 | pat_2c | pat_ps |
27: vb | rvb | fg | apat_p | clause | tb | tyvars | tyvar_pc | db |
28: constr | eb | ebx | qid_p | fixity | ldec | exp_pa | ldecs |
29: ops | spec_s | spec | strspec | tyspec | valspec | exnspecx |
30: exnspec | fb | tlabels | tlabels0 |
31: sharespec | patheqn | sign | sigconstraint_op | sigb |
32: str | sdecs | sdec | strb | fparam | fctb | tdec | top |
33: interdec
34:
35: %verbose
36:
37: %start tdec
38: %eof EOF
39:
40: %nonassoc WITHTYPE
41: %right AND
42: %right BAR
43: %right ARROW
44: %right DO
45: %right HANDLE HANDLEX
46: %right RAISE
47: %left ORELSE
48: %left ANDALSO
49:
50: %%
51:
52: iddot : ID DOT
53: ()
54: ident : ID ()
55: | ASTERISK ()
56: | EQUAL ()
57:
58: nonfix_ident : ident ()
59:
60: opid : nonfix_ident ()
61: | OP ident ()
62:
63: qid : iddot qid ()
64: | ident ()
65:
66: selector: ID ()
67: | INT ()
68:
69: elabel : selector EQUAL exp ()
70:
71: elabels: elabel COMMA elabels ()
72: | elabel ()
73:
74: plabel : selector EQUAL pat ()
75: | ID ()
76: | ID AS pat ()
77: | ID COLON ty AS pat ()
78:
79: plabels : plabel COMMA plabels ()
80: | plabel ()
81: | DOTDOTDOT ()
82:
83: tlabel : selector COLON ty0 ()
84:
85: tlabels0: tlabel COMMA tlabels0 ()
86: | tlabel ()
87:
88: tlabels : tlabels0 ()
89: | ()
90:
91: ty0 : ty0 ARROW ty0 ()
92: | ty2 ASTERISK ty2 ()
93: | ty2 ()
94:
95: ty0_pc : ty0 ()
96: | ty0 COMMA ty0_pc ()
97:
98: ty2 : LPAREN ty0_pc RPAREN qid ()
99: | qid ()
100: | LBRACE tlabels RBRACE ()
101:
102: ty : ty0 ()
103:
104: withclause: WITH exp ()
105: | ()
106:
107: match : rule ()
108: | match BAR match ()
109:
110: rule : pat DARROW exp ()
111:
112: handlerx: handlerx BARBAR handlerx ()
113: | hrulex ()
114:
115: hrulex : qid WITH match ()
116: | qid DARROW exp ()
117: | QUERY DARROW exp ()
118:
119: exp_ps : exp ()
120: | exp SEMICOLON exp_ps ()
121:
122: exp : exp1 %prec BAR ()
123:
124: exp1 : exp1 HANDLEX handlerx ()
125: | exp1 HANDLE match ()
126: | exp2 %prec HANDLE ()
127:
128: exp2 : exp3 constraint ()
129: | exp3 bexp ()
130: | bexp ()
131: | exp2 ORELSE exp2 ()
132: | exp2 ANDALSO exp2 ()
133:
134: constraint: ()
135: | COLON ty ()
136:
137: exp3 : exp4 ()
138: | exp3 exp4 ()
139:
140: exp4 : ID ()
141: | aexp ()
142:
143: aexp : OP ID ()
144: | iddot qid ()
145: | INT ()
146: | REAL ()
147: | STRING ()
148: | HASH selector ()
149: | LBRACE elabels RBRACE ()
150: | LBRACE RBRACE ()
151: | LPAREN RPAREN ()
152: | LPAREN exp RPAREN ()
153: | LPAREN exp_2c RPAREN ()
154: | LBRACKET exp_ps RBRACKET ()
155: | LBRACKET RBRACKET ()
156: | LET ldecs IN exp_ps END ()
157:
158: bexp : FN match ()
159: | CASE exp OF match ()
160: | WHILE exp DO exp ()
161: | IF exp THEN exp ELSE exp ()
162: | RAISEX qid withclause ()
163: | RAISE exp2 ()
164:
165:
166: exp_2c : exp COMMA exp_2c ()
167: | exp COMMA exp ()
168:
169: pat : pat1 ()
170: | pat1 AS pat1 ()
171:
172: pat1 : pat2 ()
173: | pat2 COLON ty ()
174:
175: pat2 : pat3 ()
176: | pat2 pat3 ()
177:
178: pat3 : ID ()
179: | apat1 ()
180:
181: apat : ID ()
182: | apat1 ()
183:
184: apat1 : OP ident ()
185: | iddot qid ()
186: | INT ()
187: | REAL ()
188: | STRING ()
189: | WILD ()
190: | LPAREN RPAREN ()
191: | LPAREN pat RPAREN ()
192: | LPAREN pat_2c RPAREN ()
193: | LBRACKET RBRACKET ()
194: | LBRACKET pat_ps RBRACKET ()
195: | LBRACE RBRACE ()
196: | LBRACE plabels RBRACE ()
197:
198: pat_2c : pat COMMA pat_2c ()
199: | pat COMMA pat ()
200:
201: pat_ps : pat ()
202: | pat SEMICOLON pat_ps ()
203:
204: vb : vb AND vb ()
205: | pat EQUAL exp ()
206:
207: rvb : opid constraint EQUAL exp ()
208: | rvb AND rvb ()
209:
210: fb : clause ()
211: | clause BAR fb ()
212: | fb AND fb ()
213:
214: apat_p : apat ()
215: | apat_p apat ()
216:
217: clause : apat_p constraint EQUAL exp ()
218:
219: tb : tyvars ident EQUAL ty ()
220: | tb AND tb ()
221:
222: tyvars : TYVAR ()
223: | LPAREN tyvar_pc RPAREN ()
224: | ()
225:
226: tyvar_pc: TYVAR ()
227: | TYVAR COMMA tyvar_pc ()
228:
229: db : db AND db ()
230: | db WITHTYPE tb ()
231: | tyvars ident constr ()
232: | db BAR constr ()
233:
234: constr : opid ()
235: | opid OF ty ()
236:
237: eb : ident ()
238: | ident OF ty ()
239: | ident EQUAL qid ()
240: | eb AND eb ()
241:
242: ebx : ident constraint ()
243: | ident EQUAL qid ()
244: | ebx AND ebx ()
245:
246: qid_p : qid ()
247: | qid qid_p ()
248:
249:
250: fixity : INFIX ()
251: | INFIX INT ()
252: | INFIXR ()
253: | INFIXR INT ()
254: | NONFIX ()
255:
256: ldec : VAL vb ()
257: | VAL REC rvb ()
258: | FUN fb ()
259: | TYPE tb ()
260: | DATATYPE db ()
261: | ABSTYPE db WITH ldecs END ()
262: | EXCEPTION eb ()
263: | EXCEPTIONX ebx ()
264: | LOCAL ldecs IN ldecs END ()
265: | OPEN qid_p ()
266: | fixity ops ()
267: | OVERLOAD ident COLON ty AS exp_pa ()
268:
269: exp_pa : exp ()
270: | exp AND exp_pa ()
271:
272: ldecs : ldec ()
273: | ldecs ldec ()
274: | ldecs SEMICOLON ()
275:
276: ops : ident ()
277: | ident ops ()
278:
279: spec_s : ()
280: | spec spec_s ()
281: | spec SEMICOLON spec_s ()
282:
283: spec : STRUCTURE strspec ()
284: | DATATYPE db ()
285: | TYPE tyspec ()
286: | EQTYPE tyspec ()
287: | VAL valspec ()
288: | EXCEPTION exnspec ()
289: | EXCEPTIONX exnspecx ()
290: | fixity ops ()
291: | SHARING sharespec ()
292: | INCLUDE ident ()
293:
294: strspec : strspec AND strspec ()
295: | ident COLON sign ()
296:
297: tyspec : tyspec AND tyspec ()
298: | tyvars ident ()
299:
300: valspec : valspec AND valspec ()
301: | opid COLON ty ()
302:
303: exnspec : exnspec AND exnspec ()
304: | ident ()
305: | ident OF ty ()
306:
307: exnspecx: exnspecx AND exnspecx ()
308: | ident ()
309: | ident COLON ty ()
310:
311: sharespec: sharespec AND sharespec ()
312: | TYPE patheqn ()
313: | qid patheqn ()
314:
315: patheqn: qid EQUAL qid ()
316: | qid EQUAL patheqn ()
317:
318: sign : ID ()
319: | SIG spec_s END ()
320:
321: sigconstraint_op : ()
322: | COLON sign ()
323:
324: sigb : sigb AND sigb ()
325: | ident EQUAL sign ()
326:
327: str : qid ()
328: | STRUCT sdecs END ()
329: | ID LPAREN sdecs RPAREN ()
330: | ID LPAREN str RPAREN ()
331:
332: sdecs : sdecs sdec ()
333: | sdecs sdec SEMICOLON ()
334: | ()
335:
336: sdec : STRUCTURE strb ()
337: | ABSTRACTION strb ()
338: | SIGNATURE sigb ()
339: | FUNCTOR fctb ()
340: | ldec ()
341:
342: strb : ident sigconstraint_op EQUAL str ()
343: | strb AND strb ()
344:
345: fparam : ID COLON sign ()
346: | spec_s ()
347:
348: fctb : ident LPAREN fparam RPAREN sigconstraint_op EQUAL str ()
349: | fctb AND fctb ()
350:
351: tdec : SIGNATURE sigb ()
352: | FUNCTOR fctb ()
353: | STRUCTURE strb ()
354: | ABSTRACTION strb ()
355: | OPEN qid_p ()
356: | SEMICOLON tdec ()
357: | ()
358:
359: top : SIGNATURE sigb ()
360: | FUNCTOR fctb ()
361: | STRUCTURE strb ()
362: | ABSTRACTION strb ()
363: | OPEN qid_p ()
364: | ldec ()
365: | exp ()
366:
367: interdec: top ()
368: | interdec top ()
369: | SEMICOLON ()
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.