View Javadoc
1   // $ANTLR 2.7.7 (20060906): "subtree-specification.g" -> "AntlrSubtreeSpecificationLexer.java"$
2   
3   /*
4    *  Licensed to the Apache Software Foundation (ASF) under one
5    *  or more contributor license agreements.  See the NOTICE file
6    *  distributed with this work for additional information
7    *  regarding copyright ownership.  The ASF licenses this file
8    *  to you under the Apache License, Version 2.0 (the
9    *  "License"); you may not use this file except in compliance
10   *  with the License.  You may obtain a copy of the License at
11   *  
12   *    https://www.apache.org/licenses/LICENSE-2.0
13   *  
14   *  Unless required by applicable law or agreed to in writing,
15   *  software distributed under the License is distributed on an
16   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   *  KIND, either express or implied.  See the License for the
18   *  specific language governing permissions and limitations
19   *  under the License. 
20   *  
21   */
22  
23  
24  package org.apache.directory.api.ldap.model.subtree;
25  
26  import java.util.Set;
27  import java.util.Map;
28  import java.util.HashSet;
29  import java.util.List;
30  import java.util.ArrayList;
31  
32  import org.apache.directory.api.i18n.I18n;
33  import org.apache.directory.api.ldap.model.name.Dn;
34  import org.apache.directory.api.ldap.model.filter.ExprNode;
35  import org.apache.directory.api.ldap.model.filter.LeafNode;
36  import org.apache.directory.api.ldap.model.filter.BranchNode;
37  import org.apache.directory.api.ldap.model.filter.AndNode;
38  import org.apache.directory.api.ldap.model.filter.OrNode;
39  import org.apache.directory.api.ldap.model.filter.NotNode;
40  import org.apache.directory.api.ldap.model.filter.EqualityNode;
41  import org.apache.directory.api.ldap.model.filter.FilterParser;
42  import org.apache.directory.api.ldap.model.schema.ObjectClass;
43  import org.apache.directory.api.ldap.model.schema.SchemaManager;
44  import org.apache.directory.api.ldap.model.subtree.SubtreeSpecification;
45  import org.apache.directory.api.ldap.model.subtree.SubtreeSpecificationModifier;
46  import org.apache.directory.api.ldap.model.schema.NormalizerMappingResolver;
47  import org.apache.directory.api.ldap.model.schema.normalizers.OidNormalizer;
48  import org.apache.directory.api.util.ComponentsMonitor;
49  import org.apache.directory.api.util.OptionalComponentsMonitor;
50  import org.apache.directory.api.ldap.model.constants.SchemaConstants;
51  import org.apache.directory.api.ldap.model.entry.Value;
52  import org.apache.directory.api.ldap.model.exception.LdapException;
53  import org.apache.directory.api.ldap.model.schema.AttributeType;
54  
55  import org.slf4j.Logger;
56  import org.slf4j.LoggerFactory;
57  
58  import java.io.InputStream;
59  import antlr.TokenStreamException;
60  import antlr.TokenStreamIOException;
61  import antlr.TokenStreamRecognitionException;
62  import antlr.CharStreamException;
63  import antlr.CharStreamIOException;
64  import antlr.ANTLRException;
65  import java.io.Reader;
66  import java.util.Hashtable;
67  import antlr.CharScanner;
68  import antlr.InputBuffer;
69  import antlr.ByteBuffer;
70  import antlr.CharBuffer;
71  import antlr.Token;
72  import antlr.CommonToken;
73  import antlr.RecognitionException;
74  import antlr.NoViableAltForCharException;
75  import antlr.MismatchedCharException;
76  import antlr.TokenStream;
77  import antlr.ANTLRHashString;
78  import antlr.LexerSharedInputState;
79  import antlr.collections.impl.BitSet;
80  import antlr.SemanticException;
81  
82  /**
83   * The parser's primary lexer.
84   *
85   * @see <a href="http://www.faqs.org/rfcs/rfc3672.html">RFC 3672</a>
86   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
87   */
88  public class AntlrSubtreeSpecificationLexer extends antlr.CharScanner implements AntlrSubtreeSpecificationParserTokenTypes, TokenStream
89   {
90  
91      private static final Logger LOG = LoggerFactory.getLogger( AntlrSubtreeSpecificationLexer.class );
92  public AntlrSubtreeSpecificationLexer(InputStream in) {
93  	this(new ByteBuffer(in));
94  }
95  public AntlrSubtreeSpecificationLexer(Reader in) {
96  	this(new CharBuffer(in));
97  }
98  public AntlrSubtreeSpecificationLexer(InputBuffer ib) {
99  	this(new LexerSharedInputState(ib));
100 }
101 public AntlrSubtreeSpecificationLexer(LexerSharedInputState state) {
102 	super(state);
103 	caseSensitiveLiterals = true;
104 	setCaseSensitive(true);
105 	literals = new Hashtable();
106 	literals.put(new ANTLRHashString("end", this), new Integer(4));
107 	literals.put(new ANTLRHashString("specificExclusions", this), new Integer(10));
108 	literals.put(new ANTLRHashString("or", this), new Integer(24));
109 	literals.put(new ANTLRHashString("minimum", this), new Integer(14));
110 	literals.put(new ANTLRHashString("chopBefore", this), new Integer(11));
111 	literals.put(new ANTLRHashString("chopAfter", this), new Integer(13));
112 	literals.put(new ANTLRHashString("maximum", this), new Integer(15));
113 	literals.put(new ANTLRHashString("and", this), new Integer(23));
114 	literals.put(new ANTLRHashString("not", this), new Integer(25));
115 	literals.put(new ANTLRHashString("item", this), new Integer(22));
116 	literals.put(new ANTLRHashString("specificationFilter", this), new Integer(16));
117 	literals.put(new ANTLRHashString("base", this), new Integer(9));
118 }
119 
120 public Token nextToken() throws TokenStreamException {
121 	Token theRetToken=null;
122 tryAgain:
123 	for (;;) {
124 		Token _token = null;
125 		int _ttype = Token.INVALID_TYPE;
126 		resetText();
127 		try {   // for char stream error handling
128 			try {   // for lexical error handling
129 				switch ( LA(1)) {
130 				case ' ':
131 				{
132 					mSP(true);
133 					theRetToken=_returnToken;
134 					break;
135 				}
136 				case ':':
137 				{
138 					mCOLON(true);
139 					theRetToken=_returnToken;
140 					break;
141 				}
142 				case '{':
143 				{
144 					mOPEN_CURLY(true);
145 					theRetToken=_returnToken;
146 					break;
147 				}
148 				case '}':
149 				{
150 					mCLOSE_CURLY(true);
151 					theRetToken=_returnToken;
152 					break;
153 				}
154 				case ',':
155 				{
156 					mSEP(true);
157 					theRetToken=_returnToken;
158 					break;
159 				}
160 				case '"':
161 				{
162 					mSAFEUTF8STRING(true);
163 					theRetToken=_returnToken;
164 					break;
165 				}
166 				case 'A':  case 'B':  case 'C':  case 'D':
167 				case 'E':  case 'F':  case 'G':  case 'H':
168 				case 'I':  case 'J':  case 'K':  case 'L':
169 				case 'M':  case 'N':  case 'O':  case 'P':
170 				case 'Q':  case 'R':  case 'S':  case 'T':
171 				case 'U':  case 'V':  case 'W':  case 'X':
172 				case 'Y':  case 'Z':  case 'a':  case 'b':
173 				case 'c':  case 'd':  case 'e':  case 'f':
174 				case 'g':  case 'h':  case 'i':  case 'j':
175 				case 'k':  case 'l':  case 'm':  case 'n':
176 				case 'o':  case 'p':  case 'q':  case 'r':
177 				case 's':  case 't':  case 'u':  case 'v':
178 				case 'w':  case 'x':  case 'y':  case 'z':
179 				{
180 					mDESCR(true);
181 					theRetToken=_returnToken;
182 					break;
183 				}
184 				case '0':  case '1':  case '2':  case '3':
185 				case '4':  case '5':  case '6':  case '7':
186 				case '8':  case '9':
187 				{
188 					mINTEGER_OR_NUMERICOID(true);
189 					theRetToken=_returnToken;
190 					break;
191 				}
192 				case '(':
193 				{
194 					mFILTER(true);
195 					theRetToken=_returnToken;
196 					break;
197 				}
198 				default:
199 				{
200 					if (LA(1)==EOF_CHAR) {uponEOF(); _returnToken = makeToken(Token.EOF_TYPE);}
201 				else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
202 				}
203 				}
204 				if ( _returnToken==null ) continue tryAgain; // found SKIP token
205 				_ttype = _returnToken.getType();
206 				_ttype = testLiteralsTable(_ttype);
207 				_returnToken.setType(_ttype);
208 				return _returnToken;
209 			}
210 			catch (RecognitionException e) {
211 				throw new TokenStreamRecognitionException(e);
212 			}
213 		}
214 		catch (CharStreamException cse) {
215 			if ( cse instanceof CharStreamIOException ) {
216 				throw new TokenStreamIOException(((CharStreamIOException)cse).io);
217 			}
218 			else {
219 				throw new TokenStreamException(cse.getMessage());
220 			}
221 		}
222 	}
223 }
224 
225 	public final void mSP(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
226 		int _ttype; Token _token=null; int _begin=text.length();
227 		_ttype = SP;
228 		int _saveIndex;
229 		
230 		match(' ');
231 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
232 			_token = makeToken(_ttype);
233 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
234 		}
235 		_returnToken = _token;
236 	}
237 	
238 	public final void mCOLON(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
239 		int _ttype; Token _token=null; int _begin=text.length();
240 		_ttype = COLON;
241 		int _saveIndex;
242 		
243 		match(':');
244 		if ( inputState.guessing==0 ) {
245 			
246 			if ( LOG.isDebugEnabled() )
247 			{
248 			LOG.debug( "matched COLON(':')" ); 
249 			}
250 			
251 		}
252 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
253 			_token = makeToken(_ttype);
254 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
255 		}
256 		_returnToken = _token;
257 	}
258 	
259 	public final void mOPEN_CURLY(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
260 		int _ttype; Token _token=null; int _begin=text.length();
261 		_ttype = OPEN_CURLY;
262 		int _saveIndex;
263 		
264 		match('{');
265 		if ( inputState.guessing==0 ) {
266 			
267 			if ( LOG.isDebugEnabled() )
268 			{
269 			LOG.debug( "matched LBRACKET('{')" );
270 			}
271 			
272 		}
273 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
274 			_token = makeToken(_ttype);
275 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
276 		}
277 		_returnToken = _token;
278 	}
279 	
280 	public final void mCLOSE_CURLY(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
281 		int _ttype; Token _token=null; int _begin=text.length();
282 		_ttype = CLOSE_CURLY;
283 		int _saveIndex;
284 		
285 		match('}');
286 		if ( inputState.guessing==0 ) {
287 			
288 			if ( LOG.isDebugEnabled() )
289 			{
290 			LOG.debug( "matched RBRACKET('}')" ); 
291 			}
292 			
293 		}
294 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
295 			_token = makeToken(_ttype);
296 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
297 		}
298 		_returnToken = _token;
299 	}
300 	
301 	public final void mSEP(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
302 		int _ttype; Token _token=null; int _begin=text.length();
303 		_ttype = SEP;
304 		int _saveIndex;
305 		
306 		match(',');
307 		if ( inputState.guessing==0 ) {
308 			
309 			if ( LOG.isDebugEnabled() )
310 			{
311 			LOG.debug( "matched SEP(',')" ); 
312 			}
313 			
314 		}
315 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
316 			_token = makeToken(_ttype);
317 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
318 		}
319 		_returnToken = _token;
320 	}
321 	
322 	public final void mSAFEUTF8STRING(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
323 		int _ttype; Token _token=null; int _begin=text.length();
324 		_ttype = SAFEUTF8STRING;
325 		int _saveIndex;
326 		
327 		_saveIndex=text.length();
328 		match('"');
329 		text.setLength(_saveIndex);
330 		{
331 		_loop102:
332 		do {
333 			if ((_tokenSet_0.member(LA(1)))) {
334 				mSAFEUTF8CHAR(false);
335 			}
336 			else {
337 				break _loop102;
338 			}
339 			
340 		} while (true);
341 		}
342 		_saveIndex=text.length();
343 		match('"');
344 		text.setLength(_saveIndex);
345 		if ( inputState.guessing==0 ) {
346 			
347 			if ( LOG.isDebugEnabled() )
348 			{
349 			LOG.debug( "matched SAFEUTF8CHAR: \"{}\"", getText() ); 
350 			}
351 			
352 		}
353 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
354 			_token = makeToken(_ttype);
355 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
356 		}
357 		_returnToken = _token;
358 	}
359 	
360 	protected final void mSAFEUTF8CHAR(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
361 		int _ttype; Token _token=null; int _begin=text.length();
362 		_ttype = SAFEUTF8CHAR;
363 		int _saveIndex;
364 		
365 		switch ( LA(1)) {
366 		case '\u0001':  case '\u0002':  case '\u0003':  case '\u0004':
367 		case '\u0005':  case '\u0006':  case '\u0007':  case '\u0008':
368 		case '\t':  case '\n':  case '\u000b':  case '\u000c':
369 		case '\r':  case '\u000e':  case '\u000f':  case '\u0010':
370 		case '\u0011':  case '\u0012':  case '\u0013':  case '\u0014':
371 		case '\u0015':  case '\u0016':  case '\u0017':  case '\u0018':
372 		case '\u0019':  case '\u001a':  case '\u001b':  case '\u001c':
373 		case '\u001d':  case '\u001e':  case '\u001f':  case ' ':
374 		case '!':
375 		{
376 			matchRange('\u0001','\u0021');
377 			break;
378 		}
379 		case '#':  case '$':  case '%':  case '&':
380 		case '\'':  case '(':  case ')':  case '*':
381 		case '+':  case ',':  case '-':  case '.':
382 		case '/':  case '0':  case '1':  case '2':
383 		case '3':  case '4':  case '5':  case '6':
384 		case '7':  case '8':  case '9':  case ':':
385 		case ';':  case '<':  case '=':  case '>':
386 		case '?':  case '@':  case 'A':  case 'B':
387 		case 'C':  case 'D':  case 'E':  case 'F':
388 		case 'G':  case 'H':  case 'I':  case 'J':
389 		case 'K':  case 'L':  case 'M':  case 'N':
390 		case 'O':  case 'P':  case 'Q':  case 'R':
391 		case 'S':  case 'T':  case 'U':  case 'V':
392 		case 'W':  case 'X':  case 'Y':  case 'Z':
393 		case '[':  case '\\':  case ']':  case '^':
394 		case '_':  case '`':  case 'a':  case 'b':
395 		case 'c':  case 'd':  case 'e':  case 'f':
396 		case 'g':  case 'h':  case 'i':  case 'j':
397 		case 'k':  case 'l':  case 'm':  case 'n':
398 		case 'o':  case 'p':  case 'q':  case 'r':
399 		case 's':  case 't':  case 'u':  case 'v':
400 		case 'w':  case 'x':  case 'y':  case 'z':
401 		case '{':  case '|':  case '}':  case '~':
402 		case '\u007f':
403 		{
404 			matchRange('\u0023','\u007F');
405 			break;
406 		}
407 		case '\u00c0':  case '\u00c1':  case '\u00c2':  case '\u00c3':
408 		case '\u00c4':  case '\u00c5':  case '\u00c6':  case '\u00c7':
409 		case '\u00c8':  case '\u00c9':  case '\u00ca':  case '\u00cb':
410 		case '\u00cc':  case '\u00cd':  case '\u00ce':  case '\u00cf':
411 		case '\u00d0':  case '\u00d1':  case '\u00d2':  case '\u00d3':
412 		case '\u00d4':  case '\u00d5':  case '\u00d6':
413 		{
414 			matchRange('\u00c0','\u00d6');
415 			break;
416 		}
417 		case '\u00d8':  case '\u00d9':  case '\u00da':  case '\u00db':
418 		case '\u00dc':  case '\u00dd':  case '\u00de':  case '\u00df':
419 		case '\u00e0':  case '\u00e1':  case '\u00e2':  case '\u00e3':
420 		case '\u00e4':  case '\u00e5':  case '\u00e6':  case '\u00e7':
421 		case '\u00e8':  case '\u00e9':  case '\u00ea':  case '\u00eb':
422 		case '\u00ec':  case '\u00ed':  case '\u00ee':  case '\u00ef':
423 		case '\u00f0':  case '\u00f1':  case '\u00f2':  case '\u00f3':
424 		case '\u00f4':  case '\u00f5':  case '\u00f6':
425 		{
426 			matchRange('\u00d8','\u00f6');
427 			break;
428 		}
429 		case '\u00f8':  case '\u00f9':  case '\u00fa':  case '\u00fb':
430 		case '\u00fc':  case '\u00fd':  case '\u00fe':  case '\u00ff':
431 		{
432 			matchRange('\u00f8','\u00ff');
433 			break;
434 		}
435 		default:
436 			if (((LA(1) >= '\u0100' && LA(1) <= '\u1fff'))) {
437 				matchRange('\u0100','\u1fff');
438 			}
439 			else if (((LA(1) >= '\u3040' && LA(1) <= '\u318f'))) {
440 				matchRange('\u3040','\u318f');
441 			}
442 			else if (((LA(1) >= '\u3300' && LA(1) <= '\u337f'))) {
443 				matchRange('\u3300','\u337f');
444 			}
445 			else if (((LA(1) >= '\u3400' && LA(1) <= '\u3d2d'))) {
446 				matchRange('\u3400','\u3d2d');
447 			}
448 			else if (((LA(1) >= '\u4e00' && LA(1) <= '\u9fff'))) {
449 				matchRange('\u4e00','\u9fff');
450 			}
451 			else if (((LA(1) >= '\uf900' && LA(1) <= '\ufaff'))) {
452 				matchRange('\uf900','\ufaff');
453 			}
454 		else {
455 			throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());
456 		}
457 		}
458 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
459 			_token = makeToken(_ttype);
460 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
461 		}
462 		_returnToken = _token;
463 	}
464 	
465 	public final void mDESCR(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
466 		int _ttype; Token _token=null; int _begin=text.length();
467 		_ttype = DESCR;
468 		int _saveIndex;
469 		
470 		mALPHA(false);
471 		{
472 		_loop105:
473 		do {
474 			switch ( LA(1)) {
475 			case 'A':  case 'B':  case 'C':  case 'D':
476 			case 'E':  case 'F':  case 'G':  case 'H':
477 			case 'I':  case 'J':  case 'K':  case 'L':
478 			case 'M':  case 'N':  case 'O':  case 'P':
479 			case 'Q':  case 'R':  case 'S':  case 'T':
480 			case 'U':  case 'V':  case 'W':  case 'X':
481 			case 'Y':  case 'Z':  case 'a':  case 'b':
482 			case 'c':  case 'd':  case 'e':  case 'f':
483 			case 'g':  case 'h':  case 'i':  case 'j':
484 			case 'k':  case 'l':  case 'm':  case 'n':
485 			case 'o':  case 'p':  case 'q':  case 'r':
486 			case 's':  case 't':  case 'u':  case 'v':
487 			case 'w':  case 'x':  case 'y':  case 'z':
488 			{
489 				mALPHA(false);
490 				break;
491 			}
492 			case '0':  case '1':  case '2':  case '3':
493 			case '4':  case '5':  case '6':  case '7':
494 			case '8':  case '9':
495 			{
496 				mDIGIT(false);
497 				break;
498 			}
499 			case '-':
500 			{
501 				match('-');
502 				break;
503 			}
504 			default:
505 			{
506 				break _loop105;
507 			}
508 			}
509 		} while (true);
510 		}
511 		if ( inputState.guessing==0 ) {
512 			
513 			if ( LOG.isDebugEnabled() )
514 			{
515 			LOG.debug( "matched DESCR" ); 
516 			}
517 			
518 		}
519 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
520 			_token = makeToken(_ttype);
521 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
522 		}
523 		_returnToken = _token;
524 	}
525 	
526 	protected final void mALPHA(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
527 		int _ttype; Token _token=null; int _begin=text.length();
528 		_ttype = ALPHA;
529 		int _saveIndex;
530 		
531 		switch ( LA(1)) {
532 		case 'A':  case 'B':  case 'C':  case 'D':
533 		case 'E':  case 'F':  case 'G':  case 'H':
534 		case 'I':  case 'J':  case 'K':  case 'L':
535 		case 'M':  case 'N':  case 'O':  case 'P':
536 		case 'Q':  case 'R':  case 'S':  case 'T':
537 		case 'U':  case 'V':  case 'W':  case 'X':
538 		case 'Y':  case 'Z':
539 		{
540 			matchRange('A','Z');
541 			break;
542 		}
543 		case 'a':  case 'b':  case 'c':  case 'd':
544 		case 'e':  case 'f':  case 'g':  case 'h':
545 		case 'i':  case 'j':  case 'k':  case 'l':
546 		case 'm':  case 'n':  case 'o':  case 'p':
547 		case 'q':  case 'r':  case 's':  case 't':
548 		case 'u':  case 'v':  case 'w':  case 'x':
549 		case 'y':  case 'z':
550 		{
551 			matchRange('a','z');
552 			break;
553 		}
554 		default:
555 		{
556 			throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());
557 		}
558 		}
559 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
560 			_token = makeToken(_ttype);
561 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
562 		}
563 		_returnToken = _token;
564 	}
565 	
566 	protected final void mDIGIT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
567 		int _ttype; Token _token=null; int _begin=text.length();
568 		_ttype = DIGIT;
569 		int _saveIndex;
570 		
571 		switch ( LA(1)) {
572 		case '0':
573 		{
574 			match('0');
575 			break;
576 		}
577 		case '1':  case '2':  case '3':  case '4':
578 		case '5':  case '6':  case '7':  case '8':
579 		case '9':
580 		{
581 			mLDIGIT(false);
582 			break;
583 		}
584 		default:
585 		{
586 			throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());
587 		}
588 		}
589 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
590 			_token = makeToken(_ttype);
591 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
592 		}
593 		_returnToken = _token;
594 	}
595 	
596 	public final void mINTEGER_OR_NUMERICOID(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
597 		int _ttype; Token _token=null; int _begin=text.length();
598 		_ttype = INTEGER_OR_NUMERICOID;
599 		int _saveIndex;
600 		
601 		boolean synPredMatched108 = false;
602 		if ((((LA(1) >= '0' && LA(1) <= '9')) && (_tokenSet_1.member(LA(2))) && (_tokenSet_1.member(LA(3))) && (true) && (true))) {
603 			int _m108 = mark();
604 			synPredMatched108 = true;
605 			inputState.guessing++;
606 			try {
607 				{
608 				mINTEGER(false);
609 				mDOT(false);
610 				}
611 			}
612 			catch (RecognitionException pe) {
613 				synPredMatched108 = false;
614 			}
615 			rewind(_m108);
616 inputState.guessing--;
617 		}
618 		if ( synPredMatched108 ) {
619 			mNUMERICOID(false);
620 			if ( inputState.guessing==0 ) {
621 				
622 				_ttype =  NUMERICOID;
623 				
624 			}
625 		}
626 		else if (((LA(1) >= '0' && LA(1) <= '9')) && (true) && (true) && (true) && (true)) {
627 			mINTEGER(false);
628 			if ( inputState.guessing==0 ) {
629 				
630 				_ttype =  INTEGER;
631 				
632 			}
633 		}
634 		else {
635 			throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());
636 		}
637 		
638 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
639 			_token = makeToken(_ttype);
640 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
641 		}
642 		_returnToken = _token;
643 	}
644 	
645 	protected final void mINTEGER(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
646 		int _ttype; Token _token=null; int _begin=text.length();
647 		_ttype = INTEGER;
648 		int _saveIndex;
649 		
650 		if (((LA(1) >= '1' && LA(1) <= '9')) && ((LA(2) >= '0' && LA(2) <= '9'))) {
651 			{
652 			mLDIGIT(false);
653 			{
654 			int _cnt112=0;
655 			_loop112:
656 			do {
657 				if (((LA(1) >= '0' && LA(1) <= '9'))) {
658 					mDIGIT(false);
659 				}
660 				else {
661 					if ( _cnt112>=1 ) { break _loop112; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
662 				}
663 				
664 				_cnt112++;
665 			} while (true);
666 			}
667 			}
668 			if ( inputState.guessing==0 ) {
669 				
670 				if ( LOG.isDebugEnabled() )
671 				{
672 				LOG.debug( "matched INTEGER: {}", getText() ); 
673 				}
674 				
675 			}
676 		}
677 		else if (((LA(1) >= '0' && LA(1) <= '9')) && (true)) {
678 			mDIGIT(false);
679 		}
680 		else {
681 			throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());
682 		}
683 		
684 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
685 			_token = makeToken(_ttype);
686 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
687 		}
688 		_returnToken = _token;
689 	}
690 	
691 	protected final void mDOT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
692 		int _ttype; Token _token=null; int _begin=text.length();
693 		_ttype = DOT;
694 		int _saveIndex;
695 		
696 		match('.');
697 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
698 			_token = makeToken(_ttype);
699 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
700 		}
701 		_returnToken = _token;
702 	}
703 	
704 	protected final void mNUMERICOID(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
705 		int _ttype; Token _token=null; int _begin=text.length();
706 		_ttype = NUMERICOID;
707 		int _saveIndex;
708 		
709 		mINTEGER(false);
710 		{
711 		int _cnt115=0;
712 		_loop115:
713 		do {
714 			if ((LA(1)=='.')) {
715 				mDOT(false);
716 				mINTEGER(false);
717 			}
718 			else {
719 				if ( _cnt115>=1 ) { break _loop115; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
720 			}
721 			
722 			_cnt115++;
723 		} while (true);
724 		}
725 		if ( inputState.guessing==0 ) {
726 			
727 			if ( LOG.isDebugEnabled() )
728 			{
729 			LOG.debug( "matched NUMERICOID: {}", getText() );
730 			}
731 			
732 		}
733 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
734 			_token = makeToken(_ttype);
735 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
736 		}
737 		_returnToken = _token;
738 	}
739 	
740 	protected final void mLDIGIT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
741 		int _ttype; Token _token=null; int _begin=text.length();
742 		_ttype = LDIGIT;
743 		int _saveIndex;
744 		
745 		matchRange('1','9');
746 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
747 			_token = makeToken(_ttype);
748 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
749 		}
750 		_returnToken = _token;
751 	}
752 	
753 	public final void mFILTER(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
754 		int _ttype; Token _token=null; int _begin=text.length();
755 		_ttype = FILTER;
756 		int _saveIndex;
757 		
758 		match('(');
759 		{
760 		switch ( LA(1)) {
761 		case '&':
762 		{
763 			{
764 			match('&');
765 			{
766 			_loop125:
767 			do {
768 				if ((LA(1)==' ')) {
769 					mSP(false);
770 				}
771 				else {
772 					break _loop125;
773 				}
774 				
775 			} while (true);
776 			}
777 			{
778 			int _cnt127=0;
779 			_loop127:
780 			do {
781 				if ((LA(1)=='(')) {
782 					mFILTER(false);
783 				}
784 				else {
785 					if ( _cnt127>=1 ) { break _loop127; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
786 				}
787 				
788 				_cnt127++;
789 			} while (true);
790 			}
791 			}
792 			break;
793 		}
794 		case '|':
795 		{
796 			{
797 			match('|');
798 			{
799 			_loop130:
800 			do {
801 				if ((LA(1)==' ')) {
802 					mSP(false);
803 				}
804 				else {
805 					break _loop130;
806 				}
807 				
808 			} while (true);
809 			}
810 			{
811 			int _cnt132=0;
812 			_loop132:
813 			do {
814 				if ((LA(1)=='(')) {
815 					mFILTER(false);
816 				}
817 				else {
818 					if ( _cnt132>=1 ) { break _loop132; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
819 				}
820 				
821 				_cnt132++;
822 			} while (true);
823 			}
824 			}
825 			break;
826 		}
827 		case '!':
828 		{
829 			{
830 			match('!');
831 			{
832 			_loop135:
833 			do {
834 				if ((LA(1)==' ')) {
835 					mSP(false);
836 				}
837 				else {
838 					break _loop135;
839 				}
840 				
841 			} while (true);
842 			}
843 			mFILTER(false);
844 			}
845 			break;
846 		}
847 		default:
848 			if ((_tokenSet_2.member(LA(1)))) {
849 				mFILTER_VALUE(false);
850 			}
851 		else {
852 			throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());
853 		}
854 		}
855 		}
856 		match(')');
857 		{
858 		_loop137:
859 		do {
860 			if ((LA(1)==' ')) {
861 				mSP(false);
862 			}
863 			else {
864 				break _loop137;
865 			}
866 			
867 		} while (true);
868 		}
869 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
870 			_token = makeToken(_ttype);
871 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
872 		}
873 		_returnToken = _token;
874 	}
875 	
876 	protected final void mFILTER_VALUE(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException {
877 		int _ttype; Token _token=null; int _begin=text.length();
878 		_ttype = FILTER_VALUE;
879 		int _saveIndex;
880 		
881 		{
882 		{
883 		match(_tokenSet_2);
884 		}
885 		{
886 		_loop143:
887 		do {
888 			if ((_tokenSet_3.member(LA(1)))) {
889 				{
890 				match(_tokenSet_3);
891 				}
892 			}
893 			else {
894 				break _loop143;
895 			}
896 			
897 		} while (true);
898 		}
899 		}
900 		if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
901 			_token = makeToken(_ttype);
902 			_token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));
903 		}
904 		_returnToken = _token;
905 	}
906 	
907 	
908 	private static final long[] mk_tokenSet_0() {
909 		long[] data = new long[3988];
910 		data[0]=-17179869186L;
911 		data[1]=-1L;
912 		data[3]=-36028797027352577L;
913 		for (int i = 4; i<=127; i++) { data[i]=-1L; }
914 		for (int i = 193; i<=197; i++) { data[i]=-1L; }
915 		data[198]=65535L;
916 		for (int i = 204; i<=205; i++) { data[i]=-1L; }
917 		for (int i = 208; i<=243; i++) { data[i]=-1L; }
918 		data[244]=70368744177663L;
919 		for (int i = 312; i<=639; i++) { data[i]=-1L; }
920 		for (int i = 996; i<=1003; i++) { data[i]=-1L; }
921 		return data;
922 	}
923 	public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0());
924 	private static final long[] mk_tokenSet_1() {
925 		long[] data = new long[1025];
926 		data[0]=288019269919178752L;
927 		return data;
928 	}
929 	public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1());
930 	private static final long[] mk_tokenSet_2() {
931 		long[] data = new long[2048];
932 		data[0]=-3582002724866L;
933 		data[1]=-1152921504606846977L;
934 		for (int i = 2; i<=127; i++) { data[i]=-1L; }
935 		for (int i = 193; i<=197; i++) { data[i]=-1L; }
936 		data[198]=65535L;
937 		for (int i = 204; i<=205; i++) { data[i]=-1L; }
938 		for (int i = 208; i<=243; i++) { data[i]=-1L; }
939 		data[244]=70368744177663L;
940 		for (int i = 312; i<=639; i++) { data[i]=-1L; }
941 		for (int i = 996; i<=1003; i++) { data[i]=-1L; }
942 		return data;
943 	}
944 	public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2());
945 	private static final long[] mk_tokenSet_3() {
946 		long[] data = new long[2048];
947 		data[0]=-2199023255554L;
948 		for (int i = 1; i<=127; i++) { data[i]=-1L; }
949 		for (int i = 193; i<=197; i++) { data[i]=-1L; }
950 		data[198]=65535L;
951 		for (int i = 204; i<=205; i++) { data[i]=-1L; }
952 		for (int i = 208; i<=243; i++) { data[i]=-1L; }
953 		data[244]=70368744177663L;
954 		for (int i = 312; i<=639; i++) { data[i]=-1L; }
955 		for (int i = 996; i<=1003; i++) { data[i]=-1L; }
956 		return data;
957 	}
958 	public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3());
959 	
960 	}