Home My Page Projects Code Snippets Project Openings 3D graphics for Standard ML
Summary Activity SCM

SCM Repository

[sml3d] Diff of /trunk/sml3d/gen/gen-from-xml/spec-parser/xml-spec.grm
ViewVC logotype

Diff of /trunk/sml3d/gen/gen-from-xml/spec-parser/xml-spec.grm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1322, Thu Nov 14 18:40:13 2013 UTC revision 1323, Fri Nov 15 15:07:59 2013 UTC
# Line 12  Line 12 
12  %tokens  %tokens
13    : OPEN_alias          ("<alias")    : OPEN_alias          ("<alias")
14    | ELEM_apientry       ("<apientry/>")    | ELEM_apientry       ("<apientry/>")
15    | OPEN_command        ("<command>")    | OPEN_command        ("<command")
16    | CLOSE_command       ("</command>")    | CLOSE_command       ("</command>")
17    | OPEN_commands       ("<commands")    | OPEN_commands       ("<commands")
18    | CLOSE_commands      ("</commands>")    | CLOSE_commands      ("</commands>")
# Line 65  Line 65 
65    
66  %defs (  %defs (
67    structure S = SpecRep    structure S = SpecRep
   structure N = SpecNames  
68  );  );
69    
70  %start Registry;  %start Registry;
71    
72  Registry  Registry
73          : "<?xml" Attribute* "?>" "<registry>" RegistryItem* "</registry>"          : "<?xml" Attribute* "?>" "<registry>" RegistryItem* "</registry>"
74                    => (S.mkRegistry RegistryItem)
75          ;          ;
76    
77  RegistryItem  RegistryItem
# Line 86  Line 86 
86    
87  Comment  Comment
88          : "<comment>" Text "</comment>"          : "<comment>" Text "</comment>"
89                    => (S.mkComment Text)
90          ;          ;
91    
92  Types  Types
93          : "<types>" Type* "</types>"          : "<types>" Type* "</types>"
94                    => (S.mkTypes Type)
95          ;          ;
96    
97  Type  Type
98          : "<type" Attribute* ">" Text? ("<apientry/>" Text)? (Name Text)? "</type>"          : "<type" Attribute* ">" Text? ("<apientry/>" Text)? (Name Text)? "</type>"
99                    => (let
100                        val (name, txt) = (case SR2
101                               of NONE => (NONE, [])
102                                | SOME(name, txt) => (SOME name, [" ", name, " ", txt])
103                              (* end case *))
104                        val txt = (case SR1 of NONE => txt | SOME t => t::txt)
105                        val txt = (case Text of NONE => txt | SOME t => t::txt)
106                        in
107                          S.mkType(Attribute, name, concat txt)
108                        end)
109          ;          ;
110    
111  Name  Name
112          : "<name>" Text "</name>"          : "<name>" Text "</name>"
113                    => (Text)
114          ;          ;
115    
116  Groups  Groups
117          : "<groups>" Group* "</groups>"          : "<groups>" Group* "</groups>"
118                    => (S.mkGroups Group)
119          ;          ;
120    
121  Group  Group
122          : "<group" Attribute+ ">" Enum* "</group>"          : "<group" Attribute+ ">" Enum* "</group>"
123                    => (S.mkGroup(Attribute, Enum))
124          ;          ;
125    
126  Enums  Enums
127          : "<enums" Attribute* ">" (Enum | Unused)* "</enums>"          : "<enums" Attribute* ">" (Enum => (S.L Enum)| Unused => (S.R Unused))* "</enums>"
128                    => (S.mkEnums(Attribute, SR))
129          ;          ;
130    
131  Enum  Enum
132          : "<enum" Attribute+ "/>"          : "<enum" Attribute+ "/>"
133                    => (S.mkEnum Attribute)
134          ;          ;
135    
136  Unused  Unused
137          : "<unused" Attribute+ "/>"          : "<unused" Attribute+ "/>"
138                    => (S.mkUnused Attribute)
139          ;          ;
140    
141  Commands  Commands
142          : "<commands" Attribute* ">" Command* "</commands>"          : "<commands" Attribute* ">" Command* "</commands>"
143                    => (S.mkCommands(Attribute, Command))
144          ;          ;
145    
146  Command  Command
147          : "<command>" Proto Param* ( Alias | VecEquiv | GLX )* "</command>"          : "<command" Attribute* ">" Proto Param* CmdExtra* "</command>"
148                    => (S.mkCommand(Attribute, Proto, Param, CmdExtra))
149          ;          ;
150    
151  Proto  Proto
152          : "<proto" Attribute* ">" Text (PType Text)? Name Text "</proto>"          : "<proto" Attribute* ">" ParamOrProtoContent "</proto>"
153                    => (let
154                        val (ptype, name, txt) = ParamOrProtoContent
155                        in
156                          S.mkProto(Attribute, ptype, name, txt)
157                        end)
158            ;
159    
160    ParamOrProtoContent
161            : Text (PType Text)? Name Text
162                    => (let
163                        val txt = [Name, Text2]
164                        val (ptype, txt') = (case SR
165                               of NONE => (NONE, txt)
166                                | SOME(ptype, txt') => (SOME ptype, ptype :: txt' :: txt)
167                              (* end case *))
168                        in
169                          (ptype, Name, String.concat(Text1::txt))
170                        end)
171          ;          ;
172    
173  PType  PType
174          : "<ptype>" Text "</ptype>"          : "<ptype>" Text "</ptype>"
175                    => (Text)
176          ;          ;
177    
178  Param  Param
179          : "<param" Attribute* ">" Text (PType Text)? Name Text "</param>"          : "<param" Attribute* ">" ParamOrProtoContent "</param>"
180                    => (let
181                        val (ptype, name, txt) = ParamOrProtoContent
182                        in
183                          S.mkParam(Attribute, ptype, name, txt)
184                        end)
185          ;          ;
186    
187  Alias  CmdExtra
188          : "<alias" Attribute "/>"          : "<alias" Attribute "/>"
189          ;                  => (S.mkAlias Attribute)
190            | "<vecequiv" Attribute "/>"
191  VecEquiv                  => (S.mkVecEquiv Attribute)
192          : "<vecequiv" Attribute "/>"          | "<glx" Attribute+ "/>"
193          ;                  => (S.mkGLX Attribute)
   
 GLX  
         : "<glx" Attribute+ "/>"  
