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 277 - (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 :     | ALIAS | 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 :     | alias of S.group
32 :     | group of S.group
33 : blume 275 | permspec of S.permspec
34 : blume 265 | lib_exports of S.exports
35 :     | exports of S.exports
36 :     | export of S.exports
37 :     | guarded_exports of S.exports * S.exports
38 :     | else_exports of S.exports
39 :     | members of S.members
40 :     | member of S.members
41 :     | guarded_members of S.members * S.members
42 :     | else_members of S.members
43 :     | aexp of S.aexp
44 :     | boolexp of S.exp
45 :     | exp of S.exp
46 :     | ml_symbol of S.ml_symbol
47 :     | pathname of S.pathname
48 :     | cmpath of S.pathname
49 :     | nativepath of S.pathname
50 :     | sym of S.cm_symbol
51 : blume 275 | word of S.cm_symbol
52 : blume 262
53 :     %pos int
54 :     %verbose
55 : blume 277 %arg (context, error', error, recParse, doMember) :
56 : blume 270 S.context *
57 : blume 277 (pos * pos -> string -> (PrettyPrint.ppstream -> unit) -> unit) *
58 : blume 270 (pos * pos -> string -> unit) *
59 : blume 273 (pos * pos -> S.pathname -> S.group) *
60 : blume 277 (S.pathname * pos * pos * S.cm_symbol option *
61 :     (string -> (PrettyPrint.ppstream -> unit) -> unit)
62 : blume 275 -> S.members)
63 : blume 262 %start description
64 :     %eop EOF
65 :     %noshift EOF
66 :    
67 :     %name CM
68 :    
69 : blume 274 %keyword ALIAS GROUP LIBRARY IS IF ELIF ELSE ENDIF DEFINED
70 : blume 262 STRUCTURE SIGNATURE FUNCTOR FUNSIG
71 :    
72 : blume 265 %prefer LPAREN
73 : blume 262
74 :     %left ORELSE
75 :     %left ANDALSO
76 :     %nonassoc LT LE GT GE
77 :     %nonassoc EQ NE
78 :     %left PLUS MINUS
79 :     %left TIMES DIV MOD
80 : blume 265 %left NOT TILDE
81 : blume 262
82 :     %%
83 :    
84 :     description : alias (alias)
85 :     | group (group)
86 :    
87 : blume 273 alias : ALIAS pathname (recParse
88 :     (pathnameleft, pathnameright)
89 :     pathname)
90 : blume 262
91 : blume 275 group : permspec GROUP exports IS members (S.group
92 :     (permspec, exports, members))
93 :     | permspec LIBRARY lib_exports IS members (S.library
94 :     (permspec, lib_exports,
95 : blume 265 members))
96 : blume 262
97 : blume 275 permspec : (* empty *) (S.initialPermSpec)
98 :     | permspec word (S.require (permspec, word,
99 :     error (wordleft,
100 :     wordright)))
101 :     | permspec LPAREN word RPAREN (S.grant (permspec, word,
102 :     error (wordleft,
103 :     wordright)))
104 : blume 262
105 : blume 265 lib_exports : export exports (S.exports (export, exports))
106 : blume 262
107 : blume 265 exports : (* empty *) (S.emptyExports)
108 :     | export exports (S.exports (export, exports))
109 : blume 262
110 : blume 265 export : ml_symbol (S.export ml_symbol)
111 :     | IF exp guarded_exports (S.guarded_exports
112 : blume 275 (exp, guarded_exports,
113 :     error (expleft, expright)))
114 :     | ERROR (S.error_export
115 :     (fn () =>
116 : blume 277 error (ERRORleft, ERRORright)
117 :     ERROR))
118 : blume 265
119 : blume 274 guarded_exports : exports else_exports ((exports, else_exports))
120 : blume 262
121 : blume 265 else_exports : ENDIF (S.emptyExports)
122 : blume 262 | ELSE exports ENDIF (exports)
123 : blume 265 | ELIF exp guarded_exports (S.guarded_exports
124 : blume 275 (exp, guarded_exports,
125 :     error (expleft, expright)))
126 : blume 262
127 : blume 265 members : (* empty *) (S.emptyMembers)
128 :     | member members (S.members (member, members))
129 : blume 262
130 : blume 273 member : pathname (doMember (pathname,
131 :     pathnameleft,
132 :     pathnameright,
133 : blume 275 NONE,
134 : blume 277 error'
135 :     (pathnameleft,
136 :     pathnameright)))
137 : blume 275 | pathname COLON word (doMember (pathname,
138 : blume 273 pathnameleft,
139 :     pathnameright,
140 : blume 275 SOME word,
141 : blume 277 error'
142 :     (pathnameleft,
143 :     wordright)))
144 : blume 265 | IF exp guarded_members (S.guarded_members
145 : blume 275 (exp, guarded_members,
146 :     error (expleft, expright)))
147 :     | ERROR (S.error_member
148 :     (fn () =>
149 : blume 277 error (ERRORleft, ERRORright)
150 :     ERROR))
151 : blume 262
152 : blume 274 guarded_members : members else_members ((members, else_members))
153 : blume 262
154 : blume 265 else_members : ENDIF (S.emptyMembers)
155 : blume 262 | ELSE members ENDIF (members)
156 : blume 265 | ELIF exp guarded_members (S.guarded_members
157 : blume 275 (exp, guarded_members,
158 :     error (expleft, expright)))
159 : blume 262
160 : blume 275 word : FILE_STANDARD (S.cm_symbol FILE_STANDARD)
161 :    
162 : blume 265 sym : CM_ID (S.cm_symbol CM_ID)
163 :    
164 : blume 262 exp : boolexp (boolexp)
165 :    
166 : blume 265 aexp : NUMBER (S.number NUMBER)
167 :     | sym (S.variable sym)
168 :     | LPAREN aexp RPAREN (aexp)
169 :     | aexp PLUS aexp (S.plus (aexp1, aexp2))
170 :     | aexp MINUS aexp (S.minus (aexp1, aexp2))
171 :     | aexp TIMES aexp (S.times (aexp1, aexp2))
172 :     | aexp DIV aexp (S.divide (aexp1, aexp2))
173 :     | aexp MOD aexp (S.modulus (aexp1, aexp2))
174 :     | TILDE aexp (S.negate aexp)
175 : blume 262
176 : blume 265 boolexp : DEFINED LPAREN ml_symbol RPAREN (S.ml_defined ml_symbol)
177 :     | DEFINED LPAREN sym RPAREN (S.cm_defined sym)
178 : blume 262 | LPAREN boolexp RPAREN (boolexp)
179 : blume 265 | boolexp ANDALSO boolexp (S.conj (boolexp1, boolexp2))
180 :     | boolexp ORELSE boolexp (S.disj (boolexp1, boolexp2))
181 :     | boolexp EQ boolexp (S.beq (boolexp1, boolexp2))
182 :     | boolexp NE boolexp (S.bne (boolexp1, boolexp2))
183 :     | NOT boolexp (S.not boolexp)
184 :     | aexp LT aexp (S.lt (aexp1, aexp2))
185 :     | aexp LE aexp (S.le (aexp1, aexp2))
186 :     | aexp GT aexp (S.gt (aexp1, aexp2))
187 :     | aexp GE aexp (S.ge (aexp1, aexp2))
188 :     | aexp EQ aexp (S.eq (aexp1, aexp2))
189 :     | aexp NE aexp (S.ne (aexp1, aexp2))
190 : blume 262
191 : blume 265 ml_symbol : STRUCTURE ML_ID (S.ml_structure ML_ID)
192 :     | SIGNATURE ML_ID (S.ml_signature ML_ID)
193 :     | FUNCTOR ML_ID (S.ml_functor ML_ID)
194 :     | FUNSIG ML_ID (S.ml_funsig ML_ID)
195 : blume 262
196 : blume 265 pathname : FILE_STANDARD (S.file_standard
197 : blume 270 (FILE_STANDARD, context))
198 : blume 265 | FILE_NATIVE (S.file_native
199 : blume 270 (FILE_NATIVE, context))

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