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 771 - (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 :    
33 : blume 265 %nonterm description of S.group
34 :     | group of S.group
35 : blume 348 | gprivspec of S.privilegespec
36 :     | lprivspec of S.privilegespec
37 : blume 632 | version of S.cm_version
38 :     | opt_version of S.cm_version option
39 : blume 348 | wrapspec of S.privilegespec -> S.privilegespec
40 : blume 364 | mand_exports of S.exports
41 : blume 282 | opt_exports of S.exports option
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 756 | pathname of { name: string, mkpath: unit -> SrcPath.prefile }
55 : blume 265 | sym of S.cm_symbol
56 : blume 275 | word of S.cm_symbol
57 : blume 666 | owner of SrcPath.file option
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 262
64 :     %pos int
65 :     %verbose
66 : blume 537 %arg (grouppath, context, obsolete, error, doMember, curlib, gp, ig) :
67 : blume 666 SrcPath.file *
68 : blume 270 S.context *
69 : blume 397 (pos * pos -> unit) *
70 : blume 270 (pos * pos -> string -> unit) *
71 : blume 756 ({ name: string, mkpath: unit -> SrcPath.prefile } *
72 : blume 588 pos * pos * S.cm_class option * S.toolopt list option -> S.members) *
73 : blume 666 SrcPath.file option *
74 : blume 537 GeneralParams.info *
75 :     S.group
76 : blume 262 %start description
77 :     %eop EOF
78 :     %noshift EOF
79 :    
80 :     %name CM
81 :    
82 : blume 380 %keyword GROUP LIBRARY IS IF ELIF ELSE ENDIF DEFINED
83 : blume 262 STRUCTURE SIGNATURE FUNCTOR FUNSIG
84 :    
85 : blume 265 %prefer LPAREN
86 : blume 262
87 :     %left ORELSE
88 :     %left ANDALSO
89 : blume 632 %nonassoc INEQSYM
90 :     %nonassoc EQSYM
91 :     %left ADDSYM
92 :     %left MULSYM
93 : blume 265 %left NOT TILDE
94 : blume 262
95 :     %%
96 :    
97 : blume 380 description : group (group)
98 : blume 262
99 : blume 367 group : gprivspec owner opt_exports IS members (S.group
100 : blume 632 { path = grouppath,
101 :     privileges = gprivspec,
102 :     exports = opt_exports,
103 :     members = members,
104 :     gp = gp,
105 :     curlib = curlib,
106 :     owner = owner,
107 :     initgroup = ig })
108 :     | lprivspec opt_version mand_exports IS members
109 :     (S.library
110 :     { path = grouppath,
111 :     privileges = lprivspec,
112 :     exports = mand_exports,
113 :     version = opt_version,
114 :     members = members,
115 :     gp = gp,
116 :     initgroup = ig })
117 : blume 771 | lprivspec IS members (S.proxy
118 :     { path = grouppath,
119 :     privileges = lprivspec,
120 :     members = members,
121 :     error =
122 :     error (membersleft,
123 :     membersright) } )
124 : blume 262
125 : blume 632 opt_version : (* empty *) (NONE)
126 :     | LPAREN version RPAREN (SOME version)
127 :    
128 :     version : FILE_STANDARD (S.cm_version
129 :     (FILE_STANDARD,
130 :     error (FILE_STANDARDleft,
131 :     FILE_STANDARDright)))
132 :    
133 : blume 367 owner : (* empty *) (NONE)
134 : blume 666 | LPAREN pathname RPAREN (SOME (SrcPath.file
135 : blume 756 (#mkpath pathname ())))
136 : blume 367
137 : blume 348 wrapspec : (* empty *) (fn p => p)
138 :     | wrapspec word (fn p =>
139 :     S.wrap (wrapspec p, word,
140 : blume 318 error (wordleft,
141 :     wordright)))
142 :    
143 : blume 348 gprivspec : GROUP (S.initialPrivilegeSpec)
144 :     | word gprivspec (S.require (gprivspec, word,
145 : blume 275 error (wordleft,
146 :     wordright)))
147 : blume 262
148 : blume 348 lprivspec : LIBRARY (S.initialPrivilegeSpec)
149 :     | word lprivspec (S.require (lprivspec, word,
150 :     error (wordleft,
151 :     wordright)))
152 :     | LPAREN wrapspec RPAREN lprivspec (wrapspec lprivspec)
153 :    
154 : blume 364 mand_exports : export (export)
155 :     | mand_exports export (S.exports (mand_exports,
156 :     export))
157 : blume 262
158 : blume 282 opt_exports : (* empty *) (NONE)
159 : blume 364 | mand_exports (SOME mand_exports)
160 : blume 282
161 : blume 364 exports : (* empty *) (S.emptyExports)
162 :     | exports export (S.exports (exports, export))
163 :    
164 : blume 356 export : ml_symbol (S.export
165 :     (ml_symbol,
166 :     error (ml_symbolleft,
167 :     ml_symbolright)))
168 : blume 265 | IF exp guarded_exports (S.guarded_exports
169 : blume 275 (exp, guarded_exports,
170 :     error (expleft, expright)))
171 :     | ERROR (S.error_export
172 :     (fn () =>
173 : blume 277 error (ERRORleft, ERRORright)
174 :     ERROR))
175 : blume 265
176 : blume 274 guarded_exports : exports else_exports ((exports, else_exports))
177 : blume 262
178 : blume 265 else_exports : ENDIF (S.emptyExports)
179 : blume 262 | ELSE exports ENDIF (exports)
180 : blume 265 | ELIF exp guarded_exports (S.guarded_exports
181 : blume 275 (exp, guarded_exports,
182 :     error (expleft, expright)))
183 : blume 262
184 : blume 265 members : (* empty *) (S.emptyMembers)
185 :     | member members (S.members (member, members))
186 : blume 262
187 : blume 587 toolopts : (* empty *) ([])
188 : blume 588 | pathname toolopts (S.string pathname :: toolopts)
189 :     | pathname COLON ptoolopts toolopts (S.subopts
190 :     { name = #name pathname,
191 :     opts = ptoolopts }
192 :     :: toolopts)
193 :     | pathname COLON pathname toolopts (S.subopts
194 :     { name = #name pathname1,
195 :     opts = [S.string
196 :     pathname2] }
197 :     :: toolopts)
198 : blume 587
199 : blume 588 ptoolopts : LPAREN toolopts RPAREN (toolopts)
200 :    
201 : blume 587 opttoolopts : (* empty *) (NONE)
202 : blume 588 | ptoolopts (SOME ptoolopts)
203 : blume 587
204 :     optclass : (* empty *) (NONE)
205 :     | COLON class (SOME class)
206 :    
207 :     member : pathname optclass opttoolopts (doMember (pathname,
208 : blume 273 pathnameleft,
209 :     pathnameright,
210 : blume 587 optclass,
211 :     opttoolopts))
212 : blume 265 | IF exp guarded_members (S.guarded_members
213 : blume 275 (exp, guarded_members,
214 :     error (expleft, expright)))
215 :     | ERROR (S.error_member
216 :     (fn () =>
217 : blume 277 error (ERRORleft, ERRORright)
218 :     ERROR))
219 : blume 262
220 : blume 380 class : word (S.class word)
221 :    
222 : blume 274 guarded_members : members else_members ((members, else_members))
223 : blume 262
224 : blume 265 else_members : ENDIF (S.emptyMembers)
225 : blume 262 | ELSE members ENDIF (members)
226 : blume 265 | ELIF exp guarded_members (S.guarded_members
227 : blume 275 (exp, guarded_members,
228 :     error (expleft, expright)))
229 : blume 262
230 : blume 275 word : FILE_STANDARD (S.cm_symbol FILE_STANDARD)
231 :    
232 : blume 265 sym : CM_ID (S.cm_symbol CM_ID)
233 :    
234 : blume 262 exp : boolexp (boolexp)
235 :    
236 : blume 265 aexp : NUMBER (S.number NUMBER)
237 : blume 336 | sym (S.variable gp sym)
238 : blume 265 | LPAREN aexp RPAREN (aexp)
239 : blume 632 | aexp ADDSYM aexp (S.add (aexp1, ADDSYM, aexp2))
240 :     | aexp MULSYM aexp (S.mul (aexp1, MULSYM, aexp2))
241 : blume 265 | TILDE aexp (S.negate aexp)
242 : blume 632 | ADDSYM aexp %prec TILDE (obsolete (ADDSYMleft,
243 :     ADDSYMright);
244 :     S.sign (ADDSYM, aexp))
245 : blume 262
246 : blume 265 boolexp : DEFINED LPAREN ml_symbol RPAREN (S.ml_defined ml_symbol)
247 : blume 336 | DEFINED LPAREN sym RPAREN (S.cm_defined gp sym)
248 : blume 262 | LPAREN boolexp RPAREN (boolexp)
249 : blume 265 | boolexp ANDALSO boolexp (S.conj (boolexp1, boolexp2))
250 :     | boolexp ORELSE boolexp (S.disj (boolexp1, boolexp2))
251 : blume 632 | boolexp EQSYM boolexp (S.beq (boolexp1, EQSYM,
252 :     boolexp2))
253 : blume 265 | NOT boolexp (S.not boolexp)
254 : blume 632 | aexp INEQSYM aexp (S.ineq (aexp1, INEQSYM,
255 :     aexp2))
256 :     | aexp EQSYM aexp (S.eq (aexp1, EQSYM, aexp2))
257 : blume 262
258 : blume 265 ml_symbol : STRUCTURE ML_ID (S.ml_structure ML_ID)
259 :     | SIGNATURE ML_ID (S.ml_signature ML_ID)
260 :     | FUNCTOR ML_ID (S.ml_functor ML_ID)
261 :     | FUNSIG ML_ID (S.ml_funsig ML_ID)
262 : blume 262
263 : blume 493 pathname : FILE_STANDARD ({ name = FILE_STANDARD,
264 : blume 756 mkpath = fn () =>
265 : blume 493 S.file_standard gp
266 : blume 756 (FILE_STANDARD,
267 :     context, error
268 : blume 632 (FILE_STANDARDleft,
269 :     FILE_STANDARDright)) })
270 : blume 493 | FILE_NATIVE ({ name = FILE_NATIVE,
271 : blume 756 mkpath = fn () =>
272 : blume 493 S.file_native
273 : blume 756 (FILE_NATIVE,
274 :     context, error
275 : blume 666 (FILE_NATIVEleft,
276 :     FILE_NATIVEright)) })

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