001/**
002 * Copyright (C) 2007 - 2016, Jens Lehmann
003 *
004 * This file is part of DL-Learner.
005 *
006 * DL-Learner is free software; you can redistribute it and/or modify
007 * it under the terms of the GNU General Public License as published by
008 * the Free Software Foundation; either version 3 of the License, or
009 * (at your option) any later version.
010 *
011 * DL-Learner is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014 * GNU General Public License for more details.
015 *
016 * You should have received a copy of the GNU General Public License
017 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
018 */
019/* Generated By:JavaCC: Do not edit this line. KBParser.java */
020package org.dllearner.parser;
021
022import java.io.File;
023import java.io.FileInputStream;
024import java.io.FileNotFoundException;
025import java.io.IOException;
026import java.io.StringReader;
027import java.net.URL;
028
029import org.semanticweb.owlapi.apibinding.OWLManager;
030import org.semanticweb.owlapi.model.IRI;
031import org.semanticweb.owlapi.model.OWLAxiom;
032import org.semanticweb.owlapi.model.OWLClass;
033import org.semanticweb.owlapi.model.OWLClassAssertionAxiom;
034import org.semanticweb.owlapi.model.OWLClassExpression;
035import org.semanticweb.owlapi.model.OWLDataFactory;
036import org.semanticweb.owlapi.model.OWLDataProperty;
037import org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom;
038import org.semanticweb.owlapi.model.OWLDataPropertyRangeAxiom;
039import org.semanticweb.owlapi.model.OWLDataRange;
040import org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom;
041import org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom;
042import org.semanticweb.owlapi.model.OWLIndividual;
043import org.semanticweb.owlapi.model.OWLInverseObjectPropertiesAxiom;
044import org.semanticweb.owlapi.model.OWLObjectProperty;
045import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom;
046import org.semanticweb.owlapi.model.OWLObjectPropertyDomainAxiom;
047import org.semanticweb.owlapi.model.OWLObjectPropertyRangeAxiom;
048import org.semanticweb.owlapi.model.OWLOntology;
049import org.semanticweb.owlapi.model.OWLOntologyCreationException;
050import org.semanticweb.owlapi.model.OWLOntologyManager;
051import org.semanticweb.owlapi.model.OWLSubClassOfAxiom;
052import org.semanticweb.owlapi.model.OWLSubObjectPropertyOfAxiom;
053import org.semanticweb.owlapi.model.OWLSymmetricObjectPropertyAxiom;
054import org.semanticweb.owlapi.model.OWLTransitiveObjectPropertyAxiom;
055
056import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl;
057
058@SuppressWarnings("all")
059public class KBParser implements KBParserConstants {
060
061        public static String internalNamespace = "http://localhost/foo#";
062        private static final OWLDataFactory df = new OWLDataFactoryImpl();
063
064        // method to give all internal stuff an URI (not necessary for DLs, but for OWL ontologies
065        // and it should be possible to represent the internal KB as OWL ontology)
066        public static String getInternalURI(String name) {
067                if(name.startsWith("http://"))
068                        return name;
069                else
070                        return internalNamespace + name;
071        }
072
073        public static OWLClassExpression parseConcept(String string) throws ParseException {
074                // when just parsing the string as concept, we have no guarantee
075                // that the parser uses all symbols, e.g. a AND b returns just a
076                // because the brackets were forgotten;
077                // so instead we create an equivalent class axiom and return its
078                // right hand side
079                String eq = "tmp = " + string + ".";
080                KBParser parser = new KBParser(new StringReader(eq));
081                OWLEquivalentClassesAxiom eqAxiom = parser.TBoxEquiv();
082                return eqAxiom.getClassExpressionsMinus(df.getOWLClass(IRI.create(internalNamespace + "tmp"))).iterator().next();
083        }
084
085        //TODO beware of this function it is evil (author: Sebastian Hellmann)
086    public static OWLClassExpression parseConcept(String string, String namespace) throws ParseException {
087             internalNamespace = namespace;
088              return parseConcept(string);
089    }
090
091        public static OWLOntology parseKBFile(String content) throws ParseException, OWLOntologyCreationException {
092                KBParser parser = new KBParser(new StringReader(content));
093                return parser.KB();
094        }
095
096        public static OWLOntology parseKBFile(URL url) throws IOException, ParseException, OWLOntologyCreationException {
097                KBParser parser = new KBParser(url.openStream());
098                return parser.KB();
099        }
100
101        public static OWLOntology parseKBFile(File file) throws FileNotFoundException, ParseException, OWLOntologyCreationException {
102                KBParser parser = new KBParser(new FileInputStream(file));
103                return parser.KB();
104        }
105
106  final public OWLOntology KB() throws ParseException, OWLOntologyCreationException {
107        OWLClassAssertionAxiom conceptAssertion;
108        OWLObjectPropertyAssertionAxiom roleAssertion;
109        OWLAxiom rBoxAxiom;
110        OWLEquivalentClassesAxiom equality;
111        OWLSubClassOfAxiom inclusion;
112        OWLOntologyManager man = OWLManager.createOWLOntologyManager();
113                OWLOntology kb = man.createOntology();
114    label_1:
115    while (true) {
116      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
117      case ID:
118      case TOP:
119      case BOTTOM:
120      case EXISTS:
121      case ALL:
122      case NOT:
123      case GE:
124      case LE:
125      case STRING:
126      case 22:
127      case 28:
128      case 29:
129      case 30:
130      case 31:
131      case 32:
132      case 34:
133      case 35:
134      case 36:
135      case 37:
136      case 38:
137      case 39:
138      case 40:
139      case 41:
140      case 42:
141      case 43:
142        ;
143        break;
144      default:
145        jj_la1[0] = jj_gen;
146        break label_1;
147      }
148      if (jj_2_1(2147483647)) {
149        conceptAssertion = ABoxConcept();
150                  man.addAxiom(kb, conceptAssertion);
151      } else if (jj_2_2(2147483647)) {
152        roleAssertion = ABoxRole();
153                                man.addAxiom(kb, roleAssertion);
154      } else {
155        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
156        case 28:
157          rBoxAxiom = Transitive();
158          man.addAxiom(kb, rBoxAxiom);
159          break;
160        case 29:
161          rBoxAxiom = Functional();
162          man.addAxiom(kb, rBoxAxiom);
163          break;
164        case 30:
165          rBoxAxiom = Symmetric();
166          man.addAxiom(kb, rBoxAxiom);
167          break;
168        case 31:
169          rBoxAxiom = Inverse();
170          man.addAxiom(kb, rBoxAxiom);
171          break;
172        case 32:
173          rBoxAxiom = Subrole();
174          man.addAxiom(kb, rBoxAxiom);
175          break;
176        case 34:
177        case 35:
178        case 36:
179          rBoxAxiom = ObjectPropertyDomainAxiom();
180          man.addAxiom(kb, rBoxAxiom);
181          break;
182        case 37:
183        case 38:
184          rBoxAxiom = DatatypePropertyDomainAxiom();
185          man.addAxiom(kb, rBoxAxiom);
186          break;
187        case 39:
188        case 40:
189        case 41:
190          rBoxAxiom = ObjectPropertyRangeAxiom();
191          man.addAxiom(kb, rBoxAxiom);
192          break;
193        case 42:
194        case 43:
195          rBoxAxiom = DatatypePropertyRangeAxiom();
196          man.addAxiom(kb, rBoxAxiom);
197          break;
198        default:
199          jj_la1[1] = jj_gen;
200          if (jj_2_3(2147483647)) {
201            equality = TBoxEquiv();
202            man.addAxiom(kb, equality);
203          } else if (jj_2_4(2147483647)) {
204            inclusion = TBoxSub();
205            man.addAxiom(kb, inclusion);
206          } else {
207            jj_consume_token(-1);
208            throw new ParseException();
209          }
210        }
211      }
212    }
213    jj_consume_token(0);
214    {if (true) return kb;}
215    throw new Error("Missing return statement in function");
216  }
217
218  final public OWLClassAssertionAxiom ABoxConcept() throws ParseException {
219          OWLClassExpression c; OWLIndividual i;
220    c = Concept();
221    jj_consume_token(22);
222    i = Individual();
223    jj_consume_token(23);
224    jj_consume_token(COMMAND_END);
225          {if (true) return df.getOWLClassAssertionAxiom(c, i);}
226    throw new Error("Missing return statement in function");
227  }
228
229  final public OWLObjectPropertyAssertionAxiom ABoxRole() throws ParseException {
230        boolean isNegated=false;
231        OWLObjectProperty ar;
232        OWLIndividual i1,i2;
233    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
234    case NOT:
235      Not();
236                isNegated=true;
237      break;
238    default:
239      jj_la1[2] = jj_gen;
240      ;
241    }
242    ar = ObjectProperty();
243    jj_consume_token(22);
244    i1 = Individual();
245    jj_consume_token(24);
246    i2 = Individual();
247    jj_consume_token(23);
248    jj_consume_token(COMMAND_END);
249                if(isNegated)
250                        {if (true) throw new Error("negated role assertions not supported yet");}
251                else
252                        {if (true) return df.getOWLObjectPropertyAssertionAxiom(ar,i1,i2);}
253    throw new Error("Missing return statement in function");
254  }
255
256  final public OWLTransitiveObjectPropertyAxiom Transitive() throws ParseException {
257                                              OWLObjectProperty ar;
258    jj_consume_token(28);
259    jj_consume_token(22);
260    ar = ObjectProperty();
261    jj_consume_token(23);
262    jj_consume_token(COMMAND_END);
263     {if (true) return df.getOWLTransitiveObjectPropertyAxiom(ar);}
264    throw new Error("Missing return statement in function");
265  }
266
267  final public OWLFunctionalObjectPropertyAxiom Functional() throws ParseException {
268                                              OWLObjectProperty ar;
269    jj_consume_token(29);
270    jj_consume_token(22);
271    ar = ObjectProperty();
272    jj_consume_token(23);
273    jj_consume_token(COMMAND_END);
274     {if (true) return df.getOWLFunctionalObjectPropertyAxiom(ar);}
275    throw new Error("Missing return statement in function");
276  }
277
278  final public OWLSymmetricObjectPropertyAxiom Symmetric() throws ParseException {
279                                            OWLObjectProperty ar;
280    jj_consume_token(30);
281    jj_consume_token(22);
282    ar = ObjectProperty();
283    jj_consume_token(23);
284    jj_consume_token(COMMAND_END);
285     {if (true) return df.getOWLSymmetricObjectPropertyAxiom(ar);}
286    throw new Error("Missing return statement in function");
287  }
288
289  final public OWLInverseObjectPropertiesAxiom Inverse() throws ParseException {
290                                        OWLObjectProperty ar1,ar2;
291    jj_consume_token(31);
292    jj_consume_token(22);
293    ar1 = ObjectProperty();
294    jj_consume_token(24);
295    ar2 = ObjectProperty();
296    jj_consume_token(23);
297    jj_consume_token(COMMAND_END);
298     {if (true) return df.getOWLInverseObjectPropertiesAxiom(ar1,ar2);}
299    throw new Error("Missing return statement in function");
300  }
301
302  final public OWLSubObjectPropertyOfAxiom Subrole() throws ParseException {
303                                    OWLObjectProperty ar1,ar2;
304    jj_consume_token(32);
305    jj_consume_token(22);
306    ar1 = ObjectProperty();
307    jj_consume_token(24);
308    ar2 = ObjectProperty();
309    jj_consume_token(23);
310    jj_consume_token(COMMAND_END);
311     {if (true) return df.getOWLSubObjectPropertyOfAxiom(ar1,ar2);}
312    throw new Error("Missing return statement in function");
313  }
314
315  final public OWLEquivalentClassesAxiom TBoxEquiv() throws ParseException {
316                                      OWLClassExpression c1,c2;
317    c1 = Concept();
318    jj_consume_token(25);
319    c2 = Concept();
320    jj_consume_token(COMMAND_END);
321     {if (true) return df.getOWLEquivalentClassesAxiom(c1,c2);}
322    throw new Error("Missing return statement in function");
323  }
324
325  final public OWLSubClassOfAxiom TBoxSub() throws ParseException {
326                           OWLClassExpression c1,c2;
327    c1 = Concept();
328    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
329    case 26:
330      jj_consume_token(26);
331      break;
332    case 27:
333      jj_consume_token(27);
334      break;
335    case 33:
336      jj_consume_token(33);
337      break;
338    default:
339      jj_la1[3] = jj_gen;
340      jj_consume_token(-1);
341      throw new ParseException();
342    }
343    c2 = Concept();
344    jj_consume_token(COMMAND_END);
345     {if (true) return df.getOWLSubClassOfAxiom(c1,c2);}
346    throw new Error("Missing return statement in function");
347  }
348
349  final public OWLObjectPropertyDomainAxiom ObjectPropertyDomainAxiom() throws ParseException {
350                                                         OWLObjectProperty op; OWLClassExpression domain;
351    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
352    case 34:
353      jj_consume_token(34);
354      break;
355    case 35:
356      jj_consume_token(35);
357      break;
358    case 36:
359      jj_consume_token(36);
360      break;
361    default:
362      jj_la1[4] = jj_gen;
363      jj_consume_token(-1);
364      throw new ParseException();
365    }
366    jj_consume_token(22);
367    op = ObjectProperty();
368    jj_consume_token(23);
369    jj_consume_token(25);
370    domain = Concept();
371    jj_consume_token(COMMAND_END);
372          {if (true) return df.getOWLObjectPropertyDomainAxiom(op, domain);}
373    throw new Error("Missing return statement in function");
374  }
375
376  final public OWLDataPropertyDomainAxiom DatatypePropertyDomainAxiom() throws ParseException {
377                                                             OWLDataProperty op; OWLClassExpression domain;
378    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
379    case 37:
380      jj_consume_token(37);
381      break;
382    case 38:
383      jj_consume_token(38);
384      break;
385    default:
386      jj_la1[5] = jj_gen;
387      jj_consume_token(-1);
388      throw new ParseException();
389    }
390    jj_consume_token(22);
391    op = DatatypeProperty();
392    jj_consume_token(23);
393    jj_consume_token(25);
394    domain = Concept();
395    jj_consume_token(COMMAND_END);
396          {if (true) return df.getOWLDataPropertyDomainAxiom(op, domain);}
397    throw new Error("Missing return statement in function");
398  }
399
400  final public OWLObjectPropertyRangeAxiom ObjectPropertyRangeAxiom() throws ParseException {
401                                                       OWLObjectProperty op; OWLClassExpression range;
402    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
403    case 39:
404      jj_consume_token(39);
405      break;
406    case 40:
407      jj_consume_token(40);
408      break;
409    case 41:
410      jj_consume_token(41);
411      break;
412    default:
413      jj_la1[6] = jj_gen;
414      jj_consume_token(-1);
415      throw new ParseException();
416    }
417    jj_consume_token(22);
418    op = ObjectProperty();
419    jj_consume_token(23);
420    jj_consume_token(25);
421    range = Concept();
422    jj_consume_token(COMMAND_END);
423          {if (true) return df.getOWLObjectPropertyRangeAxiom(op, range);}
424    throw new Error("Missing return statement in function");
425  }
426
427  final public OWLDataPropertyRangeAxiom DatatypePropertyRangeAxiom() throws ParseException {
428                                                           OWLDataProperty op; OWLDataRange range;
429    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
430    case 42:
431      jj_consume_token(42);
432      break;
433    case 43:
434      jj_consume_token(43);
435      break;
436    default:
437      jj_la1[7] = jj_gen;
438      jj_consume_token(-1);
439      throw new ParseException();
440    }
441    jj_consume_token(22);
442    op = DatatypeProperty();
443    jj_consume_token(23);
444    jj_consume_token(25);
445    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
446    case 44:
447      jj_consume_token(44);
448                     range = df.getDoubleOWLDatatype();
449      break;
450    case 45:
451      jj_consume_token(45);
452                      range = df.getBooleanOWLDatatype();
453      break;
454    case 46:
455      jj_consume_token(46);
456                      range = df.getIntegerOWLDatatype();
457      break;
458    default:
459      jj_la1[8] = jj_gen;
460      jj_consume_token(-1);
461      throw new ParseException();
462    }
463    jj_consume_token(COMMAND_END);
464          {if (true) return df.getOWLDataPropertyRangeAxiom(op, range);}
465    throw new Error("Missing return statement in function");
466  }
467
468  final public OWLClassExpression Concept() throws ParseException {
469        OWLClassExpression c,c1,c2;
470        OWLClass ac;
471        OWLObjectProperty ar;
472        OWLDataProperty dp;
473        OWLObjectProperty op;
474        String s;
475        OWLIndividual ind;
476        int i;
477    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
478    case TOP:
479      Top();
480           {if (true) return df.getOWLThing();}
481      break;
482    case BOTTOM:
483      Bottom();
484              {if (true) return df.getOWLNothing();}
485      break;
486    default:
487      jj_la1[9] = jj_gen;
488      if (jj_2_5(2)) {
489        ac = AtomicConcept();
490                                       {if (true) return ac;}
491      } else if (jj_2_6(2147483647)) {
492        jj_consume_token(22);
493        c1 = Concept();
494        And();
495        c2 = Concept();
496        jj_consume_token(23);
497         {if (true) return df.getOWLObjectIntersectionOf(c1,c2);}
498      } else if (jj_2_7(2147483647)) {
499        jj_consume_token(22);
500        c1 = Concept();
501        Or();
502        c2 = Concept();
503        jj_consume_token(23);
504         {if (true) return df.getOWLObjectUnionOf(c1,c2);}
505      } else {
506        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
507        case EXISTS:
508          Exists();
509          ar = ObjectProperty();
510          jj_consume_token(COMMAND_END);
511          c = Concept();
512         {if (true) return df.getOWLObjectSomeValuesFrom(ar,c);}
513          break;
514        case ALL:
515          All();
516          ar = ObjectProperty();
517          jj_consume_token(COMMAND_END);
518          c = Concept();
519         {if (true) return df.getOWLObjectAllValuesFrom(ar,c);}
520          break;
521        case NOT:
522          Not();
523          c = Concept();
524         {if (true) return df.getOWLObjectComplementOf(c);}
525          break;
526        case GE:
527          GE();
528          i = Integer();
529          ar = ObjectProperty();
530          jj_consume_token(COMMAND_END);
531          c = Concept();
532         {if (true) return df.getOWLObjectMinCardinality(i,ar,c);}
533          break;
534        case LE:
535          LE();
536          i = Integer();
537          ar = ObjectProperty();
538          jj_consume_token(COMMAND_END);
539          c = Concept();
540         {if (true) return df.getOWLObjectMaxCardinality(i,ar,c);}
541          break;
542        default:
543          jj_la1[10] = jj_gen;
544          if (jj_2_8(4)) {
545            jj_consume_token(22);
546            dp = DatatypeProperty();
547            jj_consume_token(47);
548            jj_consume_token(48);
549            jj_consume_token(23);
550                                                             {if (true) return df.getOWLDataHasValue(dp, df.getOWLLiteral(true));}
551          } else if (jj_2_9(4)) {
552            jj_consume_token(22);
553            dp = DatatypeProperty();
554            jj_consume_token(47);
555            jj_consume_token(49);
556            jj_consume_token(23);
557                                                              {if (true) return df.getOWLDataHasValue(dp, df.getOWLLiteral(false));}
558          } else if (jj_2_10(4)) {
559            jj_consume_token(22);
560            op = ObjectProperty();
561            jj_consume_token(50);
562            ind = Individual();
563            jj_consume_token(23);
564                                                                           {if (true) return df.getOWLObjectHasValue(op, ind);}
565          } else {
566            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
567            case 22:
568              jj_consume_token(22);
569              dp = DatatypeProperty();
570              jj_consume_token(51);
571              s = String();
572              jj_consume_token(23);
573                                                             {if (true) return df.getOWLDataHasValue(dp, df.getOWLLiteral(s));}
574              break;
575            default:
576              jj_la1[11] = jj_gen;
577              jj_consume_token(-1);
578              throw new ParseException();
579            }
580          }
581        }
582      }
583    }
584    throw new Error("Missing return statement in function");
585  }
586
587  final public void Or() throws ParseException {
588    jj_consume_token(OR);
589  }
590
591  final public void And() throws ParseException {
592    jj_consume_token(AND);
593  }
594
595  final public void Top() throws ParseException {
596    jj_consume_token(TOP);
597  }
598
599  final public void Bottom() throws ParseException {
600    jj_consume_token(BOTTOM);
601  }
602
603  final public void Exists() throws ParseException {
604    jj_consume_token(EXISTS);
605  }
606
607  final public void All() throws ParseException {
608    jj_consume_token(ALL);
609  }
610
611  final public void Not() throws ParseException {
612    jj_consume_token(NOT);
613  }
614
615  final public void GE() throws ParseException {
616    jj_consume_token(GE);
617  }
618
619  final public void LE() throws ParseException {
620    jj_consume_token(LE);
621  }
622
623  final public OWLClass AtomicConcept() throws ParseException {
624        String name;
625    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
626    case ID:
627      name = Id();
628      break;
629    case STRING:
630      name = String();
631      break;
632    default:
633      jj_la1[12] = jj_gen;
634      jj_consume_token(-1);
635      throw new ParseException();
636    }
637                {if (true) return df.getOWLClass(IRI.create(getInternalURI(name)));}
638    throw new Error("Missing return statement in function");
639  }
640
641  final public OWLDataProperty DatatypeProperty() throws ParseException {
642        String name;
643    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
644    case ID:
645      name = Id();
646      break;
647    case STRING:
648      name = String();
649      break;
650    default:
651      jj_la1[13] = jj_gen;
652      jj_consume_token(-1);
653      throw new ParseException();
654    }
655                {if (true) return df.getOWLDataProperty(IRI.create(getInternalURI(name)));}
656    throw new Error("Missing return statement in function");
657  }
658
659  final public OWLObjectProperty ObjectProperty() throws ParseException {
660        String name;
661    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
662    case ID:
663      name = Id();
664      break;
665    case STRING:
666      name = String();
667      break;
668    default:
669      jj_la1[14] = jj_gen;
670      jj_consume_token(-1);
671      throw new ParseException();
672    }
673                {if (true) return df.getOWLObjectProperty(IRI.create(getInternalURI(name)));}
674    throw new Error("Missing return statement in function");
675  }
676
677  final public OWLIndividual Individual() throws ParseException {
678        String name;
679    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
680    case ID:
681      name = Id();
682      break;
683    case STRING:
684      name = String();
685      break;
686    default:
687      jj_la1[15] = jj_gen;
688      jj_consume_token(-1);
689      throw new ParseException();
690    }
691                {if (true) return df.getOWLNamedIndividual(IRI.create(getInternalURI(name)));}
692    throw new Error("Missing return statement in function");
693  }
694
695  final public String Id() throws ParseException {
696  Token t;
697    t = jj_consume_token(ID);
698    // jjtThis.setId(t.image);
699    {if (true) return t.image;}
700    throw new Error("Missing return statement in function");
701  }
702
703  final public double Double() throws ParseException {
704  Token t;
705    t = jj_consume_token(DOUBLE);
706    {if (true) return new Double(t.image);}
707    throw new Error("Missing return statement in function");
708  }
709
710  final public int Integer() throws ParseException {
711  Token t;
712    t = jj_consume_token(NUMBER);
713    // jjtThis.setId(t.image);
714    // muss noch in Integer umgewandelt werden
715    {if (true) return new Integer(t.image);}
716    throw new Error("Missing return statement in function");
717  }
718
719  final public String String() throws ParseException {
720  Token t;
721  String s;
722    t = jj_consume_token(STRING);
723    // jjtThis.setId(t.image);
724    // es werden sofort die Anfuehrungszeichen abgeschnitten
725    s = t.image;
726    s = s.substring(1, s.length() - 1);
727    {if (true) return s;}
728    throw new Error("Missing return statement in function");
729  }
730
731  private boolean jj_2_1(int xla) {
732    jj_la = xla; jj_lastpos = jj_scanpos = token;
733    try { return !jj_3_1(); }
734    catch(LookaheadSuccess ls) { return true; }
735    finally { jj_save(0, xla); }
736  }
737
738  private boolean jj_2_2(int xla) {
739    jj_la = xla; jj_lastpos = jj_scanpos = token;
740    try { return !jj_3_2(); }
741    catch(LookaheadSuccess ls) { return true; }
742    finally { jj_save(1, xla); }
743  }
744
745  private boolean jj_2_3(int xla) {
746    jj_la = xla; jj_lastpos = jj_scanpos = token;
747    try { return !jj_3_3(); }
748    catch(LookaheadSuccess ls) { return true; }
749    finally { jj_save(2, xla); }
750  }
751
752  private boolean jj_2_4(int xla) {
753    jj_la = xla; jj_lastpos = jj_scanpos = token;
754    try { return !jj_3_4(); }
755    catch(LookaheadSuccess ls) { return true; }
756    finally { jj_save(3, xla); }
757  }
758
759  private boolean jj_2_5(int xla) {
760    jj_la = xla; jj_lastpos = jj_scanpos = token;
761    try { return !jj_3_5(); }
762    catch(LookaheadSuccess ls) { return true; }
763    finally { jj_save(4, xla); }
764  }
765
766  private boolean jj_2_6(int xla) {
767    jj_la = xla; jj_lastpos = jj_scanpos = token;
768    try { return !jj_3_6(); }
769    catch(LookaheadSuccess ls) { return true; }
770    finally { jj_save(5, xla); }
771  }
772
773  private boolean jj_2_7(int xla) {
774    jj_la = xla; jj_lastpos = jj_scanpos = token;
775    try { return !jj_3_7(); }
776    catch(LookaheadSuccess ls) { return true; }
777    finally { jj_save(6, xla); }
778  }
779
780  private boolean jj_2_8(int xla) {
781    jj_la = xla; jj_lastpos = jj_scanpos = token;
782    try { return !jj_3_8(); }
783    catch(LookaheadSuccess ls) { return true; }
784    finally { jj_save(7, xla); }
785  }
786
787  private boolean jj_2_9(int xla) {
788    jj_la = xla; jj_lastpos = jj_scanpos = token;
789    try { return !jj_3_9(); }
790    catch(LookaheadSuccess ls) { return true; }
791    finally { jj_save(8, xla); }
792  }
793
794  private boolean jj_2_10(int xla) {
795    jj_la = xla; jj_lastpos = jj_scanpos = token;
796    try { return !jj_3_10(); }
797    catch(LookaheadSuccess ls) { return true; }
798    finally { jj_save(9, xla); }
799  }
800
801  private boolean jj_3_6() {
802    if (jj_scan_token(22)) return true;
803    if (jj_3R_2()) return true;
804    if (jj_scan_token(14)) return true;
805    return false;
806  }
807
808  private boolean jj_3R_12() {
809    if (jj_scan_token(17)) return true;
810    if (jj_3R_4()) return true;
811    if (jj_scan_token(COMMAND_END)) return true;
812    if (jj_3R_2()) return true;
813    return false;
814  }
815
816  private boolean jj_3R_11() {
817    if (jj_scan_token(16)) return true;
818    if (jj_3R_4()) return true;
819    if (jj_scan_token(COMMAND_END)) return true;
820    if (jj_3R_2()) return true;
821    return false;
822  }
823
824  private boolean jj_3R_10() {
825    if (jj_scan_token(22)) return true;
826    if (jj_3R_2()) return true;
827    if (jj_scan_token(15)) return true;
828    if (jj_3R_2()) return true;
829    if (jj_scan_token(23)) return true;
830    return false;
831  }
832
833  private boolean jj_3R_9() {
834    if (jj_scan_token(22)) return true;
835    if (jj_3R_2()) return true;
836    if (jj_scan_token(14)) return true;
837    if (jj_3R_2()) return true;
838    if (jj_scan_token(23)) return true;
839    return false;
840  }
841
842  private boolean jj_3_4() {
843    if (jj_3R_2()) return true;
844    Token xsp;
845    xsp = jj_scanpos;
846    if (jj_scan_token(26)) {
847    jj_scanpos = xsp;
848    if (jj_scan_token(27)) return true;
849    }
850    return false;
851  }
852
853  private boolean jj_3R_18() {
854    if (jj_3R_26()) return true;
855    return false;
856  }
857
858  private boolean jj_3_3() {
859    if (jj_3R_2()) return true;
860    if (jj_scan_token(25)) return true;
861    return false;
862  }
863
864  private boolean jj_3_5() {
865    if (jj_3R_5()) return true;
866    return false;
867  }
868
869  private boolean jj_3R_8() {
870    if (jj_scan_token(13)) return true;
871    return false;
872  }
873
874  private boolean jj_3R_7() {
875    if (jj_scan_token(12)) return true;
876    return false;
877  }
878
879  private boolean jj_3R_2() {
880    Token xsp;
881    xsp = jj_scanpos;
882    if (jj_3R_7()) {
883    jj_scanpos = xsp;
884    if (jj_3R_8()) {
885    jj_scanpos = xsp;
886    if (jj_3_5()) {
887    jj_scanpos = xsp;
888    if (jj_3R_9()) {
889    jj_scanpos = xsp;
890    if (jj_3R_10()) {
891    jj_scanpos = xsp;
892    if (jj_3R_11()) {
893    jj_scanpos = xsp;
894    if (jj_3R_12()) {
895    jj_scanpos = xsp;
896    if (jj_3R_13()) {
897    jj_scanpos = xsp;
898    if (jj_3R_14()) {
899    jj_scanpos = xsp;
900    if (jj_3R_15()) {
901    jj_scanpos = xsp;
902    if (jj_3_8()) {
903    jj_scanpos = xsp;
904    if (jj_3_9()) {
905    jj_scanpos = xsp;
906    if (jj_3_10()) {
907    jj_scanpos = xsp;
908    if (jj_3R_16()) return true;
909    }
910    }
911    }
912    }
913    }
914    }
915    }
916    }
917    }
918    }
919    }
920    }
921    }
922    return false;
923  }
924
925  private boolean jj_3R_27() {
926    if (jj_scan_token(ID)) return true;
927    return false;
928  }
929
930  private boolean jj_3R_20() {
931    if (jj_3R_26()) return true;
932    return false;
933  }
934
935  private boolean jj_3R_17() {
936    if (jj_3R_27()) return true;
937    return false;
938  }
939
940  private boolean jj_3R_3() {
941    Token xsp;
942    xsp = jj_scanpos;
943    if (jj_3R_17()) {
944    jj_scanpos = xsp;
945    if (jj_3R_18()) return true;
946    }
947    return false;
948  }
949
950  private boolean jj_3R_24() {
951    if (jj_3R_26()) return true;
952    return false;
953  }
954
955  private boolean jj_3_2() {
956    Token xsp;
957    xsp = jj_scanpos;
958    if (jj_scan_token(18)) jj_scanpos = xsp;
959    if (jj_3R_4()) return true;
960    if (jj_scan_token(22)) return true;
961    if (jj_3R_3()) return true;
962    if (jj_scan_token(24)) return true;
963    return false;
964  }
965
966  private boolean jj_3R_19() {
967    if (jj_3R_27()) return true;
968    return false;
969  }
970
971  private boolean jj_3R_4() {
972    Token xsp;
973    xsp = jj_scanpos;
974    if (jj_3R_19()) {
975    jj_scanpos = xsp;
976    if (jj_3R_20()) return true;
977    }
978    return false;
979  }
980
981  private boolean jj_3_1() {
982    if (jj_3R_2()) return true;
983    if (jj_scan_token(22)) return true;
984    if (jj_3R_3()) return true;
985    if (jj_scan_token(23)) return true;
986    if (jj_scan_token(COMMAND_END)) return true;
987    return false;
988  }
989
990  private boolean jj_3R_22() {
991    if (jj_3R_26()) return true;
992    return false;
993  }
994
995  private boolean jj_3R_23() {
996    if (jj_3R_27()) return true;
997    return false;
998  }
999
1000  private boolean jj_3R_6() {
1001    Token xsp;
1002    xsp = jj_scanpos;
1003    if (jj_3R_23()) {
1004    jj_scanpos = xsp;
1005    if (jj_3R_24()) return true;
1006    }
1007    return false;
1008  }
1009
1010  private boolean jj_3R_21() {
1011    if (jj_3R_27()) return true;
1012    return false;
1013  }
1014
1015  private boolean jj_3R_5() {
1016    Token xsp;
1017    xsp = jj_scanpos;
1018    if (jj_3R_21()) {
1019    jj_scanpos = xsp;
1020    if (jj_3R_22()) return true;
1021    }
1022    return false;
1023  }
1024
1025  private boolean jj_3R_26() {
1026    if (jj_scan_token(STRING)) return true;
1027    return false;
1028  }
1029
1030  private boolean jj_3R_16() {
1031    if (jj_scan_token(22)) return true;
1032    if (jj_3R_6()) return true;
1033    if (jj_scan_token(51)) return true;
1034    if (jj_3R_26()) return true;
1035    if (jj_scan_token(23)) return true;
1036    return false;
1037  }
1038
1039  private boolean jj_3_10() {
1040    if (jj_scan_token(22)) return true;
1041    if (jj_3R_4()) return true;
1042    if (jj_scan_token(50)) return true;
1043    if (jj_3R_3()) return true;
1044    if (jj_scan_token(23)) return true;
1045    return false;
1046  }
1047
1048  private boolean jj_3_9() {
1049    if (jj_scan_token(22)) return true;
1050    if (jj_3R_6()) return true;
1051    if (jj_scan_token(47)) return true;
1052    if (jj_scan_token(49)) return true;
1053    if (jj_scan_token(23)) return true;
1054    return false;
1055  }
1056
1057  private boolean jj_3_8() {
1058    if (jj_scan_token(22)) return true;
1059    if (jj_3R_6()) return true;
1060    if (jj_scan_token(47)) return true;
1061    if (jj_scan_token(48)) return true;
1062    if (jj_scan_token(23)) return true;
1063    return false;
1064  }
1065
1066  private boolean jj_3R_15() {
1067    if (jj_scan_token(20)) return true;
1068    if (jj_3R_25()) return true;
1069    if (jj_3R_4()) return true;
1070    if (jj_scan_token(COMMAND_END)) return true;
1071    if (jj_3R_2()) return true;
1072    return false;
1073  }
1074
1075  private boolean jj_3R_14() {
1076    if (jj_scan_token(19)) return true;
1077    if (jj_3R_25()) return true;
1078    if (jj_3R_4()) return true;
1079    if (jj_scan_token(COMMAND_END)) return true;
1080    if (jj_3R_2()) return true;
1081    return false;
1082  }
1083
1084  private boolean jj_3R_25() {
1085    if (jj_scan_token(NUMBER)) return true;
1086    return false;
1087  }
1088
1089  private boolean jj_3_7() {
1090    if (jj_scan_token(22)) return true;
1091    if (jj_3R_2()) return true;
1092    if (jj_scan_token(15)) return true;
1093    return false;
1094  }
1095
1096  private boolean jj_3R_13() {
1097    if (jj_scan_token(18)) return true;
1098    if (jj_3R_2()) return true;
1099    return false;
1100  }
1101
1102  /** Generated Token Manager. */
1103  public KBParserTokenManager token_source;
1104  SimpleCharStream jj_input_stream;
1105  /** Current token. */
1106  public Token token;
1107  /** Next token. */
1108  public Token jj_nt;
1109  private int jj_ntk;
1110  private Token jj_scanpos, jj_lastpos;
1111  private int jj_la;
1112  private int jj_gen;
1113  final private int[] jj_la1 = new int[16];
1114  static private int[] jj_la1_0;
1115  static private int[] jj_la1_1;
1116  static {
1117      jj_la1_init_0();
1118      jj_la1_init_1();
1119   }
1120   private static void jj_la1_init_0() {
1121      jj_la1_0 = new int[] {0xf07f3200,0xf0000000,0x40000,0xc000000,0x0,0x0,0x0,0x0,0x0,0x3000,0x1f0000,0x400000,0x200200,0x200200,0x200200,0x200200,};
1122   }
1123   private static void jj_la1_init_1() {
1124      jj_la1_1 = new int[] {0xffd,0xffd,0x0,0x2,0x1c,0x60,0x380,0xc00,0x7000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
1125   }
1126  final private JJCalls[] jj_2_rtns = new JJCalls[10];
1127  private boolean jj_rescan = false;
1128  private int jj_gc = 0;
1129
1130  /** Constructor with InputStream. */
1131  public KBParser(java.io.InputStream stream) {
1132     this(stream, null);
1133  }
1134  /** Constructor with InputStream and supplied encoding */
1135  public KBParser(java.io.InputStream stream, String encoding) {
1136    try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
1137    token_source = new KBParserTokenManager(jj_input_stream);
1138    token = new Token();
1139    jj_ntk = -1;
1140    jj_gen = 0;
1141    for (int i = 0; i < 16; i++) jj_la1[i] = -1;
1142    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1143  }
1144
1145  /** Reinitialise. */
1146  public void ReInit(java.io.InputStream stream) {
1147     ReInit(stream, null);
1148  }
1149  /** Reinitialise. */
1150  public void ReInit(java.io.InputStream stream, String encoding) {
1151    try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
1152    token_source.ReInit(jj_input_stream);
1153    token = new Token();
1154    jj_ntk = -1;
1155    jj_gen = 0;
1156    for (int i = 0; i < 16; i++) jj_la1[i] = -1;
1157    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1158  }
1159
1160  /** Constructor. */
1161  public KBParser(java.io.Reader stream) {
1162    jj_input_stream = new SimpleCharStream(stream, 1, 1);
1163    token_source = new KBParserTokenManager(jj_input_stream);
1164    token = new Token();
1165    jj_ntk = -1;
1166    jj_gen = 0;
1167    for (int i = 0; i < 16; i++) jj_la1[i] = -1;
1168    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1169  }
1170
1171  /** Reinitialise. */
1172  public void ReInit(java.io.Reader stream) {
1173    jj_input_stream.ReInit(stream, 1, 1);
1174    token_source.ReInit(jj_input_stream);
1175    token = new Token();
1176    jj_ntk = -1;
1177    jj_gen = 0;
1178    for (int i = 0; i < 16; i++) jj_la1[i] = -1;
1179    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1180  }
1181
1182  /** Constructor with generated Token Manager. */
1183  public KBParser(KBParserTokenManager tm) {
1184    token_source = tm;
1185    token = new Token();
1186    jj_ntk = -1;
1187    jj_gen = 0;
1188    for (int i = 0; i < 16; i++) jj_la1[i] = -1;
1189    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1190  }
1191
1192  /** Reinitialise. */
1193  public void ReInit(KBParserTokenManager tm) {
1194    token_source = tm;
1195    token = new Token();
1196    jj_ntk = -1;
1197    jj_gen = 0;
1198    for (int i = 0; i < 16; i++) jj_la1[i] = -1;
1199    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1200  }
1201
1202  private Token jj_consume_token(int kind) throws ParseException {
1203    Token oldToken;
1204    if ((oldToken = token).next != null) token = token.next;
1205    else token = token.next = token_source.getNextToken();
1206    jj_ntk = -1;
1207    if (token.kind == kind) {
1208      jj_gen++;
1209      if (++jj_gc > 100) {
1210        jj_gc = 0;
1211        for (int i = 0; i < jj_2_rtns.length; i++) {
1212          JJCalls c = jj_2_rtns[i];
1213          while (c != null) {
1214            if (c.gen < jj_gen) c.first = null;
1215            c = c.next;
1216          }
1217        }
1218      }
1219      return token;
1220    }
1221    token = oldToken;
1222    jj_kind = kind;
1223    throw generateParseException();
1224  }
1225
1226  static private final class LookaheadSuccess extends java.lang.Error { }
1227  final private LookaheadSuccess jj_ls = new LookaheadSuccess();
1228  private boolean jj_scan_token(int kind) {
1229    if (jj_scanpos == jj_lastpos) {
1230      jj_la--;
1231      if (jj_scanpos.next == null) {
1232        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
1233      } else {
1234        jj_lastpos = jj_scanpos = jj_scanpos.next;
1235      }
1236    } else {
1237      jj_scanpos = jj_scanpos.next;
1238    }
1239    if (jj_rescan) {
1240      int i = 0; Token tok = token;
1241      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
1242      if (tok != null) jj_add_error_token(kind, i);
1243    }
1244    if (jj_scanpos.kind != kind) return true;
1245    if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
1246    return false;
1247  }
1248
1249/** Get the next Token. */
1250  final public Token getNextToken() {
1251    if (token.next != null) token = token.next;
1252    else token = token.next = token_source.getNextToken();
1253    jj_ntk = -1;
1254    jj_gen++;
1255    return token;
1256  }
1257
1258/** Get the specific Token. */
1259  final public Token getToken(int index) {
1260    Token t = token;
1261    for (int i = 0; i < index; i++) {
1262      if (t.next != null) t = t.next;
1263      else t = t.next = token_source.getNextToken();
1264    }
1265    return t;
1266  }
1267
1268  private int jj_ntk() {
1269    if ((jj_nt=token.next) == null)
1270      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
1271    else
1272      return (jj_ntk = jj_nt.kind);
1273  }
1274
1275  private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
1276  private int[] jj_expentry;
1277  private int jj_kind = -1;
1278  private int[] jj_lasttokens = new int[100];
1279  private int jj_endpos;
1280
1281  private void jj_add_error_token(int kind, int pos) {
1282    if (pos >= 100) return;
1283    if (pos == jj_endpos + 1) {
1284      jj_lasttokens[jj_endpos++] = kind;
1285    } else if (jj_endpos != 0) {
1286      jj_expentry = new int[jj_endpos];
1287      for (int i = 0; i < jj_endpos; i++) {
1288        jj_expentry[i] = jj_lasttokens[i];
1289      }
1290      jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) {
1291        int[] oldentry = (int[])(it.next());
1292        if (oldentry.length == jj_expentry.length) {
1293          for (int i = 0; i < jj_expentry.length; i++) {
1294            if (oldentry[i] != jj_expentry[i]) {
1295              continue jj_entries_loop;
1296            }
1297          }
1298          jj_expentries.add(jj_expentry);
1299          break jj_entries_loop;
1300        }
1301      }
1302      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
1303    }
1304  }
1305
1306  /** Generate ParseException. */
1307  public ParseException generateParseException() {
1308    jj_expentries.clear();
1309    boolean[] la1tokens = new boolean[52];
1310    if (jj_kind >= 0) {
1311      la1tokens[jj_kind] = true;
1312      jj_kind = -1;
1313    }
1314    for (int i = 0; i < 16; i++) {
1315      if (jj_la1[i] == jj_gen) {
1316        for (int j = 0; j < 32; j++) {
1317          if ((jj_la1_0[i] & (1<<j)) != 0) {
1318            la1tokens[j] = true;
1319          }
1320          if ((jj_la1_1[i] & (1<<j)) != 0) {
1321            la1tokens[32+j] = true;
1322          }
1323        }
1324      }
1325    }
1326    for (int i = 0; i < 52; i++) {
1327      if (la1tokens[i]) {
1328        jj_expentry = new int[1];
1329        jj_expentry[0] = i;
1330        jj_expentries.add(jj_expentry);
1331      }
1332    }
1333    jj_endpos = 0;
1334    jj_rescan_token();
1335    jj_add_error_token(0, 0);
1336    int[][] exptokseq = new int[jj_expentries.size()][];
1337    for (int i = 0; i < jj_expentries.size(); i++) {
1338      exptokseq[i] = jj_expentries.get(i);
1339    }
1340    return new ParseException(token, exptokseq, tokenImage);
1341  }
1342
1343  /** Enable tracing. */
1344  final public void enable_tracing() {
1345  }
1346
1347  /** Disable tracing. */
1348  final public void disable_tracing() {
1349  }
1350
1351  private void jj_rescan_token() {
1352    jj_rescan = true;
1353    for (int i = 0; i < 10; i++) {
1354    try {
1355      JJCalls p = jj_2_rtns[i];
1356      do {
1357        if (p.gen > jj_gen) {
1358          jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
1359          switch (i) {
1360            case 0: jj_3_1(); break;
1361            case 1: jj_3_2(); break;
1362            case 2: jj_3_3(); break;
1363            case 3: jj_3_4(); break;
1364            case 4: jj_3_5(); break;
1365            case 5: jj_3_6(); break;
1366            case 6: jj_3_7(); break;
1367            case 7: jj_3_8(); break;
1368            case 8: jj_3_9(); break;
1369            case 9: jj_3_10(); break;
1370          }
1371        }
1372        p = p.next;
1373      } while (p != null);
1374      } catch(LookaheadSuccess ls) { }
1375    }
1376    jj_rescan = false;
1377  }
1378
1379  private void jj_save(int index, int xla) {
1380    JJCalls p = jj_2_rtns[index];
1381    while (p.gen > jj_gen) {
1382      if (p.next == null) { p = p.next = new JJCalls(); break; }
1383      p = p.next;
1384    }
1385    p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
1386  }
1387
1388  static final class JJCalls {
1389    int gen;
1390    Token first;
1391    int arg;
1392    JJCalls next;
1393  }
1394
1395}