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 986 - (view) (download)

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

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