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 588 - (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 265 | PLUS | MINUS | TIMES | DIV | MOD | TILDE
27 : blume 262 | ANDALSO | ORELSE | NOT
28 :     | LT | LE | GT | GE | EQ | NE
29 :    
30 : blume 265 %nonterm description of S.group
31 :     | group of S.group
32 : blume 348 | gprivspec of S.privilegespec
33 :     | lprivspec of S.privilegespec
34 :     | wrapspec of S.privilegespec -> S.privilegespec
35 : blume 364 | mand_exports of S.exports
36 : blume 282 | opt_exports of S.exports option
37 : blume 265 | exports of S.exports
38 :     | export of S.exports
39 :     | guarded_exports of S.exports * S.exports
40 :     | else_exports of S.exports
41 :     | members of S.members
42 :     | member of S.members
43 :     | guarded_members of S.members * S.members
44 :     | else_members of S.members
45 :     | aexp of S.aexp
46 :     | boolexp of S.exp
47 :     | exp of S.exp
48 :     | ml_symbol of S.ml_symbol
49 : blume 493 | pathname of { name: string, mkpath: string -> S.pathname }
50 : blume 265 | sym of S.cm_symbol
51 : blume 275 | word of S.cm_symbol
52 : blume 367 | owner of S.pathname option
53 : blume 380 | class of S.cm_class
54 : blume 587 | optclass of S.cm_class option
55 : blume 588 | toolopts of S.toolopt list
56 :     | ptoolopts of S.toolopt list
57 :     | opttoolopts of S.toolopt list option
58 : blume 262
59 :     %pos int
60 :     %verbose
61 : blume 537 %arg (grouppath, context, obsolete, error, doMember, curlib, gp, ig) :
62 : blume 283 S.pathname *
63 : blume 270 S.context *
64 : blume 397 (pos * pos -> unit) *
65 : blume 270 (pos * pos -> string -> unit) *
66 : blume 493 ({ name: string, mkpath: string -> S.pathname } *
67 : blume 588 pos * pos * S.cm_class option * S.toolopt list option -> S.members) *
68 : blume 367 S.pathname option *
69 : blume 537 GeneralParams.info *
70 :     S.group
71 : blume 262 %start description
72 :     %eop EOF
73 :     %noshift EOF
74 :    
75 :     %name CM
76 :    
77 : blume 380 %keyword GROUP LIBRARY IS IF ELIF ELSE ENDIF DEFINED
78 : blume 262 STRUCTURE SIGNATURE FUNCTOR FUNSIG
79 :    
80 : blume 265 %prefer LPAREN
81 : blume 262
82 :     %left ORELSE
83 :     %left ANDALSO
84 :     %nonassoc LT LE GT GE
85 :     %nonassoc EQ NE
86 :     %left PLUS MINUS
87 :     %left TIMES DIV MOD
88 : blume 265 %left NOT TILDE
89 : blume 262
90 :     %%
91 :    
92 : blume 380 description : group (group)
93 : blume 262
94 : blume 367 group : gprivspec owner opt_exports IS members (S.group
95 : blume 283 (grouppath,
96 : blume 348 gprivspec, opt_exports,
97 : blume 367 members, gp, curlib, owner,
98 :     error (ownerleft,
99 : blume 537 ownerright),
100 :     ig))
101 : blume 367 | lprivspec mand_exports IS members (S.library
102 : blume 283 (grouppath,
103 : blume 364 lprivspec, mand_exports,
104 : blume 537 members, gp, ig))
105 : blume 262
106 : blume 367 owner : (* empty *) (NONE)
107 : blume 493 | LPAREN pathname RPAREN (SOME (#mkpath pathname
108 :     (#name pathname)))
109 : blume 367
110 : blume 348 wrapspec : (* empty *) (fn p => p)
111 :     | wrapspec word (fn p =>
112 :     S.wrap (wrapspec p, word,
113 : blume 318 error (wordleft,
114 :     wordright)))
115 :    
116 : blume 348 gprivspec : GROUP (S.initialPrivilegeSpec)
117 :     | word gprivspec (S.require (gprivspec, word,
118 : blume 275 error (wordleft,
119 :     wordright)))
120 : blume 262
121 : blume 348 lprivspec : LIBRARY (S.initialPrivilegeSpec)
122 :     | word lprivspec (S.require (lprivspec, word,
123 :     error (wordleft,
124 :     wordright)))
125 :     | LPAREN wrapspec RPAREN lprivspec (wrapspec lprivspec)
126 :    
127 : blume 364 mand_exports : export (export)
128 :     | mand_exports export (S.exports (mand_exports,
129 :     export))
130 : blume 262
131 : blume 282 opt_exports : (* empty *) (NONE)
132 : blume 364 | mand_exports (SOME mand_exports)
133 : blume 282
134 : blume 364 exports : (* empty *) (S.emptyExports)
135 :     | exports export (S.exports (exports, export))
136 :    
137 : blume 356 export : ml_symbol (S.export
138 :     (ml_symbol,
139 :     error (ml_symbolleft,
140 :     ml_symbolright)))
141 : blume 265 | IF exp guarded_exports (S.guarded_exports
142 : blume 275 (exp, guarded_exports,
143 :     error (expleft, expright)))
144 :     | ERROR (S.error_export
145 :     (fn () =>
146 : blume 277 error (ERRORleft, ERRORright)
147 :     ERROR))
148 : blume 265
149 : blume 274 guarded_exports : exports else_exports ((exports, else_exports))
150 : blume 262
151 : blume 265 else_exports : ENDIF (S.emptyExports)
152 : blume 262 | ELSE exports ENDIF (exports)
153 : blume 265 | ELIF exp guarded_exports (S.guarded_exports
154 : blume 275 (exp, guarded_exports,
155 :     error (expleft, expright)))
156 : blume 262
157 : blume 265 members : (* empty *) (S.emptyMembers)
158 :     | member members (S.members (member, members))
159 : blume 262
160 : blume 587 toolopts : (* empty *) ([])
161 : blume 588 | pathname toolopts (S.string pathname :: toolopts)
162 :     | pathname COLON ptoolopts toolopts (S.subopts
163 :     { name = #name pathname,
164 :     opts = ptoolopts }
165 :     :: toolopts)
166 :     | pathname COLON pathname toolopts (S.subopts
167 :     { name = #name pathname1,
168 :     opts = [S.string
169 :     pathname2] }
170 :     :: toolopts)
171 : blume 587
172 : blume 588 ptoolopts : LPAREN toolopts RPAREN (toolopts)
173 :    
174 : blume 587 opttoolopts : (* empty *) (NONE)
175 : blume 588 | ptoolopts (SOME ptoolopts)
176 : blume 587
177 :     optclass : (* empty *) (NONE)
178 :     | COLON class (SOME class)
179 :    
180 :     member : pathname optclass opttoolopts (doMember (pathname,
181 : blume 273 pathnameleft,
182 :     pathnameright,
183 : blume 587 optclass,
184 :     opttoolopts))
185 : blume 265 | IF exp guarded_members (S.guarded_members
186 : blume 275 (exp, guarded_members,
187 :     error (expleft, expright)))
188 :     | ERROR (S.error_member
189 :     (fn () =>
190 : blume 277 error (ERRORleft, ERRORright)
191 :     ERROR))
192 : blume 262
193 : blume 380 class : word (S.class word)
194 :    
195 : blume 274 guarded_members : members else_members ((members, else_members))
196 : blume 262
197 : blume 265 else_members : ENDIF (S.emptyMembers)
198 : blume 262 | ELSE members ENDIF (members)
199 : blume 265 | ELIF exp guarded_members (S.guarded_members
200 : blume 275 (exp, guarded_members,
201 :     error (expleft, expright)))
202 : blume 262
203 : blume 275 word : FILE_STANDARD (S.cm_symbol FILE_STANDARD)
204 :    
205 : blume 265 sym : CM_ID (S.cm_symbol CM_ID)
206 :    
207 : blume 262 exp : boolexp (boolexp)
208 :    
209 : blume 265 aexp : NUMBER (S.number NUMBER)
210 : blume 336 | sym (S.variable gp sym)
211 : blume 265 | LPAREN aexp RPAREN (aexp)
212 :     | aexp PLUS aexp (S.plus (aexp1, aexp2))
213 :     | aexp MINUS aexp (S.minus (aexp1, aexp2))
214 :     | aexp TIMES aexp (S.times (aexp1, aexp2))
215 :     | aexp DIV aexp (S.divide (aexp1, aexp2))
216 :     | aexp MOD aexp (S.modulus (aexp1, aexp2))
217 :     | TILDE aexp (S.negate aexp)
218 : blume 397 | MINUS aexp %prec TILDE (obsolete (MINUSleft,
219 :     MINUSright);
220 :     S.negate aexp)
221 : blume 262
222 : blume 265 boolexp : DEFINED LPAREN ml_symbol RPAREN (S.ml_defined ml_symbol)
223 : blume 336 | DEFINED LPAREN sym RPAREN (S.cm_defined gp sym)
224 : blume 262 | LPAREN boolexp RPAREN (boolexp)
225 : blume 265 | boolexp ANDALSO boolexp (S.conj (boolexp1, boolexp2))
226 :     | boolexp ORELSE boolexp (S.disj (boolexp1, boolexp2))
227 :     | boolexp EQ boolexp (S.beq (boolexp1, boolexp2))
228 :     | boolexp NE boolexp (S.bne (boolexp1, boolexp2))
229 :     | NOT boolexp (S.not boolexp)
230 :     | aexp LT aexp (S.lt (aexp1, aexp2))
231 :     | aexp LE aexp (S.le (aexp1, aexp2))
232 :     | aexp GT aexp (S.gt (aexp1, aexp2))
233 :     | aexp GE aexp (S.ge (aexp1, aexp2))
234 :     | aexp EQ aexp (S.eq (aexp1, aexp2))
235 :     | aexp NE aexp (S.ne (aexp1, aexp2))
236 : blume 262
237 : blume 265 ml_symbol : STRUCTURE ML_ID (S.ml_structure ML_ID)
238 :     | SIGNATURE ML_ID (S.ml_signature ML_ID)
239 :     | FUNCTOR ML_ID (S.ml_functor ML_ID)
240 :     | FUNSIG ML_ID (S.ml_funsig ML_ID)
241 : blume 262
242 : blume 493 pathname : FILE_STANDARD ({ name = FILE_STANDARD,
243 :     mkpath = fn n =>
244 :     S.file_standard gp
245 :     (n, context) })
246 :     | FILE_NATIVE ({ name = FILE_NATIVE,
247 :     mkpath = fn n =>
248 :     S.file_native
249 :     (n, context) })

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