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/cm/parse/cm.grm
ViewVC logotype

Annotation of /sml/trunk/src/cm/parse/cm.grm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1498 - (view) (download)

1 : blume 1011 (* -*- sml-yacc -*-
2 : blume 267 *
3 : blume 1011 * cm.grm
4 :     *
5 : blume 267 * ML-Yacc grammar for CM description files
6 :     *
7 : blume 1011 * (C) 1999,2001 Lucent Technologies, Bell Laboratories
8 : blume 267 *
9 : blume 1011 * Author: Matthias Blume (blume@research.bell-labs.com)
10 : blume 267 *)
11 : blume 262
12 : blume 265 structure S = CMSemant
13 : blume 262
14 : blume 265 %%
15 : blume 262
16 :     %term EOF
17 : blume 265 | FILE_STANDARD of string
18 :     | FILE_NATIVE of string
19 :     | CM_ID of string
20 :     | ML_ID of string
21 : blume 262 | NUMBER of int
22 : blume 380 | GROUP | LIBRARY | IS
23 : blume 265 | LPAREN | RPAREN | COLON
24 : blume 274 | IF | ELIF | ELSE | ENDIF
25 : blume 266 | ERROR of string
26 : blume 262 | STRUCTURE | SIGNATURE | FUNCTOR | FUNSIG
27 :     | DEFINED
28 : blume 632 | ADDSYM of CMSemant.addsym
29 :     | MULSYM of CMSemant.mulsym
30 :     | EQSYM of CMSemant.eqsym
31 :     | INEQSYM of CMSemant.ineqsym
32 :     | TILDE
33 : blume 262 | ANDALSO | ORELSE | NOT
34 : blume 986 | STAR | DASH | SOURCE
35 : blume 262
36 : blume 265 %nonterm description of S.group
37 :     | group of S.group
38 : blume 348 | gprivspec of S.privilegespec
39 :     | lprivspec of S.privilegespec
40 : blume 632 | version of S.cm_version
41 : blume 348 | wrapspec of S.privilegespec -> S.privilegespec
42 : blume 364 | mand_exports of S.exports
43 : blume 986 | opt_exports of S.exports
44 : blume 265 | exports of S.exports
45 :     | export of S.exports
46 :     | guarded_exports of S.exports * S.exports
47 :     | else_exports of S.exports
48 :     | members of S.members
49 :     | member of S.members
50 :     | guarded_members of S.members * S.members
51 :     | else_members of S.members
52 :     | aexp of S.aexp
53 :     | boolexp of S.exp
54 :     | exp of S.exp
55 :     | ml_symbol of S.ml_symbol
56 : blume 986 | ml_symbolset of S.exports
57 : blume 756 | pathname of { name: string, mkpath: unit -> SrcPath.prefile }
58 : blume 265 | sym of S.cm_symbol
59 : blume 275 | word of S.cm_symbol
60 : blume 380 | class of S.cm_class
61 : blume 587 | optclass of S.cm_class option
62 : blume 588 | toolopts of S.toolopt list
63 :     | ptoolopts of S.toolopt list
64 :     | opttoolopts of S.toolopt list option
65 : blume 986 | srcfile of SrcPath.file
66 :     | srcfiles of SrcPath.file option
67 :     | filecat of SrcPath.file option * S.complainer -> S.exports
68 : blume 262
69 :     %pos int
70 :     %verbose
71 : blume 986 %arg ({ grouppath, context, obsolete, error, doMember, curlib, gp, ig }) :
72 :     { grouppath: SrcPath.file,
73 :     context: S.context,
74 :     obsolete: pos * pos -> unit,
75 :     error: pos * pos -> string -> unit,
76 :     doMember : { name: string, mkpath: unit -> SrcPath.prefile } *
77 :     pos * pos * S.cm_class option * S.toolopt list option
78 :     -> S.members,
79 :     curlib: SrcPath.file option,
80 :     gp: GeneralParams.info,
81 :     ig: S.group }
82 : blume 262 %start description
83 :     %eop EOF
84 :     %noshift EOF
85 :    
86 :     %name CM
87 :    
88 : blume 380 %keyword GROUP LIBRARY IS IF ELIF ELSE ENDIF DEFINED
89 : blume 262 STRUCTURE SIGNATURE FUNCTOR FUNSIG
90 :    
91 : blume 265 %prefer LPAREN
92 : blume 262
93 :     %left ORELSE
94 :     %left ANDALSO
95 : blume 632 %nonassoc INEQSYM
96 :     %nonassoc EQSYM
97 :     %left ADDSYM
98 :     %left MULSYM
99 : blume 265 %left NOT TILDE
100 : blume 262
101 : blume 986 %left DASH
102 :     %left STAR
103 :    
104 : blume 262 %%
105 :    
106 : blume 380 description : group (group)
107 : blume 262
108 : blume 986 group : gprivspec LPAREN srcfile RPAREN opt_exports IS members
109 :     (S.group
110 : blume 632 { path = grouppath,
111 :     privileges = gprivspec,
112 :     exports = opt_exports,
113 :     members = members,
114 :     gp = gp,
115 :     curlib = curlib,
116 :     initgroup = ig })
117 : mblume 1498 | gprivspec opt_exports IS members
118 :     (S.group
119 : blume 986 { path = grouppath,
120 :     privileges = gprivspec,
121 :     exports = opt_exports,
122 :     members = members,
123 :     gp = gp,
124 :     curlib = curlib,
125 :     initgroup = ig })
126 :     | lprivspec LPAREN version RPAREN mand_exports IS members
127 : blume 632 (S.library
128 :     { path = grouppath,
129 :     privileges = lprivspec,
130 :     exports = mand_exports,
131 : blume 986 version = SOME version,
132 : blume 632 members = members,
133 :     gp = gp,
134 :     initgroup = ig })
135 : blume 986 | lprivspec mand_exports IS members
136 :     (S.library
137 : blume 771 { path = grouppath,
138 :     privileges = lprivspec,
139 : blume 986 exports = mand_exports,
140 :     version = NONE,
141 : blume 771 members = members,
142 : blume 986 gp = gp,
143 :     initgroup = ig })
144 : blume 262
145 : blume 632 version : FILE_STANDARD (S.cm_version
146 :     (FILE_STANDARD,
147 :     error (FILE_STANDARDleft,
148 :     FILE_STANDARDright)))
149 :    
150 : blume 348 wrapspec : (* empty *) (fn p => p)
151 :     | wrapspec word (fn p =>
152 :     S.wrap (wrapspec p, word,
153 : blume 318 error (wordleft,
154 :     wordright)))
155 :    
156 : blume 348 gprivspec : GROUP (S.initialPrivilegeSpec)
157 :     | word gprivspec (S.require (gprivspec, word,
158 : blume 275 error (wordleft,
159 :     wordright)))
160 : blume 262
161 : blume 348 lprivspec : LIBRARY (S.initialPrivilegeSpec)
162 :     | word lprivspec (S.require (lprivspec, word,
163 :     error (wordleft,
164 :     wordright)))
165 :     | LPAREN wrapspec RPAREN lprivspec (wrapspec lprivspec)
166 :    
167 : blume 364 mand_exports : export (export)
168 : blume 986 | mand_exports export (S.union (mand_exports,export))
169 : blume 262
170 : blume 986 opt_exports : (* empty *) (S.default_group_exports)
171 :     | mand_exports (mand_exports)
172 : blume 282
173 : blume 364 exports : (* empty *) (S.emptyExports)
174 : blume 986 | exports export (S.union (exports, export))
175 : blume 364
176 : blume 986 export : ml_symbolset (ml_symbolset)
177 : blume 265 | IF exp guarded_exports (S.guarded_exports
178 : blume 275 (exp, guarded_exports,
179 :     error (expleft, expright)))
180 :     | ERROR (S.error_export
181 :     (fn () =>
182 : blume 277 error (ERRORleft, ERRORright)
183 :     ERROR))
184 : blume 265
185 : blume 986 filecat : GROUP (S.exportgroup)
186 :     | SOURCE (S.exportsource)
187 :    
188 :    
189 :     ml_symbolset : ml_symbol (S.export
190 :     (ml_symbol,
191 :     error (ml_symbolleft,
192 :     ml_symbolright)))
193 :     | LPAREN exports RPAREN (exports)
194 :     | ml_symbolset STAR ml_symbolset (S.intersection
195 :     (ml_symbolset1,
196 :     ml_symbolset2))
197 :     | ml_symbolset DASH ml_symbolset (S.difference
198 :     (ml_symbolset1,
199 :     ml_symbolset2))
200 :     | filecat LPAREN srcfiles RPAREN (filecat
201 :     (srcfiles,
202 :     error (srcfilesleft,
203 :     srcfilesright)))
204 :     | LIBRARY LPAREN pathname opttoolopts RPAREN
205 :     (S.exportlibrary
206 :     (SrcPath.file
207 :     (#mkpath pathname ()),
208 :     error (pathnameleft,
209 :     pathnameright),
210 :     { hasoptions =
211 :     isSome opttoolopts,
212 :     elab = fn () =>
213 :     doMember
214 :     (pathname,
215 :     pathnameleft,
216 :     pathnameright,
217 :     NONE,
218 :     opttoolopts),
219 :     curlib = curlib }))
220 :    
221 : blume 274 guarded_exports : exports else_exports ((exports, else_exports))
222 : blume 262
223 : blume 265 else_exports : ENDIF (S.emptyExports)
224 : blume 262 | ELSE exports ENDIF (exports)
225 : blume 265 | ELIF exp guarded_exports (S.guarded_exports
226 : blume 275 (exp, guarded_exports,
227 :     error (expleft, expright)))
228 : blume 262
229 : blume 265 members : (* empty *) (S.emptyMembers)
230 :     | member members (S.members (member, members))
231 : blume 262
232 : blume 587 toolopts : (* empty *) ([])
233 : blume 588 | pathname toolopts (S.string pathname :: toolopts)
234 :     | pathname COLON ptoolopts toolopts (S.subopts
235 :     { name = #name pathname,
236 :     opts = ptoolopts }
237 :     :: toolopts)
238 :     | pathname COLON pathname toolopts (S.subopts
239 :     { name = #name pathname1,
240 :     opts = [S.string
241 :     pathname2] }
242 :     :: toolopts)
243 : blume 587
244 : blume 588 ptoolopts : LPAREN toolopts RPAREN (toolopts)
245 :    
246 : blume 587 opttoolopts : (* empty *) (NONE)
247 : blume 588 | ptoolopts (SOME ptoolopts)
248 : blume 587
249 :     optclass : (* empty *) (NONE)
250 :     | COLON class (SOME class)
251 :    
252 :     member : pathname optclass opttoolopts (doMember (pathname,
253 : blume 273 pathnameleft,
254 :     pathnameright,
255 : blume 587 optclass,
256 :     opttoolopts))
257 : blume 265 | IF exp guarded_members (S.guarded_members
258 : blume 275 (exp, guarded_members,
259 :     error (expleft, expright)))
260 :     | ERROR (S.error_member
261 :     (fn () =>
262 : blume 277 error (ERRORleft, ERRORright)
263 :     ERROR))
264 : blume 262
265 : blume 380 class : word (S.class word)
266 :    
267 : blume 274 guarded_members : members else_members ((members, else_members))
268 : blume 262
269 : blume 265 else_members : ENDIF (S.emptyMembers)
270 : blume 262 | ELSE members ENDIF (members)
271 : blume 265 | ELIF exp guarded_members (S.guarded_members
272 : blume 275 (exp, guarded_members,
273 :     error (expleft, expright)))
274 : blume 262
275 : blume 275 word : FILE_STANDARD (S.cm_symbol FILE_STANDARD)
276 :    
277 : blume 265 sym : CM_ID (S.cm_symbol CM_ID)
278 :    
279 : blume 262 exp : boolexp (boolexp)
280 :    
281 : blume 265 aexp : NUMBER (S.number NUMBER)
282 : blume 336 | sym (S.variable gp sym)
283 : blume 265 | LPAREN aexp RPAREN (aexp)
284 : blume 632 | aexp ADDSYM aexp (S.add (aexp1, ADDSYM, aexp2))
285 :     | aexp MULSYM aexp (S.mul (aexp1, MULSYM, aexp2))
286 : blume 265 | TILDE aexp (S.negate aexp)
287 : blume 632 | ADDSYM aexp %prec TILDE (obsolete (ADDSYMleft,
288 :     ADDSYMright);
289 :     S.sign (ADDSYM, aexp))
290 : blume 262
291 : blume 265 boolexp : DEFINED LPAREN ml_symbol RPAREN (S.ml_defined ml_symbol)
292 : blume 336 | DEFINED LPAREN sym RPAREN (S.cm_defined gp sym)
293 : blume 262 | LPAREN boolexp RPAREN (boolexp)
294 : blume 265 | boolexp ANDALSO boolexp (S.conj (boolexp1, boolexp2))
295 :     | boolexp ORELSE boolexp (S.disj (boolexp1, boolexp2))
296 : blume 632 | boolexp EQSYM boolexp (S.beq (boolexp1, EQSYM,
297 :     boolexp2))
298 : blume 265 | NOT boolexp (S.not boolexp)
299 : blume 632 | aexp INEQSYM aexp (S.ineq (aexp1, INEQSYM,
300 :     aexp2))
301 :     | aexp EQSYM aexp (S.eq (aexp1, EQSYM, aexp2))
302 : blume 262
303 : blume 265 ml_symbol : STRUCTURE ML_ID (S.ml_structure ML_ID)
304 :     | SIGNATURE ML_ID (S.ml_signature ML_ID)
305 :     | FUNCTOR ML_ID (S.ml_functor ML_ID)
306 :     | FUNSIG ML_ID (S.ml_funsig ML_ID)
307 : blume 262
308 : blume 493 pathname : FILE_STANDARD ({ name = FILE_STANDARD,
309 : blume 756 mkpath = fn () =>
310 : blume 493 S.file_standard gp
311 : blume 756 (FILE_STANDARD,
312 :     context, error
313 : blume 632 (FILE_STANDARDleft,
314 :     FILE_STANDARDright)) })
315 : blume 493 | FILE_NATIVE ({ name = FILE_NATIVE,
316 : blume 756 mkpath = fn () =>
317 : blume 493 S.file_native
318 : blume 756 (FILE_NATIVE,
319 :     context, error
320 : blume 666 (FILE_NATIVEleft,
321 :     FILE_NATIVEright)) })
322 : blume 986
323 :     srcfile : pathname (SrcPath.file
324 :     (#mkpath pathname ()))
325 :     srcfiles : srcfile (SOME srcfile)
326 :     | DASH (NONE)

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