finished basic account add
[Bookkeeping.git] / grammar / expandedbookkeeping.lexer.g
blobe8e53e1560cc1353f204971a1ae2b04b84ed9215
1 header {
2     // import org.xml.sax.helpers.*;
4 class BookkeepingLexer extends Lexer;
6 options {
7         k=10;
8         charVocabulary='\u0000'..'\u007F';
9         exportVocab=BookkeepingLexer;
10         caseSensitive=true;
11         importVocab=XMLLexer;
14 LEFT_PAREN :'(' { System.out.println("LEFT PARENTHESESE '('"); };
16 RIGHT_PAREN :')' { System.out.println("RIGHT PARENTHESESE ')'"); };
18 DELIMITER :',' { System.out.println("DELIMITER ','"); };
20 OPT_ENTRY :"-entry" WHITESPACE( 'A'..'Z' | 'a'..'z' | '0'..'9' )*       { System.out.println("-entry"); };
22 OPT_ACCOUNT :"-account" WHITESPACE( 'A'..'Z' | 'a'..'z' | '0'..'9' )*;
24 OPT_JOURNAL :"-journal" WHITESPACE( 'A'..'Z' | 'a'..'z' | '0'..'9' )*;
26 OPT_NAME :"-name" WHITESPACE( 'A'..'Z' | 'a'..'z' | '0'..'9' )*;
28 OPT_TYPE :"-type" WHITESPACE( 'A'..'Z' | 'a'..'z' | '0'..'9' )*;
30 OPT_CWEIGHT :"-counterWeight" WHITESPACE("debit"|"credit");
32 OPT_AMOUNT :"-amount" WHITESPACE(('0'..'9')+'.'('0'..'9')('0'..'9'))*;
34 OPT_ID :"-id" WHITESPACE( 'A'..'Z' | 'a'..'z' | '0'..'9' )*;
36 OPT_ENTRYNUM :"-entrynum" WHITESPACE('0'..'9')*;
38 OPT_DATE :"-date" WHITESPACE(('0'..'9')('0'..'9')'/'('0'..'9')('0'..'9')'/'('0'..'9')('0'..'9')('0'..'9')('0'..'9'))*;
40 OPT_FILE :"-F" WHITESPACE( 'A'..'Z' | 'a'..'z' | '0'..'9' )*;
42 COMMAND_CREATE :("create")+             { System.out.println("COMMAND_CREATE"); };
44 COMMAND_ADD! :("add")+          { System.out.println("COMMAND_ADD"); };
46 COMMAND_REMOVE :("remove")+             { System.out.println("COMMAND_REMOVE"); };
48 COMMAND_REVERSE :("reverse")+           { System.out.println("COMMAND_REVERSE"); };
50 COMMAND_FIND :("find")+                 { System.out.println("COMMAND_FIND"); };
52 COMMAND_LOAD :("load")+                 { System.out.println("COMMAND_LOAD"); };
54 COMMAND_LIST :("list")+                 { System.out.println("COMMAND_LIST"); };
56 COMMAND_LOGIN :("login")+                       { System.out.println("COMMAND_LOGIN"); };
58 COMMAND_LOGOUT :("logout")+             { System.out.println("COMMAND_LOGOUT"); };
60 COMMAND_EXIT :("exit")+         { System.out.println("COMMAND_EXIT"); };
62 END_COMMAND :';'        { System.out.println("END COMMAND ';'"); };
64 WHITESPACE :( ' ' | '\r' | '\n' | '\t' ) {
65                 System.out.println("");
66                 System.out.println("WHITE SPACE ' '"); 
67                 $setType(Token.SKIP);
68         };
70 // inherited from grammar XMLLexer
71 ZZZ :"<xml/>" ;
73 // inherited from grammar XMLLexer
74 DOCTYPE! :"<!DOCTYPE" WS rootElementName:NAME 
75                 { System.out.println("ROOTELEMENT: "+rootElementName.getText()); }   
76                 WS
77                 ( 
78                     ( "SYSTEM" WS sys1:STRING
79                         { System.out.println("SYSTEM: "+sys1.getText()); }   
81                     | "PUBLIC" WS pub:STRING WS sys2:STRING
82                         { System.out.println("PUBLIC: "+pub.getText()); }   
83                         { System.out.println("SYSTEM: "+sys2.getText()); }   
84                     )
85                     ( WS )?
86                 )?
87                 ( dtd:INTERNAL_DTD ( WS )? 
88                     { System.out.println("DTD: "+dtd.getText()); }   
90                 )?
91                         '>'
92                 ;
94 // inherited from grammar XMLLexer
95 protected INTERNAL_DTD :'['!
96                 // reports warning, but is absolutely ok (checked generated code)
97                 // besides this warning was not generated with k=1 which is 
98                 // enough for this rule...
99                 ( options {greedy=false;} : NL
100                 | STRING // handle string specially to avoid to mistake ']' in string for end dtd
101                 | .
102                 )*
103                 ']'!
104             ;
106 // inherited from grammar XMLLexer
107 PI! :// { AttributesImpl attributes = new AttributesImpl(); }
108                 "<?" 
109                 target:NAME
110                 ( WS )?
111                         ( ATTR /*[attributes]*/ ( WS )? )*
112                 {
113                     if (target.getText().equalsIgnoreCase("xml")) {
114                         // this is the xml declaration, handle it
115                         System.out.println("XMLDECL: "+target.getText());
116                     } else {
117                         System.out.println("PI: "+target.getText());
118                     }
119                 }
120                         "?>"
121                 ;
123 // inherited from grammar XMLLexer
124 COMMENT! :"<!--" c:COMMENT_DATA "-->"
125                 { System.out.println("COMMENT: "+c.getText()); }
126                 ;
128 // inherited from grammar XMLLexer
129 protected COMMENT_DATA :( options {greedy=false;} : NL
130                 | .
131                 )*
132             ;
134 // inherited from grammar XMLLexer
135 ENDTAG! :"</" g:NAME ( WS )? '>'
136                 { System.out.println("ENDTAG: "+g.getText()); }
137                 ;
139 // inherited from grammar XMLLexer
140 STARTTAG! :// XXX should org.xml.sax.AttributesImpl be replaced by something else?
141                 // { AttributesImpl attributes = new AttributesImpl(); }
142                 '<' 
143                 g:NAME
144                 ( WS )?
145                         ( ATTR /*[attributes]*/ ( WS )? )*
146                         ( "/>"
147                     { System.out.println("EMTYTAG: "+g.getText()); }
148                         | '>'
149                     { System.out.println("STARTTAG: "+g.getText()); }
150                         )
151                 ;
153 // inherited from grammar XMLLexer
154 PCDATA! :p:PCDATA_DATA
155                 { System.out.println("PCDATA: "+p.getText()); }
156                 ;
158 // inherited from grammar XMLLexer
159 protected PCDATA_DATA :( options {greedy=true;} : NL
160                 | ~( '<' | '\n' | '\r' )
161                 )+
162             ;
164 // inherited from grammar XMLLexer
165 CDATABLOCK! :"<![CDATA[" p:CDATA_DATA "]]>"
166                 { System.out.println("CDATABLOCK: "+p.getText()); }
167                 ;
169 // inherited from grammar XMLLexer
170 protected CDATA_DATA :( options {greedy=false;} : NL
171                 | .
172                 )*
173             ;
175 // inherited from grammar XMLLexer
176 protected ATTR :name:NAME ( WS )? '=' ( WS )? value:STRING_NO_QUOTE
177                 /*
178                         { attributes.addAttribute("", "", name.getText(), "CDATA", 
179                         value.getText()); 
180                 }
181                 */
182                 { System.out.println("ATTRIBUTE: "+name.getText()+"="+value.getText()); }
183                 ;
185 // inherited from grammar XMLLexer
186 protected STRING_NO_QUOTE :'"'! (~'"')* '"'!
187                 |       '\''! (~'\'')* '\''!
188                 ;
190 // inherited from grammar XMLLexer
191 protected STRING :'"' (~'"')* '"'
192                 |       '\'' (~'\'')* '\''
193                 ;
195 // inherited from grammar XMLLexer
196 protected NAME :( LETTER | '_' | ':') ( options {greedy=true;} : NAMECHAR )*
197                 ;
199 // inherited from grammar XMLLexer
200 protected NAMECHAR :LETTER | DIGIT | '.' | '-' | '_' | ':'
201                 ;
203 // inherited from grammar XMLLexer
204 protected DIGIT :'0'..'9'
205                 ;
207 // inherited from grammar XMLLexer
208 protected LETTER :'a'..'z' 
209                 | 'A'..'Z'
210                 ;
212 // inherited from grammar XMLLexer
213 protected WS :( options {
214                         greedy = true;
215                                 }
216                         :       ' '
217                         |       ESC
218                         )+
219                 ;
221 // inherited from grammar XMLLexer
222 protected ESC :( '\t'
223                         |       NL
224                         )
225                 ;
227 // inherited from grammar XMLLexer
228 protected NL :( options {
229                 generateAmbigWarnings=false;
230                 greedy = true;
231             }
232                         : '\n'
233                         |       "\r\n"
234                         |       '\r'
235                         )
236                         { newline(); }
237                 ;
239 class XMLLexer extends Lexer;
241 options {
242         k=10;
243         charVocabulary='\u0000'..'\u007F';
244         caseSensitive=true;
245         exportVocab=XMLLexer;
248 ZZZ :"<xml/>" ;
250 DOCTYPE! :"<!DOCTYPE" WS rootElementName:NAME 
251                 { System.out.println("ROOTELEMENT: "+rootElementName.getText()); }   
252                 WS
253                 ( 
254                     ( "SYSTEM" WS sys1:STRING
255                         { System.out.println("SYSTEM: "+sys1.getText()); }   
257                     | "PUBLIC" WS pub:STRING WS sys2:STRING
258                         { System.out.println("PUBLIC: "+pub.getText()); }   
259                         { System.out.println("SYSTEM: "+sys2.getText()); }   
260                     )
261                     ( WS )?
262                 )?
263                 ( dtd:INTERNAL_DTD ( WS )? 
264                     { System.out.println("DTD: "+dtd.getText()); }   
266                 )?
267                         '>'
268                 ;
270 protected INTERNAL_DTD :'['!
271                 // reports warning, but is absolutely ok (checked generated code)
272                 // besides this warning was not generated with k=1 which is 
273                 // enough for this rule...
274                 ( options {greedy=false;} : NL
275                 | STRING // handle string specially to avoid to mistake ']' in string for end dtd
276                 | .
277                 )*
278                 ']'!
279             ;
281 PI! :// { AttributesImpl attributes = new AttributesImpl(); }
282                 "<?" 
283                 target:NAME
284                 ( WS )?
285                         ( ATTR /*[attributes]*/ ( WS )? )*
286                 {
287                     if (target.getText().equalsIgnoreCase("xml")) {
288                         // this is the xml declaration, handle it
289                         System.out.println("XMLDECL: "+target.getText());
290                     } else {
291                         System.out.println("PI: "+target.getText());
292                     }
293                 }
294                         "?>"
295                 ;
297 COMMENT! :"<!--" c:COMMENT_DATA "-->"
298                 { System.out.println("COMMENT: "+c.getText()); }
299                 ;
301 protected COMMENT_DATA :( options {greedy=false;} : NL
302                 | .
303                 )*
304             ;
306 ENDTAG! :"</" g:NAME ( WS )? '>'
307                 { System.out.println("ENDTAG: "+g.getText()); }
308                 ;
310 ZZZ! :"<xml/>" ;
312 STARTTAG! :// XXX should org.xml.sax.AttributesImpl be replaced by something else?
313                 // { AttributesImpl attributes = new AttributesImpl(); }
314                 '<' 
315                 g:NAME
316                 ( WS )?
317                         ( ATTR /*[attributes]*/ ( WS )? )*
318                         ( "/>"
319                     { System.out.println("EMTYTAG: "+g.getText()); }
320                         | '>'
321                     { System.out.println("STARTTAG: "+g.getText()); }
322                         )
323                 ;
325 PCDATA! :p:PCDATA_DATA
326                 { System.out.println("PCDATA: "+p.getText()); }
327                 ;
329 protected PCDATA_DATA :( options {greedy=true;} : NL
330                 | ~( '<' | '\n' | '\r' )
331                 )+
332             ;
334 CDATABLOCK! :"<![CDATA[" p:CDATA_DATA "]]>"
335                 { System.out.println("CDATABLOCK: "+p.getText()); }
336                 ;
338 protected CDATA_DATA :( options {greedy=false;} : NL
339                 | .
340                 )*
341             ;
343 protected ATTR :name:NAME ( WS )? '=' ( WS )? value:STRING_NO_QUOTE
344                 /*
345                         { attributes.addAttribute("", "", name.getText(), "CDATA", 
346                         value.getText()); 
347                 }
348                 */
349                 { System.out.println("ATTRIBUTE: "+name.getText()+"="+value.getText()); }
350                 ;
352 protected STRING_NO_QUOTE :'"'! (~'"')* '"'!
353                 |       '\''! (~'\'')* '\''!
354                 ;
356 protected STRING :'"' (~'"')* '"'
357                 |       '\'' (~'\'')* '\''
358                 ;
360 protected NAME :( LETTER | '_' | ':') ( options {greedy=true;} : NAMECHAR )*
361                 ;
363 protected NAMECHAR :LETTER | DIGIT | '.' | '-' | '_' | ':'
364                 ;
366 protected DIGIT :'0'..'9'
367                 ;
369 protected LETTER :'a'..'z' 
370                 | 'A'..'Z'
371                 ;
373 protected WS :( options {
374                         greedy = true;
375                                 }
376                         :       ' '
377                         |       ESC
378                         )+
379                 ;
381 protected ESC :( '\t'
382                         |       NL
383                         )
384                 ;
386 protected NL :( options {
387                 generateAmbigWarnings=false;
388                 greedy = true;
389             }
390                         : '\n'
391                         |       "\r\n"
392                         |       '\r'
393                         )
394                         { newline(); }
395                 ;