sync
[Bookkeeping.git] / tims.sablecc3
blob8e32d44d51086a88bdf4ad523cb9f605e2381860
3 Package timmy; 
9 Helpers 
11         
13         //allchars = [0 .. 0xFFFF];
15         lowercase = ['a' .. 'z'];
17         uppercase = ['A' .. 'Z'];
19         digit = ['0' .. '9'];
21         hex_digit = [ digit+ [['a' .. 'f'] + ['A' .. 'F']] ];
23         
25         tab = 9;
27         cr = 13;
29         lf = 10;
31         eol = cr lf | cr | lf;  // This takes care of different platforms
33         
35         ws = (' ' | tab | eol);
37         
39         dash = '-';
41         exclamationz = 33; 
43         
45         underscorez = '_';
47         lparenz = '<';
49         rparenz = '>';
51         lsquare_bracketz = '['; 
53         rsquare_bracketz = ']';
55         
57         
59 Tokens
61         
63         whitespace = ws;
65         
67         //exclamation = exclamationz;
69         underscore = underscorez; 
71         lparen = lparenz;
73         rparen = rparenz;
75         lsquare_bracket = lsquare_bracketz; 
77         rsquare_bracket = rsquare_bracketz;
79         
81         cmd = 'read';
83         
85         decl_xml = 'xml';
87         decl_dtd = 'DOCTYPE'; 
89         
91         colon = 58; 
93         question = 63;
95         equals = '='; 
97         fslash = '/';
99         quote = ( '"' | ''' );
101         
103         word = ( lowercase | uppercase | dash | underscorez | digit )+;
105         
107         xml_opencomment = lparenz exclamationz dash dash;
109         xml_closecomment = dash dash rparenz; 
111         
113         
115 Ignored Tokens 
117         
119         whitespace;
121         
123         
125 Productions
127         
129         expr =  cmd fulltag*;
131         xmltag = lparen word rparen;
133         
135         
137         fulltag =       {fulltag}       opentag fulltag* word* closetag | 
139                                 {emptytag}      emptytag | 
141                                 {comment} xmlcomment; 
143                                 
145                                 
147         opentag = lparen nsprefix? word attribute* rparen;
149         emptytag = lparen nsprefix? word attribute* fslash rparen;
151         closetag = lparen fslash nsprefix? word rparen;
153         
155         attribute = nsprefix? attributelhs equals attributerhs; 
157         attributelhs = word;
159         attributerhs = [left]:quote word* [right]:quote;
161         
163         xmlcomment = xml_opencomment word* xml_closecomment; 
165         
167         nsprefix = word colon;
169         
171         //xml_decl_schem = lparen [left]:question decl_xml attribute+ [right]:question rparen; 
173         //xml_decl_dtd = lparen exclamation decl_dtd word+ rparen; 
175         
177         
179         // TODO 
181         
183         // 6. include document declaration ( DTD & schema )
185         // <?xml version="1.0" encoding="iso8859-1"  **allow any and all characters between** ?>
187         // <!DOCTYPE greeting SYSTEM "hello.dtd" **allow any and all characters between** >
189         
191         
193         // [OK] multiple attributes
195         // [OK] include 2 tokens in a production rule
197         
199         // [OK] include xml comments 
201         // <!-- --> 
203         
205         // [OK] include namespace declarations; namespace usage in tags and attributes  
207         //      xmlns='' xmlns:ans='' <ans:tagname att='' />
209         
211         // [OK] text in open/close tags 
213         // <a att='' >
215         //      <b/>
217         //      some text
219         // </a>