194          ;          ;
195    
196  Feature  Feature
197          : "<feature" Attribute+ ">" RemoveOrRequire* "</feature>"          : "<feature" Attribute+ ">" RequireOrRemove* "</feature>"
198                    => (S.mkFeature(Attribute, RequireOrRemove))
199          ;          ;
200    
201  RemoveOrRequire  RequireOrRemove
202          : "<require" Attribute* ">" InterfaceElement* "</require>"          : "<require" Attribute* ">" InterfaceElement* "</require>"
203                    => (S.mkRequire(Attribute, InterfaceElement))
204          | "<remove" Attribute* ">" InterfaceElement* "</remove>"          | "<remove" Attribute* ">" InterfaceElement* "</remove>"
205                    => (S.mkRemove(Attribute, InterfaceElement))
206            ;
207    
208    InterfaceElement
209            : Type
210                    => (S.mkTypeElem Type)
211            | Enum
212                    => (S.mkEnumElem Enum)
213            | Command
214                    => (S.mkCommandElem Command)
215          ;          ;
216    
217  Extensions  Extensions
218          : "<extensions>" Extension* "</extensions>"          : "<extensions>" Extension* "</extensions>"
219                    => (S.mkExtensions Extension)
220          ;          ;
221    
222  Extension  Extension
223          : "<extension" Attribute+ ">" RemoveOrRequire* "</extension>"          : "<extension" Attribute+ ">" RequireOrRemove* "</extension>"
224          ;                  => (S.mkExtension(Attribute, RequireOrRemove))
   
 InterfaceElement  
         : Type  
         | Enum  
         | Command  
225          ;          ;
226    
227  Attribute  Attribute
228          : ID "=" LIT          : ID "=" LIT
229                    => (ID, LIT)
230          ;          ;
231    
232  Text  Text
233          : (TEXT | CDATA)+          : (TEXT | CDATA)+
234                    => (String.concat SR)
235          ;          ;

Legend:
Removed from v.1322  
changed lines
  Added in v.1323

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