001// $ANTLR 2.7.7 (20060906): "SubtreeSpecificationChecker.g" -> "AntlrSubtreeSpecificationChecker.java"$
002
003/*
004 *  Licensed to the Apache Software Foundation (ASF) under one
005 *  or more contributor license agreements.  See the NOTICE file
006 *  distributed with this work for additional information
007 *  regarding copyright ownership.  The ASF licenses this file
008 *  to you under the Apache License, Version 2.0 (the
009 *  "License"); you may not use this file except in compliance
010 *  with the License.  You may obtain a copy of the License at
011 *  
012 *    http://www.apache.org/licenses/LICENSE-2.0
013 *  
014 *  Unless required by applicable law or agreed to in writing,
015 *  software distributed under the License is distributed on an
016 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 *  KIND, either express or implied.  See the License for the
018 *  specific language governing permissions and limitations
019 *  under the License. 
020 *  
021 */
022
023
024package org.apache.directory.api.ldap.model.subtree;
025
026import org.apache.directory.api.i18n.I18n;
027import org.apache.directory.api.ldap.model.name.Dn;
028import org.apache.directory.api.ldap.model.filter.ExprNode;
029import org.apache.directory.api.ldap.model.filter.LeafNode;
030import org.apache.directory.api.ldap.model.filter.BranchNode;
031import org.apache.directory.api.ldap.model.filter.AndNode;
032import org.apache.directory.api.ldap.model.filter.OrNode;
033import org.apache.directory.api.ldap.model.filter.NotNode;
034import org.apache.directory.api.ldap.model.filter.EqualityNode;
035import org.apache.directory.api.ldap.model.filter.FilterParser;
036import org.apache.directory.api.util.ComponentsMonitor;
037import org.apache.directory.api.util.OptionalComponentsMonitor;
038import org.apache.directory.api.ldap.model.schema.SchemaManager;
039
040import org.slf4j.Logger;
041import org.slf4j.LoggerFactory;
042
043import antlr.TokenBuffer;
044import antlr.TokenStreamException;
045import antlr.TokenStreamIOException;
046import antlr.ANTLRException;
047import antlr.LLkParser;
048import antlr.Token;
049import antlr.TokenStream;
050import antlr.RecognitionException;
051import antlr.NoViableAltException;
052import antlr.MismatchedTokenException;
053import antlr.SemanticException;
054import antlr.ParserSharedInputState;
055import antlr.collections.impl.BitSet;
056
057/**
058 * The antlr generated subtree specification parser.
059 *
060 * @see <a href="http://www.faqs.org/rfcs/rfc3672.html">RFC 3672</a>
061 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
062 */
063public class AntlrSubtreeSpecificationChecker extends antlr.LLkParser       implements AntlrSubtreeSpecificationCheckerTokenTypes
064 {
065
066    private static final Logger LOG = LoggerFactory.getLogger( AntlrSubtreeSpecificationCheckerLexer.class );
067    
068    private ComponentsMonitor subtreeSpecificationComponentsMonitor = null;
069    
070    /** The SchemaManager */
071    private SchemaManager schemaManager;
072
073    /**
074     * Initialize the checker
075     *
076     * @param schemaManager the SchemaManager instance
077     */
078    public void init( SchemaManager schemaManager )
079    {
080        this.schemaManager = schemaManager;
081    }
082    
083
084    private int token2Integer( Token token ) throws RecognitionException
085    {
086        int i = 0;
087        
088        try
089        {
090            i = Integer.parseInt( token.getText());
091        }
092        catch ( NumberFormatException e )
093        {
094            throw new RecognitionException( I18n.err( I18n.ERR_13900_INTEGER_TOKEN_NOT_INTEGER, token.getText() ) );
095        }
096        
097        return i;
098    }
099
100protected AntlrSubtreeSpecificationChecker(TokenBuffer tokenBuf, int k) {
101  super(tokenBuf,k);
102  tokenNames = _tokenNames;
103}
104
105public AntlrSubtreeSpecificationChecker(TokenBuffer tokenBuf) {
106  this(tokenBuf,1);
107}
108
109protected AntlrSubtreeSpecificationChecker(TokenStream lexer, int k) {
110  super(lexer,k);
111  tokenNames = _tokenNames;
112}
113
114public AntlrSubtreeSpecificationChecker(TokenStream lexer) {
115  this(lexer,1);
116}
117
118public AntlrSubtreeSpecificationChecker(ParserSharedInputState state) {
119  super(state,1);
120  tokenNames = _tokenNames;
121}
122
123        public final void wrapperEntryPoint() throws RecognitionException, TokenStreamException {
124                
125                
126                LOG.debug( "entered wrapperEntryPoint()" );
127                
128                
129                subtreeSpecification();
130                match(LITERAL_end);
131        }
132        
133        public final void subtreeSpecification() throws RecognitionException, TokenStreamException {
134                
135                
136                LOG.debug( "entered subtreeSpecification()" );
137                subtreeSpecificationComponentsMonitor = new OptionalComponentsMonitor( 
138                new String [] { "base", "specificExclusions", "minimum", "maximum", "specificationFilter" } );
139                
140                
141                match(OPEN_CURLY);
142                {
143                _loop4:
144                do {
145                        if ((LA(1)==SP)) {
146                                match(SP);
147                        }
148                        else {
149                                break _loop4;
150                        }
151                        
152                } while (true);
153                }
154                {
155                switch ( LA(1)) {
156                case ID_base:
157                case ID_specificExclusions:
158                case ID_minimum:
159                case ID_maximum:
160                case ID_specificationFilter:
161                {
162                        subtreeSpecificationComponent();
163                        {
164                        _loop7:
165                        do {
166                                if ((LA(1)==SP)) {
167                                        match(SP);
168                                }
169                                else {
170                                        break _loop7;
171                                }
172                                
173                        } while (true);
174                        }
175                        {
176                        _loop13:
177                        do {
178                                if ((LA(1)==SEP)) {
179                                        match(SEP);
180                                        {
181                                        _loop10:
182                                        do {
183                                                if ((LA(1)==SP)) {
184                                                        match(SP);
185                                                }
186                                                else {
187                                                        break _loop10;
188                                                }
189                                                
190                                        } while (true);
191                                        }
192                                        subtreeSpecificationComponent();
193                                        {
194                                        _loop12:
195                                        do {
196                                                if ((LA(1)==SP)) {
197                                                        match(SP);
198                                                }
199                                                else {
200                                                        break _loop12;
201                                                }
202                                                
203                                        } while (true);
204                                        }
205                                }
206                                else {
207                                        break _loop13;
208                                }
209                                
210                        } while (true);
211                        }
212                        break;
213                }
214                case CLOSE_CURLY:
215                {
216                        break;
217                }
218                default:
219                {
220                        throw new NoViableAltException(LT(1), getFilename());
221                }
222                }
223                }
224                match(CLOSE_CURLY);
225        }
226        
227        public final void subtreeSpecificationComponent() throws RecognitionException, TokenStreamException {
228                
229                
230                LOG.debug( "entered subtreeSpecification()" );
231                
232                
233                try {      // for error handling
234                        switch ( LA(1)) {
235                        case ID_base:
236                        {
237                                ss_base();
238                                
239                                subtreeSpecificationComponentsMonitor.useComponent( "base" );
240                                
241                                break;
242                        }
243                        case ID_specificExclusions:
244                        {
245                                ss_specificExclusions();
246                                
247                                subtreeSpecificationComponentsMonitor.useComponent( "specificExclusions" );
248                                
249                                break;
250                        }
251                        case ID_minimum:
252                        {
253                                ss_minimum();
254                                
255                                subtreeSpecificationComponentsMonitor.useComponent( "minimum" );
256                                
257                                break;
258                        }
259                        case ID_maximum:
260                        {
261                                ss_maximum();
262                                
263                                subtreeSpecificationComponentsMonitor.useComponent( "maximum" );
264                                
265                                break;
266                        }
267                        case ID_specificationFilter:
268                        {
269                                ss_specificationFilter();
270                                
271                                subtreeSpecificationComponentsMonitor.useComponent( "specificationFilter" );
272                                
273                                break;
274                        }
275                        default:
276                        {
277                                throw new NoViableAltException(LT(1), getFilename());
278                        }
279                        }
280                }
281                catch (IllegalArgumentException e) {
282                        
283                        throw new RecognitionException( I18n.err( I18n.ERR_13901_MESSAGE, e.getMessage() ) );
284                        
285                }
286        }
287        
288        public final void ss_base() throws RecognitionException, TokenStreamException {
289                
290                
291                LOG.debug( "entered ss_base()" );
292                
293                
294                match(ID_base);
295                {
296                int _cnt17=0;
297                _loop17:
298                do {
299                        if ((LA(1)==SP)) {
300                                match(SP);
301                        }
302                        else {
303                                if ( _cnt17>=1 ) { break _loop17; } else {throw new NoViableAltException(LT(1), getFilename());}
304                        }
305                        
306                        _cnt17++;
307                } while (true);
308                }
309                distinguishedName();
310        }
311        
312        public final void ss_specificExclusions() throws RecognitionException, TokenStreamException {
313                
314                
315                LOG.debug( "entered ss_specificExclusions()" );
316                
317                
318                match(ID_specificExclusions);
319                {
320                int _cnt20=0;
321                _loop20:
322                do {
323                        if ((LA(1)==SP)) {
324                                match(SP);
325                        }
326                        else {
327                                if ( _cnt20>=1 ) { break _loop20; } else {throw new NoViableAltException(LT(1), getFilename());}
328                        }
329                        
330                        _cnt20++;
331                } while (true);
332                }
333                specificExclusions();
334        }
335        
336        public final void ss_minimum() throws RecognitionException, TokenStreamException {
337                
338                
339                LOG.debug( "entered ss_minimum()" );
340                
341                
342                match(ID_minimum);
343                {
344                int _cnt46=0;
345                _loop46:
346                do {
347                        if ((LA(1)==SP)) {
348                                match(SP);
349                        }
350                        else {
351                                if ( _cnt46>=1 ) { break _loop46; } else {throw new NoViableAltException(LT(1), getFilename());}
352                        }
353                        
354                        _cnt46++;
355                } while (true);
356                }
357                baseDistance();
358        }
359        
360        public final void ss_maximum() throws RecognitionException, TokenStreamException {
361                
362                
363                LOG.debug( "entered ss_maximum()" );
364                
365                
366                match(ID_maximum);
367                {
368                int _cnt49=0;
369                _loop49:
370                do {
371                        if ((LA(1)==SP)) {
372                                match(SP);
373                        }
374                        else {
375                                if ( _cnt49>=1 ) { break _loop49; } else {throw new NoViableAltException(LT(1), getFilename());}
376                        }
377                        
378                        _cnt49++;
379                } while (true);
380                }
381                baseDistance();
382        }
383        
384        public final void ss_specificationFilter() throws RecognitionException, TokenStreamException {
385                
386                
387                LOG.debug( "entered ss_specificationFilter()" );
388                
389                
390                match(ID_specificationFilter);
391                {
392                int _cnt52=0;
393                _loop52:
394                do {
395                        if ((LA(1)==SP)) {
396                                match(SP);
397                        }
398                        else {
399                                if ( _cnt52>=1 ) { break _loop52; } else {throw new NoViableAltException(LT(1), getFilename());}
400                        }
401                        
402                        _cnt52++;
403                } while (true);
404                }
405                {
406                switch ( LA(1)) {
407                case ID_item:
408                case ID_and:
409                case ID_or:
410                case ID_not:
411                {
412                        {
413                        refinement();
414                        }
415                        break;
416                }
417                case FILTER:
418                {
419                        {
420                        filter();
421                        }
422                        break;
423                }
424                default:
425                {
426                        throw new NoViableAltException(LT(1), getFilename());
427                }
428                }
429                }
430        }
431        
432        public final void distinguishedName() throws RecognitionException, TokenStreamException {
433                
434                Token  token = null;
435                
436                LOG.debug( "entered distinguishedName()" );
437                
438                
439                try {      // for error handling
440                        token = LT(1);
441                        match(SAFEUTF8STRING);
442                        
443                        new Dn( token.getText() );
444                        LOG.debug( "recognized a DistinguishedName: " + token.getText() );
445                        
446                }
447                catch (Exception e) {
448                        
449                        throw new RecognitionException( I18n.err( I18n.ERR_13903_DN_PARSER_FAILED, token.getText(), e.getMessage() ) );
450                        
451                }
452        }
453        
454        public final void specificExclusions() throws RecognitionException, TokenStreamException {
455                
456                
457                LOG.debug( "entered specificExclusions()" );
458                
459                
460                match(OPEN_CURLY);
461                {
462                _loop23:
463                do {
464                        if ((LA(1)==SP)) {
465                                match(SP);
466                        }
467                        else {
468                                break _loop23;
469                        }
470                        
471                } while (true);
472                }
473                {
474                switch ( LA(1)) {
475                case ID_chopBefore:
476                case ID_chopAfter:
477                {
478                        specificExclusion();
479                        {
480                        _loop26:
481                        do {
482                                if ((LA(1)==SP)) {
483                                        match(SP);
484                                }
485                                else {
486                                        break _loop26;
487                                }
488                                
489                        } while (true);
490                        }
491                        {
492                        _loop32:
493                        do {
494                                if ((LA(1)==SEP)) {
495                                        match(SEP);
496                                        {
497                                        _loop29:
498                                        do {
499                                                if ((LA(1)==SP)) {
500                                                        match(SP);
501                                                }
502                                                else {
503                                                        break _loop29;
504                                                }
505                                                
506                                        } while (true);
507                                        }
508                                        specificExclusion();
509                                        {
510                                        _loop31:
511                                        do {
512                                                if ((LA(1)==SP)) {
513                                                        match(SP);
514                                                }
515                                                else {
516                                                        break _loop31;
517                                                }
518                                                
519                                        } while (true);
520                                        }
521                                }
522                                else {
523                                        break _loop32;
524                                }
525                                
526                        } while (true);
527                        }
528                        break;
529                }
530                case CLOSE_CURLY:
531                {
532                        break;
533                }
534                default:
535                {
536                        throw new NoViableAltException(LT(1), getFilename());
537                }
538                }
539                }
540                match(CLOSE_CURLY);
541        }
542        
543        public final void specificExclusion() throws RecognitionException, TokenStreamException {
544                
545                
546                LOG.debug( "entered specificExclusion()" );
547                
548                
549                switch ( LA(1)) {
550                case ID_chopBefore:
551                {
552                        chopBefore();
553                        break;
554                }
555                case ID_chopAfter:
556                {
557                        chopAfter();
558                        break;
559                }
560                default:
561                {
562                        throw new NoViableAltException(LT(1), getFilename());
563                }
564                }
565        }
566        
567        public final void chopBefore() throws RecognitionException, TokenStreamException {
568                
569                
570                LOG.debug( "entered chopBefore()" );
571                
572                
573                match(ID_chopBefore);
574                {
575                _loop36:
576                do {
577                        if ((LA(1)==SP)) {
578                                match(SP);
579                        }
580                        else {
581                                break _loop36;
582                        }
583                        
584                } while (true);
585                }
586                match(COLON);
587                {
588                _loop38:
589                do {
590                        if ((LA(1)==SP)) {
591                                match(SP);
592                        }
593                        else {
594                                break _loop38;
595                        }
596                        
597                } while (true);
598                }
599                distinguishedName();
600        }
601        
602        public final void chopAfter() throws RecognitionException, TokenStreamException {
603                
604                
605                LOG.debug( "entered chopAfter()" );
606                
607                
608                match(ID_chopAfter);
609                {
610                _loop41:
611                do {
612                        if ((LA(1)==SP)) {
613                                match(SP);
614                        }
615                        else {
616                                break _loop41;
617                        }
618                        
619                } while (true);
620                }
621                match(COLON);
622                {
623                _loop43:
624                do {
625                        if ((LA(1)==SP)) {
626                                match(SP);
627                        }
628                        else {
629                                break _loop43;
630                        }
631                        
632                } while (true);
633                }
634                distinguishedName();
635        }
636        
637        public final void baseDistance() throws RecognitionException, TokenStreamException {
638                
639                Token  token = null;
640                
641                LOG.debug( "entered baseDistance()" );
642                
643                
644                token = LT(1);
645                match(INTEGER);
646                
647                token2Integer(token);
648                
649        }
650        
651        public final void refinement() throws RecognitionException, TokenStreamException {
652                
653                
654                LOG.debug( "entered refinement()" );
655                
656                
657                switch ( LA(1)) {
658                case ID_item:
659                {
660                        item();
661                        break;
662                }
663                case ID_and:
664                {
665                        and();
666                        break;
667                }
668                case ID_or:
669                {
670                        or();
671                        break;
672                }
673                case ID_not:
674                {
675                        not();
676                        break;
677                }
678                default:
679                {
680                        throw new NoViableAltException(LT(1), getFilename());
681                }
682                }
683        }
684        
685        public final void filter() throws RecognitionException, TokenStreamException {
686                
687                Token  filterToken = null;
688                
689                LOG.debug( "entered filter()" );
690                
691                
692                try {      // for error handling
693                        {
694                        filterToken = LT(1);
695                        match(FILTER);
696                        FilterParser.parse( filterToken.getText() );
697                        }
698                }
699                catch (Exception e) {
700                        
701                        throw new RecognitionException( I18n.err( I18n.ERR_13902_FILTER_PARSER_FAILED, e.getMessage() ) );
702                        
703                }
704        }
705        
706        public final void oid() throws RecognitionException, TokenStreamException {
707                
708                
709                LOG.debug( "entered oid()" );
710                Token token = null;
711                
712                
713                token = LT( 1 );
714                {
715                switch ( LA(1)) {
716                case DESCR:
717                {
718                        match(DESCR);
719                        break;
720                }
721                case NUMERICOID:
722                {
723                        match(NUMERICOID);
724                        break;
725                }
726                default:
727                {
728                        throw new NoViableAltException(LT(1), getFilename());
729                }
730                }
731                }
732                
733                LOG.debug( "recognized an oid: " + token.getText() );
734                
735        }
736        
737        public final void item() throws RecognitionException, TokenStreamException {
738                
739                
740                LOG.debug( "entered item()" );
741                
742                
743                match(ID_item);
744                {
745                _loop65:
746                do {
747                        if ((LA(1)==SP)) {
748                                match(SP);
749                        }
750                        else {
751                                break _loop65;
752                        }
753                        
754                } while (true);
755                }
756                match(COLON);
757                {
758                _loop67:
759                do {
760                        if ((LA(1)==SP)) {
761                                match(SP);
762                        }
763                        else {
764                                break _loop67;
765                        }
766                        
767                } while (true);
768                }
769                oid();
770        }
771        
772        public final void and() throws RecognitionException, TokenStreamException {
773                
774                
775                LOG.debug( "entered and()" );
776                
777                
778                match(ID_and);
779                {
780                _loop70:
781                do {
782                        if ((LA(1)==SP)) {
783                                match(SP);
784                        }
785                        else {
786                                break _loop70;
787                        }
788                        
789                } while (true);
790                }
791                match(COLON);
792                {
793                _loop72:
794                do {
795                        if ((LA(1)==SP)) {
796                                match(SP);
797                        }
798                        else {
799                                break _loop72;
800                        }
801                        
802                } while (true);
803                }
804                refinements();
805        }
806        
807        public final void or() throws RecognitionException, TokenStreamException {
808                
809                
810                LOG.debug( "entered or()" );
811                
812                
813                match(ID_or);
814                {
815                _loop75:
816                do {
817                        if ((LA(1)==SP)) {
818                                match(SP);
819                        }
820                        else {
821                                break _loop75;
822                        }
823                        
824                } while (true);
825                }
826                match(COLON);
827                {
828                _loop77:
829                do {
830                        if ((LA(1)==SP)) {
831                                match(SP);
832                        }
833                        else {
834                                break _loop77;
835                        }
836                        
837                } while (true);
838                }
839                refinements();
840        }
841        
842        public final void not() throws RecognitionException, TokenStreamException {
843                
844                
845                LOG.debug( "entered not()" );
846                
847                
848                match(ID_not);
849                {
850                _loop80:
851                do {
852                        if ((LA(1)==SP)) {
853                                match(SP);
854                        }
855                        else {
856                                break _loop80;
857                        }
858                        
859                } while (true);
860                }
861                match(COLON);
862                {
863                _loop82:
864                do {
865                        if ((LA(1)==SP)) {
866                                match(SP);
867                        }
868                        else {
869                                break _loop82;
870                        }
871                        
872                } while (true);
873                }
874                refinement();
875        }
876        
877        public final void refinements() throws RecognitionException, TokenStreamException {
878                
879                
880                LOG.debug( "entered refinements()" );
881                
882                
883                match(OPEN_CURLY);
884                {
885                _loop85:
886                do {
887                        if ((LA(1)==SP)) {
888                                match(SP);
889                        }
890                        else {
891                                break _loop85;
892                        }
893                        
894                } while (true);
895                }
896                {
897                switch ( LA(1)) {
898                case ID_item:
899                case ID_and:
900                case ID_or:
901                case ID_not:
902                {
903                        refinement();
904                        {
905                        _loop88:
906                        do {
907                                if ((LA(1)==SP)) {
908                                        match(SP);
909                                }
910                                else {
911                                        break _loop88;
912                                }
913                                
914                        } while (true);
915                        }
916                        {
917                        _loop94:
918                        do {
919                                if ((LA(1)==SEP)) {
920                                        match(SEP);
921                                        {
922                                        _loop91:
923                                        do {
924                                                if ((LA(1)==SP)) {
925                                                        match(SP);
926                                                }
927                                                else {
928                                                        break _loop91;
929                                                }
930                                                
931                                        } while (true);
932                                        }
933                                        refinement();
934                                        {
935                                        _loop93:
936                                        do {
937                                                if ((LA(1)==SP)) {
938                                                        match(SP);
939                                                }
940                                                else {
941                                                        break _loop93;
942                                                }
943                                                
944                                        } while (true);
945                                        }
946                                }
947                                else {
948                                        break _loop94;
949                                }
950                                
951                        } while (true);
952                        }
953                        break;
954                }
955                case CLOSE_CURLY:
956                {
957                        break;
958                }
959                default:
960                {
961                        throw new NoViableAltException(LT(1), getFilename());
962                }
963                }
964                }
965                match(CLOSE_CURLY);
966        }
967        
968        
969        public static final String[] _tokenNames = {
970                "<0>",
971                "EOF",
972                "<2>",
973                "NULL_TREE_LOOKAHEAD",
974                "\"end\"",
975                "OPEN_CURLY",
976                "SP",
977                "SEP",
978                "CLOSE_CURLY",
979                "\"base\"",
980                "\"specificExclusions\"",
981                "\"chopBefore\"",
982                "COLON",
983                "\"chopAfter\"",
984                "\"minimum\"",
985                "\"maximum\"",
986                "\"specificationFilter\"",
987                "FILTER",
988                "SAFEUTF8STRING",
989                "INTEGER",
990                "DESCR",
991                "NUMERICOID",
992                "\"item\"",
993                "\"and\"",
994                "\"or\"",
995                "\"not\"",
996                "INTEGER_OR_NUMERICOID",
997                "DOT",
998                "DIGIT",
999                "LDIGIT",
1000                "ALPHA",
1001                "SAFEUTF8CHAR",
1002                "FILTER_VALUE"
1003        };
1004        
1005        
1006        }