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 1011 - (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 : blume 986 owner = SOME srcfile,
117 : blume 632 initgroup = ig })
118 : blume 986 | gprivspec opt_exports IS members (S.group
119 :     { path = grouppath,
120 :     privileges = gprivspec,
121 :     exports = opt_exports,
122 :     members = members,
123 :     gp = gp,
124 :     curlib = curlib,
125 :     owner = NONE,
126 :     initgroup = ig })
127 :     | lprivspec LPAREN version RPAREN mand_exports IS members
128 : blume 632 (S.library
129 :     { path = grouppath,
130 :     privileges = lprivspec,
131 :     exports = mand_exports,
132 : blume 986 version = SOME version,
133 : blume 632 members = members,
134 :     gp = gp,
135 :     initgroup = ig })
136 : blume 986 | lprivspec mand_exports IS members
137 :     (S.library
138 : blume 771 { path = grouppath,
139 :     privileges = lprivspec,
140 : blume 986 exports = mand_exports,
141 :     version = NONE,
142 : blume 771 members = members,
143 : blume 986 gp = gp,
144 :     initgroup = ig })
145 : blume 262
146 : blume 632 version : FILE_STANDARD (S.cm_version
147 :     (FILE_STANDARD,
148 :     error (FILE_STANDARDleft,
149 :     FILE_STANDARDright)))
150 :    
151 : blume 348 wrapspec : (* empty *) (fn p => p)
152 :     | wrapspec word (fn p =>
153 :     S.wrap (wrapspec p, word,
154 : blume 318 error (wordleft,
155 :     wordright)))
156 :    
157 : blume 348 gprivspec : GROUP (S.initialPrivilegeSpec)
158 :     | word gprivspec (S.require (gprivspec, word,
159 : blume 275 error (wordleft,
160 :     wordright)))
161 : blume 262
162 : blume 348 lprivspec : LIBRARY (S.initialPrivilegeSpec)
163 :     | word lprivspec (S.require (lprivspec, word,
164 :     error (wordleft,
165 :     wordright)))
166 :     | LPAREN wrapspec RPAREN lprivspec (wrapspec lprivspec)
167 :    
168 : blume 364 mand_exports : export (export)
169 : blume 986 | mand_exports export (S.union (mand_exports,export))
170 : blume 262
171 : blume 986 opt_exports : (* empty *) (S.default_group_exports)
172 :     | mand_exports (mand_exports)
173 : blume 282
174 : blume 364 exports : (* empty *) (S.emptyExports)
175 : blume 986 | exports export (S.union (exports, export))
176 : blume 364
177 : blume 986 export : ml_symbolset (ml_symbolset)
178 : blume 265 | IF exp guarded_exports (S.guarded_exports
179 : blume 275 (exp, guarded_exports,
180 :     error (expleft, expright)))
181 :     | ERROR (S.error_export
182 :     (fn () =>
183 : blume 277 error (ERRORleft, ERRORright)
184 :     ERROR))
185 : blume 265
186 : blume 986 filecat : GROUP (S.exportgroup)
187 :     | SOURCE (S.exportsource)
188 :    
189 :    
190 :     ml_symbolset : ml_symbol (S.export
191 :     (ml_symbol,
192 :     error (ml_symbolleft,
193 :     ml_symbolright)))
194 :     | LPAREN exports RPAREN (exports)
195 :     | ml_symbolset STAR ml_symbolset (S.intersection
196 :     (ml_symbolset1,
197 :     ml_symbolset2))
198 :     | ml_symbolset DASH ml_symbolset (S.difference
199 :     (ml_symbolset1,
200 :     ml_symbolset2))
201 :     | filecat LPAREN srcfiles RPAREN (filecat
202 :     (srcfiles,
203 :     error (srcfilesleft,
204 :     srcfilesright)))
205 :     | LIBRARY LPAREN pathname opttoolopts RPAREN
206 :     (S.exportlibrary
207 :     (SrcPath.file
208 :     (#mkpath pathname ()),
209 :     error (pathnameleft,
210 :     pathnameright),
211 :     { hasoptions =
212 :     isSome opttoolopts,
213 :     elab = fn () =>
214 :     doMember
215 :     (pathname,
216 :     pathnameleft,
217 :     pathnameright,
218 :     NONE,
219 :     opttoolopts),
220 :     curlib = curlib }))
221 :    
222 : blume 274 guarded_exports : exports else_exports ((exports, else_exports))
223 : blume 262
224 : blume 265 else_exports : ENDIF (S.emptyExports)
225 : blume 262 | ELSE exports ENDIF (exports)
226 : blume 265 | ELIF exp guarded_exports (S.guarded_exports
227 : blume 275 (exp, guarded_exports,
228 :     error (expleft, expright)))
229 : blume 262
230 : blume 265 members : (* empty *) (S.emptyMembers)
231 :     | member members (S.members (member, members))
232 : blume 262
233 : blume 587 toolopts : (* empty *) ([])
234 : blume 588 | pathname toolopts (S.string pathname :: toolopts)
235 :     | pathname COLON ptoolopts toolopts (S.subopts
236 :     { name = #name pathname,
237 :     opts = ptoolopts }
238 :     :: toolopts)
239 :     | pathname COLON pathname toolopts (S.subopts
240 :     { name = #name pathname1,
241 :     opts = [S.string
242 :     pathname2] }
243 :     :: toolopts)
244 : blume 587
245 : blume 588 ptoolopts : LPAREN toolopts RPAREN (toolopts)
246 :    
247 : blume 587 opttoolopts : (* empty *) (NONE)
248 : blume 588 | ptoolopts (SOME ptoolopts)
249 : blume 587
250 :     optclass : (* empty *) (NONE)
251 :     | COLON class (SOME class)
252 :    
253 :     member : pathname optclass opttoolopts (doMember (pathname,
254 : blume 273 pathnameleft,
255 :     pathnameright,
256 : blume 587 optclass,
257 :     opttoolopts))
258 : blume 265 | IF exp guarded_members (S.guarded_members
259 : blume 275 (exp, guarded_members,
260 :     error (expleft, expright)))
261 :     | ERROR (S.error_member
262 :     (fn () =>
263 : blume 277 error (ERRORleft, ERRORright)
264 :     ERROR))
265 : blume 262
266 : blume 380 class : word (S.class word)
267 :    
268 : blume 274 guarded_members : members else_members ((members, else_members))
269 : blume 262
270 : blume 265 else_members : ENDIF (S.emptyMembers)
271 : blume 262 | ELSE members ENDIF (members)
272 : blume 265 | ELIF exp guarded_members (S.guarded_members
273 : blume 275 (exp, guarded_members,
274 :     error (expleft, expright)))
275 : blume 262
276 : blume 275 word : FILE_STANDARD (S.cm_symbol FILE_STANDARD)
277 :    
278 : blume 265 sym : CM_ID (S.cm_symbol CM_ID)
279 :    
280 : blume 262 exp : boolexp (boolexp)
281 :    
282 : blume 265 aexp : NUMBER (S.number NUMBER)
283 : blume 336 | sym (S.variable gp sym)
284 : blume 265 | LPAREN aexp RPAREN (aexp)
285 : blume 632 | aexp ADDSYM aexp (S.add (aexp1, ADDSYM, aexp2))
286 :     | aexp MULSYM aexp (S.mul (aexp1, MULSYM, aexp2))
287 : blume 265 | TILDE aexp (S.negate aexp)
288 : blume 632 | ADDSYM aexp %prec TILDE (obsolete (ADDSYMleft,
289 :     ADDSYMright);
290 :     S.sign (ADDSYM, aexp))
291 : blume 262
292 : blume 265 boolexp : DEFINED LPAREN ml_symbol RPAREN (S.ml_defined ml_symbol)
293 : blume 336 | DEFINED LPAREN sym RPAREN (S.cm_defined gp sym)
294 : blume 262 | LPAREN boolexp RPAREN (boolexp)
295 : blume 265 | boolexp ANDALSO boolexp (S.conj (boolexp1, boolexp2))
296 :     | boolexp ORELSE boolexp (S.disj (boolexp1, boolexp2))
297 : blume 632 | boolexp EQSYM boolexp (S.beq (boolexp1, EQSYM,
298 :     boolexp2))
299 : blume 265 | NOT boolexp (S.not boolexp)
300 : blume 632 | aexp INEQSYM aexp (S.ineq (aexp1, INEQSYM,
301 :     aexp2))
302 :     | aexp EQSYM aexp (S.eq (aexp1, EQSYM, aexp2))
303 : blume 262
304 : blume 265 ml_symbol : STRUCTURE ML_ID (S.ml_structure ML_ID)
305 :     | SIGNATURE ML_ID (S.ml_signature ML_ID)
306 :     | FUNCTOR ML_ID (S.ml_functor ML_ID)
307 :     | FUNSIG ML_ID (S.ml_funsig ML_ID)
308 : blume 262
309 : blume 493 pathname : FILE_STANDARD ({ name = FILE_STANDARD,
310 : blume 756 mkpath = fn () =>
311 : blume 493 S.file_standard gp
312 : blume 756 (FILE_STANDARD,
313 :     context, error
314 : blume 632 (FILE_STANDARDleft,
315 :     FILE_STANDARDright)) })
316 : blume 493 | FILE_NATIVE ({ name = FILE_NATIVE,
317 : blume 756 mkpath = fn () =>
318 : blume 493 S.file_native
319 : blume 756 (FILE_NATIVE,
320 :     context, error
321 : blume 666 (FILE_NATIVEleft,
322 :     FILE_NATIVEright)) })
323 : blume 986
324 :     srcfile : pathname (SrcPath.file
325 :     (#mkpath pathname ()))
326 :     srcfiles : srcfile (SOME srcfile)
327 :     | DASH (NONE)

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