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/Tests/y.grm
ViewVC logotype

Annotation of /sml/trunk/src/cm/Tests/y.grm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 315 - (view) (download)

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

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