001    /* Generated By:JavaCC: Do not edit this line. CompactSyntax.java */
002    package com.thaiopensource.relaxng.parse.compact;
003    
004    import com.thaiopensource.relaxng.parse.SchemaBuilder;
005    import com.thaiopensource.relaxng.parse.Annotations;
006    import com.thaiopensource.relaxng.parse.DataPatternBuilder;
007    import com.thaiopensource.relaxng.parse.ParsedElementAnnotation;
008    import com.thaiopensource.relaxng.parse.ElementAnnotationBuilder;
009    import com.thaiopensource.relaxng.parse.CommentList;
010    import com.thaiopensource.relaxng.parse.ParsedPattern;
011    import com.thaiopensource.relaxng.parse.ParsedNameClass;
012    import com.thaiopensource.relaxng.parse.Scope;
013    import com.thaiopensource.relaxng.parse.GrammarSection;
014    import com.thaiopensource.relaxng.parse.Div;
015    import com.thaiopensource.relaxng.parse.Grammar;
016    import com.thaiopensource.relaxng.parse.Include;
017    import com.thaiopensource.relaxng.parse.IncludedGrammar;
018    import com.thaiopensource.relaxng.parse.IllegalSchemaException;
019    import com.thaiopensource.relaxng.parse.BuildException;
020    import com.thaiopensource.relaxng.parse.Location;
021    import com.thaiopensource.relaxng.parse.Context;
022    
023    import com.thaiopensource.xml.util.WellKnownNamespaces;
024    
025    import com.thaiopensource.util.Localizer;
026    
027    import org.xml.sax.ErrorHandler;
028    import org.xml.sax.SAXException;
029    import org.xml.sax.SAXParseException;
030    import org.xml.sax.Locator;
031    import org.xml.sax.helpers.LocatorImpl;
032    
033    import java.util.Hashtable;
034    import java.util.Enumeration;
035    import java.io.Reader;
036    import java.net.MalformedURLException;
037    import java.net.URL;
038    
039    public class CompactSyntax implements Context, CompactSyntaxConstants {
040      private static final int IN_ELEMENT = 0;
041      private static final int IN_ATTRIBUTE = 1;
042      private static final int IN_ANY_NAME = 2;
043      private static final int IN_NS_NAME = 4;
044    
045      private String defaultNamespace = SchemaBuilder.INHERIT_NS;
046      private String compatibilityPrefix = null;
047      private SchemaBuilder sb;
048      private String sourceUri;
049      private ErrorHandler eh;
050      private final Hashtable namespaceTable = new Hashtable();
051      private final Hashtable datatypesTable = new Hashtable();
052      private boolean hadError = false;
053      private static final Localizer localizer = new Localizer(CompactSyntax.class);
054      private final Hashtable attributeNameTable = new Hashtable();
055      private boolean annotationsIncludeElements = false;
056    
057      final class LocatedString {
058        private final String str;
059        private final Token tok;
060    
061        LocatedString(String str, Token tok) {
062          this.str = str;
063          this.tok = tok;
064        }
065    
066        String getString() {
067          return str;
068        }
069    
070        Location getLocation() {
071          return makeLocation(tok);
072        }
073    
074        Token getToken() {
075          return tok;
076        }
077    
078      }
079    
080      public CompactSyntax(Reader r, String sourceUri, SchemaBuilder sb, ErrorHandler eh) {
081        this(r);
082        this.sourceUri = sourceUri;
083        this.sb = sb;
084        this.eh = eh;
085        // this causes the root pattern to have non-null annotations
086        // which is useful because it gives a context to trang
087        this.topLevelComments = sb.makeCommentList();
088      }
089    
090      ParsedPattern parse(Scope scope) throws IllegalSchemaException {
091        try {
092          ParsedPattern p = Input(scope);
093          if (!hadError)
094            return p;
095        }
096        catch (ParseException e) {
097          error("syntax_error", e.currentToken.next);
098        }
099        catch (EscapeSyntaxException e) {
100          reportEscapeSyntaxException(e);
101        }
102        throw new IllegalSchemaException();
103      }
104    
105      ParsedPattern parseInclude(IncludedGrammar g) throws IllegalSchemaException {
106        try {
107          ParsedPattern p = IncludedGrammar(g);
108          if (!hadError)
109            return p;
110        }
111        catch (ParseException e) {
112          error("syntax_error", e.currentToken.next);
113        }
114        catch (EscapeSyntaxException e) {
115          reportEscapeSyntaxException(e);
116        }
117        throw new IllegalSchemaException();
118      }
119    
120      private void checkNsName(int context, LocatedString ns) {
121        if ((context & IN_NS_NAME) != 0)
122          error("ns_name_except_contains_ns_name", ns.getToken());
123      }
124    
125      private void checkAnyName(int context, Token t) {
126        if ((context & IN_NS_NAME) != 0)
127          error("ns_name_except_contains_any_name", t);
128        if ((context & IN_ANY_NAME) != 0)
129          error("any_name_except_contains_any_name", t);
130      }
131    
132      private void error(String key, Token tok) {
133        doError(localizer.message(key), tok);
134      }
135    
136      private void error(String key, String arg, Token tok) {
137        doError(localizer.message(key, arg), tok);
138      }
139    
140      private void error(String key, String arg1, String arg2, Token tok) {
141        doError(localizer.message(key, arg1, arg2), tok);
142      }
143    
144      private void doError(String message, Token tok) {
145        hadError = true;
146        if (eh != null) {
147          LocatorImpl loc = new LocatorImpl();
148          loc.setLineNumber(tok.beginLine);
149          loc.setColumnNumber(tok.beginColumn);
150          loc.setSystemId(sourceUri);
151          try {
152            eh.error(new SAXParseException(message, loc));
153          }
154          catch (SAXException se) {
155            throw new BuildException(se);
156          }
157        }
158      }
159    
160      private void reportEscapeSyntaxException(EscapeSyntaxException e) {
161        if (eh != null) {
162          LocatorImpl loc = new LocatorImpl();
163          loc.setLineNumber(e.getLineNumber());
164          loc.setColumnNumber(e.getColumnNumber());
165          loc.setSystemId(sourceUri);
166          try {
167            eh.error(new SAXParseException(localizer.message(e.getKey()), loc));
168          }
169          catch (SAXException se) {
170            throw new BuildException(se);
171          }
172        }
173      }
174    
175      private static String unquote(String s) {
176        if (s.length() >= 6 && s.charAt(0) == s.charAt(1)) {
177          s = s.replace('\u0000', '\n');
178          return s.substring(3, s.length() - 3);
179        }
180        else
181          return s.substring(1, s.length() - 1);
182      }
183    
184      Location makeLocation(Token t) {
185        return sb.makeLocation(sourceUri, t.beginLine, t.beginColumn);
186      }
187    
188      private static ParsedPattern[] addPattern(ParsedPattern[] patterns, int i, ParsedPattern p) {
189        if (i >= patterns.length) {
190          ParsedPattern[] oldPatterns = patterns;
191          patterns = new ParsedPattern[oldPatterns.length*2];
192          System.arraycopy(oldPatterns, 0, patterns, 0, oldPatterns.length);
193        }
194        patterns[i] = p;
195        return patterns;
196      }
197    
198      String getCompatibilityPrefix() {
199        if (compatibilityPrefix == null) {
200          compatibilityPrefix = "a";
201          while (namespaceTable.get(compatibilityPrefix) != null)
202            compatibilityPrefix = compatibilityPrefix + "a";
203        }
204        return compatibilityPrefix;
205      }
206    
207      public String resolveNamespacePrefix(String prefix) {
208        String result = (String)namespaceTable.get(prefix);
209        if (result.length() == 0)
210          return null;
211        return result;
212      }
213    
214      public Enumeration prefixes() {
215        return namespaceTable.keys();
216      }
217    
218      public String getBaseUri() {
219        return sourceUri;
220      }
221    
222      public boolean isUnparsedEntity(String entityName) {
223        return false;
224      }
225    
226      public boolean isNotation(String notationName) {
227        return false;
228      }
229    
230      public Context copy() {
231        return this;
232      }
233    
234      private Context getContext() {
235        return this;
236      }
237    
238      private CommentList getComments() {
239        return getComments(getTopLevelComments());
240      }
241    
242      private CommentList topLevelComments;
243    
244      private CommentList getTopLevelComments() {
245        CommentList tem = topLevelComments;
246        topLevelComments = null;
247        return tem;
248      }
249    
250      private void noteTopLevelComments() {
251        topLevelComments = getComments(topLevelComments);
252      }
253    
254      private void topLevelComments(GrammarSection section) {
255        section.topLevelComment(getComments(null));
256      }
257    
258      private Token lastCommentSourceToken = null;
259    
260      private CommentList getComments(CommentList comments) {
261        Token nextToken = getToken(1);
262        if (lastCommentSourceToken != nextToken) {
263          if (lastCommentSourceToken == null)
264            lastCommentSourceToken = token;
265          do {
266            lastCommentSourceToken = lastCommentSourceToken.next;
267            Token t = lastCommentSourceToken.specialToken;
268            if (t != null) {
269              while (t.specialToken != null)
270                t = t.specialToken;
271              if (comments == null)
272                comments = sb.makeCommentList();
273              for (; t != null; t = t.next) {
274                String s = mungeComment(t.image);
275                Location loc = makeLocation(t);
276                if (t.next != null
277                    && t.next.kind == CompactSyntaxConstants.SINGLE_LINE_COMMENT_CONTINUE) {
278                  StringBuffer buf = new StringBuffer(s);
279                  do {
280                    t = t.next;
281                    buf.append('\n');
282                    buf.append(mungeComment(t.image));
283                  } while (t.next != null
284                           && t.next.kind == CompactSyntaxConstants.SINGLE_LINE_COMMENT_CONTINUE);
285                  s = buf.toString();
286                }
287                comments.addComment(s, loc);
288              }
289            }
290          } while (lastCommentSourceToken != nextToken);
291        }
292        return comments;
293      }
294    
295      private ParsedPattern afterComments(ParsedPattern p) {
296        CommentList comments = getComments(null);
297        if (comments == null)
298          return p;
299        return sb.commentAfter(p, comments);
300      }
301    
302      private ParsedNameClass afterComments(ParsedNameClass nc) {
303        CommentList comments = getComments(null);
304        if (comments == null)
305          return nc;
306        return sb.commentAfter(nc, comments);
307      }
308    
309      private static String mungeComment(String image) {
310        int i = image.indexOf('#') + 1;
311        while (i < image.length() && image.charAt(i) == '#')
312          i++;
313        if (i < image.length() && image.charAt(i) == ' ')
314          i++;
315        return image.substring(i);
316      }
317    
318      private Annotations getCommentsAsAnnotations() {
319        CommentList comments = getComments();
320        if (comments == null)
321          return null;
322        return sb.makeAnnotations(comments, getContext());
323      }
324    
325      private Annotations addCommentsToChildAnnotations(Annotations a) {
326        CommentList comments = getComments();
327        if (comments == null)
328          return a;
329        if (a == null)
330          a = sb.makeAnnotations(null, getContext());
331        a.addComment(comments);
332        return a;
333      }
334    
335      private Annotations addCommentsToLeadingAnnotations(Annotations a) {
336        CommentList comments = getComments();
337        if (comments == null)
338          return a;
339        if (a == null)
340          return sb.makeAnnotations(comments, getContext());
341        a.addLeadingComment(comments);
342        return a;
343      }
344    
345      private Annotations getTopLevelCommentsAsAnnotations() {
346        CommentList comments = getTopLevelComments();
347        if (comments == null)
348          return null;
349        return sb.makeAnnotations(comments, getContext());
350      }
351    
352      private void clearAttributeList() {
353        attributeNameTable.clear();
354      }
355    
356      private void addAttribute(Annotations a, String ns, String localName, String prefix, String value, Token tok) {
357        String key = ns + "#" + localName;
358        if (attributeNameTable.get(key) != null)
359          error("duplicate_attribute", ns, localName, tok);
360        else {
361          attributeNameTable.put(key, key);
362          a.addAttribute(ns, localName, prefix, value, makeLocation(tok));
363        }
364      }
365    
366      private void checkExcept(Token[] except) {
367        if (except[0] != null)
368          error("except_missing_parentheses", except[0]);
369      }
370    
371      private String lookupPrefix(String prefix, Token t) {
372        String ns = (String)namespaceTable.get(prefix);
373        if (ns == null) {
374          error("undeclared_prefix", prefix, t);
375          return "#error";
376        }
377        return ns;
378      }
379      private String lookupDatatype(String prefix, Token t) {
380        String ns = (String)datatypesTable.get(prefix);
381        if (ns == null) {
382          error("undeclared_prefix", prefix, t);
383          return ""; // XXX
384        }
385        return ns;
386      }
387      private String resolve(String str) {
388        try {
389         return new URL(new URL(sourceUri), str).toString();
390        }
391        catch (MalformedURLException e) { }
392        return str;
393      }
394    
395      final public ParsedPattern Input(Scope scope) throws ParseException {
396      ParsedPattern p;
397        Preamble();
398        if (jj_2_1(2147483647)) {
399          p = TopLevelGrammar(scope);
400        } else {
401          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
402          case 1:
403          case 10:
404          case 17:
405          case 18:
406          case 19:
407          case 26:
408          case 27:
409          case 28:
410          case 31:
411          case 32:
412          case 33:
413          case 34:
414          case 35:
415          case 36:
416          case DOCUMENTATION:
417          case DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT:
418          case IDENTIFIER:
419          case ESCAPED_IDENTIFIER:
420          case PREFIXED_NAME:
421          case LITERAL:
422            p = Expr(true, scope, null, null);
423                                             p = afterComments(p);
424            jj_consume_token(0);
425            break;
426          default:
427            jj_la1[0] = jj_gen;
428            jj_consume_token(-1);
429            throw new ParseException();
430          }
431        }
432        {if (true) return p;}
433        throw new Error("Missing return statement in function");
434      }
435    
436      final public void TopLevelLookahead() throws ParseException {
437        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
438        case PREFIXED_NAME:
439          jj_consume_token(PREFIXED_NAME);
440          jj_consume_token(1);
441          break;
442        case IDENTIFIER:
443        case ESCAPED_IDENTIFIER:
444          Identifier();
445          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
446          case 1:
447            jj_consume_token(1);
448            break;
449          case 2:
450            jj_consume_token(2);
451            break;
452          case 3:
453            jj_consume_token(3);
454            break;
455          case 4:
456            jj_consume_token(4);
457            break;
458          default:
459            jj_la1[1] = jj_gen;
460            jj_consume_token(-1);
461            throw new ParseException();
462          }
463          break;
464        case 5:
465        case 6:
466        case 7:
467          LookaheadGrammarKeyword();
468          break;
469        case 1:
470          LookaheadBody();
471          LookaheadAfterAnnotations();
472          break;
473        case DOCUMENTATION:
474        case DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT:
475          LookaheadDocumentation();
476          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
477          case 1:
478            LookaheadBody();
479            break;
480          default:
481            jj_la1[2] = jj_gen;
482            ;
483          }
484          LookaheadAfterAnnotations();
485          break;
486        default:
487          jj_la1[3] = jj_gen;
488          jj_consume_token(-1);
489          throw new ParseException();
490        }
491      }
492    
493      final public void LookaheadAfterAnnotations() throws ParseException {
494        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
495        case IDENTIFIER:
496        case ESCAPED_IDENTIFIER:
497          Identifier();
498          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
499          case 2:
500            jj_consume_token(2);
501            break;
502          case 3:
503            jj_consume_token(3);
504            break;
505          case 4:
506            jj_consume_token(4);
507            break;
508          default:
509            jj_la1[4] = jj_gen;
510            jj_consume_token(-1);
511            throw new ParseException();
512          }
513          break;
514        case 5:
515        case 6:
516        case 7:
517          LookaheadGrammarKeyword();
518          break;
519        default:
520          jj_la1[5] = jj_gen;
521          jj_consume_token(-1);
522          throw new ParseException();
523        }
524      }
525    
526      final public void LookaheadGrammarKeyword() throws ParseException {
527        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
528        case 5:
529          jj_consume_token(5);
530          break;
531        case 6:
532          jj_consume_token(6);
533          break;
534        case 7:
535          jj_consume_token(7);
536          break;
537        default:
538          jj_la1[6] = jj_gen;
539          jj_consume_token(-1);
540          throw new ParseException();
541        }
542      }
543    
544      final public void LookaheadDocumentation() throws ParseException {
545        label_1:
546        while (true) {
547          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
548          case DOCUMENTATION:
549            jj_consume_token(DOCUMENTATION);
550            break;
551          case DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT:
552            jj_consume_token(DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT);
553            break;
554          default:
555            jj_la1[7] = jj_gen;
556            jj_consume_token(-1);
557            throw new ParseException();
558          }
559          label_2:
560          while (true) {
561            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
562            case DOCUMENTATION_CONTINUE:
563              ;
564              break;
565            default:
566              jj_la1[8] = jj_gen;
567              break label_2;
568            }
569            jj_consume_token(DOCUMENTATION_CONTINUE);
570          }
571          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
572          case DOCUMENTATION:
573          case DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT:
574            ;
575            break;
576          default:
577            jj_la1[9] = jj_gen;
578            break label_1;
579          }
580        }
581      }
582    
583      final public void LookaheadBody() throws ParseException {
584        jj_consume_token(1);
585        label_3:
586        while (true) {
587          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
588          case 1:
589          case 2:
590          case 5:
591          case 6:
592          case 7:
593          case 8:
594          case 10:
595          case 13:
596          case 14:
597          case 15:
598          case 16:
599          case 17:
600          case 18:
601          case 19:
602          case 26:
603          case 27:
604          case 31:
605          case 32:
606          case 33:
607          case 34:
608          case 35:
609          case 36:
610          case IDENTIFIER:
611          case ESCAPED_IDENTIFIER:
612          case PREFIXED_NAME:
613          case LITERAL:
614            ;
615            break;
616          default:
617            jj_la1[10] = jj_gen;
618            break label_3;
619          }
620          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
621          case PREFIXED_NAME:
622            jj_consume_token(PREFIXED_NAME);
623            break;
624          case 5:
625          case 6:
626          case 7:
627          case 10:
628          case 13:
629          case 14:
630          case 15:
631          case 16:
632          case 17:
633          case 18:
634          case 19:
635          case 26:
636          case 27:
637          case 31:
638          case 32:
639          case 33:
640          case 34:
641          case 35:
642          case 36:
643          case IDENTIFIER:
644          case ESCAPED_IDENTIFIER:
645            UnprefixedName();
646            break;
647          case 2:
648            jj_consume_token(2);
649            break;
650          case LITERAL:
651            jj_consume_token(LITERAL);
652            break;
653          case 8:
654            jj_consume_token(8);
655            break;
656          case 1:
657            LookaheadBody();
658            break;
659          default:
660            jj_la1[11] = jj_gen;
661            jj_consume_token(-1);
662            throw new ParseException();
663          }
664        }
665        jj_consume_token(9);
666      }
667    
668      final public ParsedPattern IncludedGrammar(IncludedGrammar g) throws ParseException {
669      Annotations a;
670      ParsedPattern p;
671        Preamble();
672        if (jj_2_2(2147483647)) {
673          a = GrammarBody(g, g, getTopLevelCommentsAsAnnotations());
674        } else {
675          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
676          case 1:
677          case 10:
678          case DOCUMENTATION:
679          case DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT:
680            a = Annotations();
681            jj_consume_token(10);
682            jj_consume_token(11);
683            a = GrammarBody(g, g, a);
684                                                                    topLevelComments(g);
685            jj_consume_token(12);
686            break;
687          default:
688            jj_la1[12] = jj_gen;
689            jj_consume_token(-1);
690            throw new ParseException();
691          }
692        }
693        p = afterComments(g.endIncludedGrammar(sb.makeLocation(sourceUri, 1, 1), a));
694        jj_consume_token(0);
695        {if (true) return p;}
696        throw new Error("Missing return statement in function");
697      }
698    
699      final public ParsedPattern TopLevelGrammar(Scope scope) throws ParseException {
700      Annotations a = getTopLevelCommentsAsAnnotations();
701      Grammar g;
702      ParsedPattern p;
703        g = sb.makeGrammar(scope);
704        a = GrammarBody(g, g, a);
705        p = afterComments(g.endGrammar(sb.makeLocation(sourceUri, 1, 1), a));
706        jj_consume_token(0);
707        {if (true) return p;}
708        throw new Error("Missing return statement in function");
709      }
710    
711      final public void Preamble() throws ParseException {
712        label_4:
713        while (true) {
714          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
715          case 13:
716          case 14:
717          case 16:
718            ;
719            break;
720          default:
721            jj_la1[13] = jj_gen;
722            break label_4;
723          }
724          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
725          case 13:
726          case 14:
727            NamespaceDecl();
728            break;
729          case 16:
730            DatatypesDecl();
731            break;
732          default:
733            jj_la1[14] = jj_gen;
734            jj_consume_token(-1);
735            throw new ParseException();
736          }
737        }
738        namespaceTable.put("xml", WellKnownNamespaces.XML);
739        if (datatypesTable.get("xsd") == null)
740          datatypesTable.put("xsd", WellKnownNamespaces.XML_SCHEMA_DATATYPES);
741      }
742    
743      final public void NamespaceDecl() throws ParseException {
744      LocatedString prefix = null;
745      boolean isDefault = false;
746      String namespaceName;
747        noteTopLevelComments();
748        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
749        case 13:
750          jj_consume_token(13);
751          prefix = UnprefixedName();
752          break;
753        case 14:
754          jj_consume_token(14);
755                       isDefault = true;
756          jj_consume_token(13);
757          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
758          case 5:
759          case 6:
760          case 7:
761          case 10:
762          case 13:
763          case 14:
764          case 15:
765          case 16:
766          case 17:
767          case 18:
768          case 19:
769          case 26:
770          case 27:
771          case 31:
772          case 32:
773          case 33:
774          case 34:
775          case 35:
776          case 36:
777          case IDENTIFIER:
778          case ESCAPED_IDENTIFIER:
779            prefix = UnprefixedName();
780            break;
781          default:
782            jj_la1[15] = jj_gen;
783            ;
784          }
785          break;
786        default:
787          jj_la1[16] = jj_gen;
788          jj_consume_token(-1);
789          throw new ParseException();
790        }
791        jj_consume_token(2);
792        namespaceName = NamespaceName();
793        if (isDefault)
794          defaultNamespace = namespaceName;
795        if (prefix != null) {
796          if (prefix.getString().equals("xmlns"))
797            error("xmlns_prefix", prefix.getToken());
798          else if (prefix.getString().equals("xml")) {
799            if (!namespaceName.equals(WellKnownNamespaces.XML))
800              error("xml_prefix_bad_uri", prefix.getToken());
801          }
802          else if (namespaceName.equals(WellKnownNamespaces.XML))
803            error("xml_uri_bad_prefix", prefix.getToken());
804          else {
805            if (namespaceName.equals(WellKnownNamespaces.RELAX_NG_COMPATIBILITY_ANNOTATIONS))
806              compatibilityPrefix = prefix.getString();
807            namespaceTable.put(prefix.getString(), namespaceName);
808          }
809        }
810      }
811    
812      final public String NamespaceName() throws ParseException {
813      String r;
814        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
815        case LITERAL:
816          r = Literal();
817          break;
818        case 15:
819          jj_consume_token(15);
820                                   r = SchemaBuilder.INHERIT_NS;
821          break;
822        default:
823          jj_la1[17] = jj_gen;
824          jj_consume_token(-1);
825          throw new ParseException();
826        }
827        {if (true) return r;}
828        throw new Error("Missing return statement in function");
829      }
830    
831      final public void DatatypesDecl() throws ParseException {
832      LocatedString prefix;
833      String uri;
834        noteTopLevelComments();
835        jj_consume_token(16);
836        prefix = UnprefixedName();
837        jj_consume_token(2);
838        uri = Literal();
839        datatypesTable.put(prefix.getString(), uri);
840      }
841    
842      final public ParsedPattern AnnotatedPrimaryExpr(boolean topLevel, Scope scope, Token[] except) throws ParseException {
843      Annotations a;
844      ParsedPattern p;
845      ParsedElementAnnotation e;
846      Token t;
847        a = Annotations();
848        p = PrimaryExpr(topLevel, scope, a, except);
849        label_5:
850        while (true) {
851          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
852          case FANNOTATE:
853            ;
854            break;
855          default:
856            jj_la1[18] = jj_gen;
857            break label_5;
858          }
859          t = jj_consume_token(FANNOTATE);
860          e = AnnotationElement(false);
861           if (topLevel)
862             error("top_level_follow_annotation", t);
863           else
864             p = sb.annotateAfter(p, e);
865        }
866        {if (true) return p;}
867        throw new Error("Missing return statement in function");
868      }
869    
870      final public ParsedPattern PrimaryExpr(boolean topLevel, Scope scope, Annotations a, Token[] except) throws ParseException {
871      ParsedPattern p;
872        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
873        case 26:
874          p = ElementExpr(scope, a);
875          break;
876        case 27:
877          p = AttributeExpr(scope, a);
878          break;
879        case 10:
880          p = GrammarExpr(scope, a);
881          break;
882        case 33:
883          p = ExternalRefExpr(scope, a);
884          break;
885        case 31:
886          p = ListExpr(scope, a);
887          break;
888        case 32:
889          p = MixedExpr(scope, a);
890          break;
891        case 28:
892          p = ParenExpr(topLevel, scope, a);
893          break;
894        case IDENTIFIER:
895        case ESCAPED_IDENTIFIER:
896          p = IdentifierExpr(scope, a);
897          break;
898        case 34:
899          p = ParentExpr(scope, a);
900          break;
901        case 35:
902        case 36:
903        case PREFIXED_NAME:
904          p = DataExpr(topLevel, scope, a, except);
905          break;
906        case LITERAL:
907          p = ValueExpr(topLevel, a);
908          break;
909        case 18:
910          p = TextExpr(a);
911          break;
912        case 17:
913          p = EmptyExpr(a);
914          break;
915        case 19:
916          p = NotAllowedExpr(a);
917          break;
918        default:
919          jj_la1[19] = jj_gen;
920          jj_consume_token(-1);
921          throw new ParseException();
922        }
923        {if (true) return p;}
924        throw new Error("Missing return statement in function");
925      }
926    
927      final public ParsedPattern EmptyExpr(Annotations a) throws ParseException {
928      Token t;
929        t = jj_consume_token(17);
930        {if (true) return sb.makeEmpty(makeLocation(t), a);}
931        throw new Error("Missing return statement in function");
932      }
933    
934      final public ParsedPattern TextExpr(Annotations a) throws ParseException {
935      Token t;
936        t = jj_consume_token(18);
937        {if (true) return sb.makeText(makeLocation(t), a);}
938        throw new Error("Missing return statement in function");
939      }
940    
941      final public ParsedPattern NotAllowedExpr(Annotations a) throws ParseException {
942      Token t;
943        t = jj_consume_token(19);
944        {if (true) return sb.makeNotAllowed(makeLocation(t), a);}
945        throw new Error("Missing return statement in function");
946      }
947    
948      final public ParsedPattern Expr(boolean topLevel, Scope scope, Token t, Annotations a) throws ParseException {
949      ParsedPattern p;
950      ParsedPattern[] patterns = new ParsedPattern[2];
951      int nPatterns = 1;
952      boolean[] hadOccur = new boolean[1];
953      Token[] except = new Token[1];
954        p = UnaryExpr(topLevel, scope, hadOccur, except);
955        patterns[0] = p;
956        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
957        case 20:
958        case 21:
959        case 22:
960          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
961          case 20:
962         checkExcept(except);
963            label_6:
964            while (true) {
965              t = jj_consume_token(20);
966              p = UnaryExpr(topLevel, scope, null, except);
967           patterns = addPattern(patterns, nPatterns++, p); checkExcept(except);
968              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
969              case 20:
970                ;
971                break;
972              default:
973                jj_la1[20] = jj_gen;
974                break label_6;
975              }
976            }
977          p = sb.makeChoice(patterns, nPatterns, makeLocation(t), a);
978            break;
979          case 21:
980            label_7:
981            while (true) {
982              t = jj_consume_token(21);
983              p = UnaryExpr(topLevel, scope, null, except);
984           patterns = addPattern(patterns, nPatterns++, p); checkExcept(except);
985              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
986              case 21:
987                ;
988                break;
989              default:
990                jj_la1[21] = jj_gen;
991                break label_7;
992              }
993            }
994          p = sb.makeInterleave(patterns, nPatterns, makeLocation(t), a);
995            break;
996          case 22:
997            label_8:
998            while (true) {
999              t = jj_consume_token(22);
1000              p = UnaryExpr(topLevel, scope, null, except);
1001           patterns = addPattern(patterns, nPatterns++, p); checkExcept(except);
1002              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1003              case 22:
1004                ;
1005                break;
1006              default:
1007                jj_la1[22] = jj_gen;
1008                break label_8;
1009              }
1010            }
1011          p = sb.makeGroup(patterns, nPatterns, makeLocation(t), a);
1012            break;
1013          default:
1014            jj_la1[23] = jj_gen;
1015            jj_consume_token(-1);
1016            throw new ParseException();
1017          }
1018          break;
1019        default:
1020          jj_la1[24] = jj_gen;
1021          ;
1022        }
1023        if (nPatterns == 1 && a != null) {
1024          if (hadOccur[0])
1025            p = sb.annotate(p, a);
1026          else
1027            p = sb.makeGroup(patterns, nPatterns, makeLocation(t), a);
1028        }
1029        {if (true) return p;}
1030        throw new Error("Missing return statement in function");
1031      }
1032    
1033      final public ParsedPattern UnaryExpr(boolean topLevel, Scope scope, boolean[] hadOccur, Token[] except) throws ParseException {
1034      ParsedPattern p;
1035      Token t;
1036      ParsedElementAnnotation e;
1037        p = AnnotatedPrimaryExpr(topLevel, scope, except);
1038        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1039        case 23:
1040        case 24:
1041        case 25:
1042         if (hadOccur != null) hadOccur[0] = true;
1043         p = afterComments(p);
1044          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1045          case 23:
1046            t = jj_consume_token(23);
1047                  checkExcept(except); p = sb.makeOneOrMore(p, makeLocation(t), null);
1048            break;
1049          case 24:
1050            t = jj_consume_token(24);
1051                    checkExcept(except); p = sb.makeOptional(p, makeLocation(t), null);
1052            break;
1053          case 25:
1054            t = jj_consume_token(25);
1055                    checkExcept(except); p = sb.makeZeroOrMore(p, makeLocation(t), null);
1056            break;
1057          default:
1058            jj_la1[25] = jj_gen;
1059            jj_consume_token(-1);
1060            throw new ParseException();
1061          }
1062          label_9:
1063          while (true) {
1064            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1065            case FANNOTATE:
1066              ;
1067              break;
1068            default:
1069              jj_la1[26] = jj_gen;
1070              break label_9;
1071            }
1072            t = jj_consume_token(FANNOTATE);
1073            e = AnnotationElement(false);
1074            if (topLevel)
1075              error("top_level_follow_annotation", t);
1076            else
1077              p = sb.annotateAfter(p, e);
1078          }
1079          break;
1080        default:
1081          jj_la1[27] = jj_gen;
1082          ;
1083        }
1084        {if (true) return p;}
1085        throw new Error("Missing return statement in function");
1086      }
1087    
1088      final public ParsedPattern ElementExpr(Scope scope, Annotations a) throws ParseException {
1089      Token t;
1090      ParsedNameClass nc;
1091      ParsedPattern p;
1092        t = jj_consume_token(26);
1093        nc = NameClass(IN_ELEMENT, null);
1094        jj_consume_token(11);
1095        p = Expr(false, scope, null, null);
1096        p = afterComments(p);
1097        jj_consume_token(12);
1098        {if (true) return sb.makeElement(nc, p, makeLocation(t), a);}
1099        throw new Error("Missing return statement in function");
1100      }
1101    
1102      final public ParsedPattern AttributeExpr(Scope scope, Annotations a) throws ParseException {
1103      Token t;
1104      ParsedNameClass nc;
1105      ParsedPattern p;
1106        t = jj_consume_token(27);
1107        nc = NameClass(IN_ATTRIBUTE, null);
1108        jj_consume_token(11);
1109        p = Expr(false, scope, null, null);
1110        p = afterComments(p);
1111        jj_consume_token(12);
1112        {if (true) return sb.makeAttribute(nc, p, makeLocation(t), a);}
1113        throw new Error("Missing return statement in function");
1114      }
1115    
1116      final public ParsedNameClass NameClass(int context, Annotations[] pa) throws ParseException {
1117      Annotations a;
1118      ParsedNameClass nc;
1119        a = Annotations();
1120        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1121        case 5:
1122        case 6:
1123        case 7:
1124        case 10:
1125        case 13:
1126        case 14:
1127        case 15:
1128        case 16:
1129        case 17:
1130        case 18:
1131        case 19:
1132        case 26:
1133        case 27:
1134        case 28:
1135        case 31:
1136        case 32:
1137        case 33:
1138        case 34:
1139        case 35:
1140        case 36:
1141        case IDENTIFIER:
1142        case ESCAPED_IDENTIFIER:
1143        case PREFIXED_NAME:
1144          nc = PrimaryNameClass(context, a);
1145          nc = AnnotateAfter(nc);
1146          nc = NameClassAlternatives(context, nc, pa);
1147          break;
1148        case 25:
1149          nc = AnyNameExceptClass(context, a, pa);
1150          break;
1151        case PREFIX_STAR:
1152          nc = NsNameExceptClass(context, a, pa);
1153          break;
1154        default:
1155          jj_la1[28] = jj_gen;
1156          jj_consume_token(-1);
1157          throw new ParseException();
1158        }
1159        {if (true) return nc;}
1160        throw new Error("Missing return statement in function");
1161      }
1162    
1163      final public ParsedNameClass AnnotateAfter(ParsedNameClass nc) throws ParseException {
1164      ParsedElementAnnotation e;
1165        label_10:
1166        while (true) {
1167          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1168          case FANNOTATE:
1169            ;
1170            break;
1171          default:
1172            jj_la1[29] = jj_gen;
1173            break label_10;
1174          }
1175          jj_consume_token(FANNOTATE);
1176          e = AnnotationElement(false);
1177                                                   nc = sb.annotateAfter(nc, e);
1178        }
1179        {if (true) return nc;}
1180        throw new Error("Missing return statement in function");
1181      }
1182    
1183      final public ParsedNameClass NameClassAlternatives(int context, ParsedNameClass nc, Annotations[] pa) throws ParseException {
1184      Token t;
1185      ParsedNameClass[] nameClasses;
1186      int nNameClasses;
1187        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1188        case 20:
1189          nameClasses = new ParsedNameClass[2];
1190          nameClasses[0] = nc;
1191          nNameClasses = 1;
1192          label_11:
1193          while (true) {
1194            t = jj_consume_token(20);
1195            nc = BasicNameClass(context);
1196            nc = AnnotateAfter(nc);
1197          if (nNameClasses >= nameClasses.length) {
1198            ParsedNameClass[] oldNameClasses = nameClasses;
1199            nameClasses = new ParsedNameClass[oldNameClasses.length*2];
1200            System.arraycopy(oldNameClasses, 0, nameClasses, 0, oldNameClasses.length);
1201          }
1202          nameClasses[nNameClasses++] = nc;
1203            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1204            case 20:
1205              ;
1206              break;
1207            default:
1208              jj_la1[30] = jj_gen;
1209              break label_11;
1210            }
1211          }
1212          Annotations a;
1213          if (pa == null)
1214            a = null;
1215          else {
1216            a = pa[0];
1217            pa[0] = null;
1218          }
1219          nc = sb.makeChoice(nameClasses, nNameClasses, makeLocation(t), a);
1220          break;
1221        default:
1222          jj_la1[31] = jj_gen;
1223          ;
1224        }
1225        {if (true) return nc;}
1226        throw new Error("Missing return statement in function");
1227      }
1228    
1229      final public ParsedNameClass BasicNameClass(int context) throws ParseException {
1230      Annotations a;
1231      ParsedNameClass nc;
1232        a = Annotations();
1233        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1234        case 5:
1235        case 6:
1236        case 7:
1237        case 10:
1238        case 13:
1239        case 14:
1240        case 15:
1241        case 16:
1242        case 17:
1243        case 18:
1244        case 19:
1245        case 26:
1246        case 27:
1247        case 28:
1248        case 31:
1249        case 32:
1250        case 33:
1251        case 34:
1252        case 35:
1253        case 36:
1254        case IDENTIFIER:
1255        case ESCAPED_IDENTIFIER:
1256        case PREFIXED_NAME:
1257          nc = PrimaryNameClass(context, a);
1258          break;
1259        case 25:
1260        case PREFIX_STAR:
1261          nc = OpenNameClass(context, a);
1262          break;
1263        default:
1264          jj_la1[32] = jj_gen;
1265          jj_consume_token(-1);
1266          throw new ParseException();
1267        }
1268        {if (true) return nc;}
1269        throw new Error("Missing return statement in function");
1270      }
1271    
1272      final public ParsedNameClass PrimaryNameClass(int context, Annotations a) throws ParseException {
1273      ParsedNameClass nc;
1274        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1275        case 5:
1276        case 6:
1277        case 7:
1278        case 10:
1279        case 13:
1280        case 14:
1281        case 15:
1282        case 16:
1283        case 17:
1284        case 18:
1285        case 19:
1286        case 26:
1287        case 27:
1288        case 31:
1289        case 32:
1290        case 33:
1291        case 34:
1292        case 35:
1293        case 36:
1294        case IDENTIFIER:
1295        case ESCAPED_IDENTIFIER:
1296          nc = UnprefixedNameClass(context, a);
1297          break;
1298        case PREFIXED_NAME:
1299          nc = PrefixedNameClass(a);
1300          break;
1301        case 28:
1302          nc = ParenNameClass(context, a);
1303          break;
1304        default:
1305          jj_la1[33] = jj_gen;
1306          jj_consume_token(-1);
1307          throw new ParseException();
1308        }
1309        {if (true) return nc;}
1310        throw new Error("Missing return statement in function");
1311      }
1312    
1313      final public ParsedNameClass OpenNameClass(int context, Annotations a) throws ParseException {
1314      Token t;
1315      LocatedString ns;
1316        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1317        case PREFIX_STAR:
1318          ns = NsName();
1319                      checkNsName(context, ns); {if (true) return sb.makeNsName(ns.getString(), ns.getLocation(), a);}
1320          break;
1321        case 25:
1322          t = jj_consume_token(25);
1323                  checkAnyName(context, t); {if (true) return sb.makeAnyName(makeLocation(t), a);}
1324          break;
1325        default:
1326          jj_la1[34] = jj_gen;
1327          jj_consume_token(-1);
1328          throw new ParseException();
1329        }
1330        throw new Error("Missing return statement in function");
1331      }
1332    
1333      final public ParsedNameClass UnprefixedNameClass(int context, Annotations a) throws ParseException {
1334      LocatedString name;
1335        name = UnprefixedName();
1336        String ns;
1337        if ((context & (IN_ATTRIBUTE|IN_ELEMENT)) == IN_ATTRIBUTE)
1338          ns = "";
1339        else
1340          ns = defaultNamespace;
1341        {if (true) return sb.makeName(ns, name.getString(), null, name.getLocation(), a);}
1342        throw new Error("Missing return statement in function");
1343      }
1344    
1345      final public ParsedNameClass PrefixedNameClass(Annotations a) throws ParseException {
1346      Token t;
1347        t = jj_consume_token(PREFIXED_NAME);
1348        String qn = t.image;
1349        int colon = qn.indexOf(':');
1350        String prefix = qn.substring(0, colon);
1351        {if (true) return sb.makeName(lookupPrefix(prefix, t), qn.substring(colon + 1), prefix, makeLocation(t), a);}
1352        throw new Error("Missing return statement in function");
1353      }
1354    
1355      final public ParsedNameClass NsNameExceptClass(int context, Annotations a, Annotations[] pa) throws ParseException {
1356      LocatedString ns;
1357      ParsedNameClass nc;
1358        ns = NsName();
1359        checkNsName(context, ns);
1360        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1361        case 30:
1362          nc = ExceptNameClass(context | IN_NS_NAME);
1363         nc = sb.makeNsName(ns.getString(), nc, ns.getLocation(), a);
1364          nc = AnnotateAfter(nc);
1365          break;
1366        default:
1367          jj_la1[35] = jj_gen;
1368          nc = sb.makeNsName(ns.getString(), ns.getLocation(), a);
1369          nc = AnnotateAfter(nc);
1370          nc = NameClassAlternatives(context, nc, pa);
1371        }
1372        {if (true) return nc;}
1373        throw new Error("Missing return statement in function");
1374      }
1375    
1376      final public LocatedString NsName() throws ParseException {
1377      Token t;
1378        t = jj_consume_token(PREFIX_STAR);
1379        String qn = t.image;
1380        String prefix = qn.substring(0, qn.length() - 2);
1381        {if (true) return new LocatedString(lookupPrefix(prefix, t), t);}
1382        throw new Error("Missing return statement in function");
1383      }
1384    
1385      final public ParsedNameClass AnyNameExceptClass(int context, Annotations a, Annotations[] pa) throws ParseException {
1386      Token t;
1387      ParsedNameClass nc;
1388        t = jj_consume_token(25);
1389        checkAnyName(context, t);
1390        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1391        case 30:
1392          nc = ExceptNameClass(context | IN_ANY_NAME);
1393         nc = sb.makeAnyName(nc, makeLocation(t), a);
1394          nc = AnnotateAfter(nc);
1395          break;
1396        default:
1397          jj_la1[36] = jj_gen;
1398          nc = sb.makeAnyName(makeLocation(t), a);
1399          nc = AnnotateAfter(nc);
1400          nc = NameClassAlternatives(context, nc, pa);
1401        }
1402        {if (true) return nc;}
1403        throw new Error("Missing return statement in function");
1404      }
1405    
1406      final public ParsedNameClass ParenNameClass(int context, Annotations a) throws ParseException {
1407      Token t;
1408      ParsedNameClass nc;
1409      Annotations[] pa = new Annotations[]{ a };
1410        t = jj_consume_token(28);
1411        nc = NameClass(context, pa);
1412                                            nc = afterComments(nc);
1413        jj_consume_token(29);
1414        if (pa[0] != null)
1415          nc = sb.makeChoice(new ParsedNameClass[] { nc }, 1, makeLocation(t), pa[0]);
1416        {if (true) return nc;}
1417        throw new Error("Missing return statement in function");
1418      }
1419    
1420      final public ParsedNameClass ExceptNameClass(int context) throws ParseException {
1421      ParsedNameClass nc;
1422        jj_consume_token(30);
1423        nc = BasicNameClass(context);
1424        {if (true) return nc;}
1425        throw new Error("Missing return statement in function");
1426      }
1427    
1428      final public ParsedPattern ListExpr(Scope scope, Annotations a) throws ParseException {
1429      Token t;
1430      ParsedPattern p;
1431        t = jj_consume_token(31);
1432        jj_consume_token(11);
1433        p = Expr(false, scope, null, null);
1434        p = afterComments(p);
1435        jj_consume_token(12);
1436        {if (true) return sb.makeList(p, makeLocation(t), a);}
1437        throw new Error("Missing return statement in function");
1438      }
1439    
1440      final public ParsedPattern MixedExpr(Scope scope, Annotations a) throws ParseException {
1441      Token t;
1442      ParsedPattern p;
1443        t = jj_consume_token(32);
1444        jj_consume_token(11);
1445        p = Expr(false, scope, null, null);
1446        p = afterComments(p);
1447        jj_consume_token(12);
1448        {if (true) return sb.makeMixed(p, makeLocation(t), a);}
1449        throw new Error("Missing return statement in function");
1450      }
1451    
1452      final public ParsedPattern GrammarExpr(Scope scope, Annotations a) throws ParseException {
1453      Token t;
1454      Grammar g;
1455        t = jj_consume_token(10);
1456                      g = sb.makeGrammar(scope);
1457        jj_consume_token(11);
1458        a = GrammarBody(g, g, a);
1459                                     topLevelComments(g);
1460        jj_consume_token(12);
1461        {if (true) return g.endGrammar(makeLocation(t), a);}
1462        throw new Error("Missing return statement in function");
1463      }
1464    
1465      final public ParsedPattern ParenExpr(boolean topLevel, Scope scope, Annotations a) throws ParseException {
1466      Token t;
1467      ParsedPattern p;
1468        t = jj_consume_token(28);
1469        p = Expr(topLevel, scope, t, a);
1470                                                p = afterComments(p);
1471        jj_consume_token(29);
1472        {if (true) return p;}
1473        throw new Error("Missing return statement in function");
1474      }
1475    
1476      final public Annotations GrammarBody(GrammarSection section, Scope scope, Annotations a) throws ParseException {
1477      ParsedElementAnnotation e;
1478        label_12:
1479        while (true) {
1480          if (jj_2_3(2)) {
1481            ;
1482          } else {
1483            break label_12;
1484          }
1485          e = AnnotationElementNotKeyword();
1486         if (a == null) a = sb.makeAnnotations(null, getContext()); a.addElement(e);
1487        }
1488        label_13:
1489        while (true) {
1490          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1491          case 1:
1492          case 5:
1493          case 6:
1494          case 7:
1495          case DOCUMENTATION:
1496          case DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT:
1497          case IDENTIFIER:
1498          case ESCAPED_IDENTIFIER:
1499            ;
1500            break;
1501          default:
1502            jj_la1[37] = jj_gen;
1503            break label_13;
1504          }
1505          GrammarComponent(section, scope);
1506        }
1507        {if (true) return a;}
1508        throw new Error("Missing return statement in function");
1509      }
1510    
1511      final public void GrammarComponent(GrammarSection section, Scope scope) throws ParseException {
1512      ParsedElementAnnotation e;
1513      Annotations a;
1514        a = Annotations();
1515        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1516        case 5:
1517        case IDENTIFIER:
1518        case ESCAPED_IDENTIFIER:
1519          Definition(section, scope, a);
1520          break;
1521        case 7:
1522          Include(section, scope, a);
1523          break;
1524        case 6:
1525          Div(section, scope, a);
1526          break;
1527        default:
1528          jj_la1[38] = jj_gen;
1529          jj_consume_token(-1);
1530          throw new ParseException();
1531        }
1532        label_14:
1533        while (true) {
1534          if (jj_2_4(2)) {
1535            ;
1536          } else {
1537            break label_14;
1538          }
1539          e = AnnotationElementNotKeyword();
1540                                                        section.topLevelAnnotation(e);
1541        }
1542      }
1543    
1544      final public void Definition(GrammarSection section, Scope scope, Annotations a) throws ParseException {
1545        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1546        case IDENTIFIER:
1547        case ESCAPED_IDENTIFIER:
1548          Define(section, scope, a);
1549          break;
1550        case 5:
1551          Start(section, scope, a);
1552          break;
1553        default:
1554          jj_la1[39] = jj_gen;
1555          jj_consume_token(-1);
1556          throw new ParseException();
1557        }
1558      }
1559    
1560      final public void Start(GrammarSection section, Scope scope, Annotations a) throws ParseException {
1561      Token t;
1562      GrammarSection.Combine combine;
1563      ParsedPattern p;
1564        t = jj_consume_token(5);
1565        combine = AssignOp();
1566        p = Expr(false, scope, null, null);
1567        section.define(GrammarSection.START, combine, p, makeLocation(t), a);
1568      }
1569    
1570      final public void Define(GrammarSection section, Scope scope, Annotations a) throws ParseException {
1571      LocatedString name;
1572      GrammarSection.Combine combine;
1573      ParsedPattern p;
1574        name = Identifier();
1575        combine = AssignOp();
1576        p = Expr(false, scope, null, null);
1577        section.define(name.getString(), combine, p, name.getLocation(), a);
1578      }
1579    
1580      final public GrammarSection.Combine AssignOp() throws ParseException {
1581        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1582        case 2:
1583          jj_consume_token(2);
1584            {if (true) return null;}
1585          break;
1586        case 4:
1587          jj_consume_token(4);
1588               {if (true) return GrammarSection.COMBINE_CHOICE;}
1589          break;
1590        case 3:
1591          jj_consume_token(3);
1592               {if (true) return GrammarSection.COMBINE_INTERLEAVE;}
1593          break;
1594        default:
1595          jj_la1[40] = jj_gen;
1596          jj_consume_token(-1);
1597          throw new ParseException();
1598        }
1599        throw new Error("Missing return statement in function");
1600      }
1601    
1602      final public void Include(GrammarSection section, Scope scope, Annotations a) throws ParseException {
1603      Token t;
1604      String href;
1605      String ns;
1606      Include include = section.makeInclude();
1607        t = jj_consume_token(7);
1608        href = Literal();
1609        ns = Inherit();
1610        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1611        case 11:
1612          jj_consume_token(11);
1613          a = IncludeBody(include, scope, a);
1614                                                topLevelComments(include);
1615          jj_consume_token(12);
1616          break;
1617        default:
1618          jj_la1[41] = jj_gen;
1619          ;
1620        }
1621        try {
1622          include.endInclude(resolve(href), ns, makeLocation(t), a);
1623        }
1624        catch (IllegalSchemaException e) { }
1625      }
1626    
1627      final public Annotations IncludeBody(GrammarSection section, Scope scope, Annotations a) throws ParseException {
1628      ParsedElementAnnotation e;
1629        label_15:
1630        while (true) {
1631          if (jj_2_5(2)) {
1632            ;
1633          } else {
1634            break label_15;
1635          }
1636          e = AnnotationElementNotKeyword();
1637         if (a == null) a = sb.makeAnnotations(null, getContext()); a.addElement(e);
1638        }
1639        label_16:
1640        while (true) {
1641          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1642          case 1:
1643          case 5:
1644          case 6:
1645          case DOCUMENTATION:
1646          case DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT:
1647          case IDENTIFIER:
1648          case ESCAPED_IDENTIFIER:
1649            ;
1650            break;
1651          default:
1652            jj_la1[42] = jj_gen;
1653            break label_16;
1654          }
1655          IncludeComponent(section, scope);
1656        }
1657        {if (true) return a;}
1658        throw new Error("Missing return statement in function");
1659      }
1660    
1661      final public void IncludeComponent(GrammarSection section, Scope scope) throws ParseException {
1662      ParsedElementAnnotation e;
1663      Annotations a;
1664        a = Annotations();
1665        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1666        case 5:
1667        case IDENTIFIER:
1668        case ESCAPED_IDENTIFIER:
1669          Definition(section, scope, a);
1670          break;
1671        case 6:
1672          IncludeDiv(section, scope, a);
1673          break;
1674        default:
1675          jj_la1[43] = jj_gen;
1676          jj_consume_token(-1);
1677          throw new ParseException();
1678        }
1679        label_17:
1680        while (true) {
1681          if (jj_2_6(2)) {
1682            ;
1683          } else {
1684            break label_17;
1685          }
1686          e = AnnotationElementNotKeyword();
1687                                                        section.topLevelAnnotation(e);
1688        }
1689      }
1690    
1691      final public void Div(GrammarSection section, Scope scope, Annotations a) throws ParseException {
1692      Token t;
1693      Div div = section.makeDiv();
1694        t = jj_consume_token(6);
1695        jj_consume_token(11);
1696        a = GrammarBody(div, scope, a);
1697                                                     topLevelComments(div);
1698        jj_consume_token(12);
1699        div.endDiv(makeLocation(t), a);
1700      }
1701    
1702      final public void IncludeDiv(GrammarSection section, Scope scope, Annotations a) throws ParseException {
1703      Token t;
1704      Div div = section.makeDiv();
1705        t = jj_consume_token(6);
1706        jj_consume_token(11);
1707        a = IncludeBody(div, scope, a);
1708                                                     topLevelComments(div);
1709        jj_consume_token(12);
1710        div.endDiv(makeLocation(t), a);
1711      }
1712    
1713      final public ParsedPattern ExternalRefExpr(Scope scope, Annotations a) throws ParseException {
1714      Token t;
1715      String href;
1716      String ns;
1717        t = jj_consume_token(33);
1718        href = Literal();
1719        ns = Inherit();
1720        try {
1721          {if (true) return sb.makeExternalRef(resolve(href), ns, scope, makeLocation(t), a);}
1722        }
1723        catch (IllegalSchemaException e) {
1724          {if (true) return sb.makeErrorPattern();}
1725        }
1726        throw new Error("Missing return statement in function");
1727      }
1728    
1729      final public String Inherit() throws ParseException {
1730      String ns = null;
1731        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1732        case 15:
1733          jj_consume_token(15);
1734          jj_consume_token(2);
1735          ns = Prefix();
1736          break;
1737        default:
1738          jj_la1[44] = jj_gen;
1739          ;
1740        }
1741        if (ns == null)
1742          ns = defaultNamespace;
1743        {if (true) return ns;}
1744        throw new Error("Missing return statement in function");
1745      }
1746    
1747      final public ParsedPattern ParentExpr(Scope scope, Annotations a) throws ParseException {
1748      LocatedString name;
1749        jj_consume_token(34);
1750                 a = addCommentsToChildAnnotations(a);
1751        name = Identifier();
1752        {if (true) return scope.makeParentRef(name.getString(), name.getLocation(), a);}
1753        throw new Error("Missing return statement in function");
1754      }
1755    
1756      final public ParsedPattern IdentifierExpr(Scope scope, Annotations a) throws ParseException {
1757      LocatedString name;
1758        name = Identifier();
1759        {if (true) return scope.makeRef(name.getString(), name.getLocation(), a);}
1760        throw new Error("Missing return statement in function");
1761      }
1762    
1763      final public ParsedPattern ValueExpr(boolean topLevel, Annotations a) throws ParseException {
1764      LocatedString s;
1765        s = LocatedLiteral();
1766        if (topLevel && annotationsIncludeElements) {
1767          error("top_level_follow_annotation", s.getToken());
1768          a = null;
1769        }
1770        {if (true) return sb.makeValue("", "token", s.getString(), getContext(), defaultNamespace, s.getLocation(), a);}
1771        throw new Error("Missing return statement in function");
1772      }
1773    
1774      final public ParsedPattern DataExpr(boolean topLevel, Scope scope, Annotations a, Token[] except) throws ParseException {
1775      Token datatypeToken;
1776      Location loc;
1777      String datatype;
1778      String datatypeUri = null;
1779      String s = null;
1780      ParsedPattern e = null;
1781      DataPatternBuilder dpb;
1782        datatypeToken = DatatypeName();
1783        datatype = datatypeToken.image;
1784        loc = makeLocation(datatypeToken);
1785        int colon = datatype.indexOf(':');
1786        if (colon < 0)
1787          datatypeUri = "";
1788        else {
1789          String prefix = datatype.substring(0, colon);
1790          datatypeUri = lookupDatatype(prefix, datatypeToken);
1791          datatype = datatype.substring(colon + 1);
1792        }
1793        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1794        case LITERAL:
1795          s = Literal();
1796          if (topLevel && annotationsIncludeElements) {
1797            error("top_level_follow_annotation", datatypeToken);
1798            a = null;
1799          }
1800          {if (true) return sb.makeValue(datatypeUri, datatype, s, getContext(), defaultNamespace, loc, a);}
1801          break;
1802        default:
1803          jj_la1[48] = jj_gen;
1804            dpb = sb.makeDataPatternBuilder(datatypeUri, datatype, loc);
1805          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1806          case 11:
1807            Params(dpb);
1808            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1809            case 30:
1810              e = Except(scope, except);
1811              break;
1812            default:
1813              jj_la1[45] = jj_gen;
1814              ;
1815            }
1816            break;
1817          default:
1818            jj_la1[47] = jj_gen;
1819            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1820            case 30:
1821              e = Except(scope, except);
1822              break;
1823            default:
1824              jj_la1[46] = jj_gen;
1825              ;
1826            }
1827          }
1828            {if (true) return e == null ? dpb.makePattern(loc, a) : dpb.makePattern(e, loc, a);}
1829        }
1830        throw new Error("Missing return statement in function");
1831      }
1832    
1833      final public Token DatatypeName() throws ParseException {
1834      Token t;
1835        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1836        case 35:
1837          t = jj_consume_token(35);
1838          break;
1839        case 36:
1840          t = jj_consume_token(36);
1841          break;
1842        case PREFIXED_NAME:
1843          t = jj_consume_token(PREFIXED_NAME);
1844          break;
1845        default:
1846          jj_la1[49] = jj_gen;
1847          jj_consume_token(-1);
1848          throw new ParseException();
1849        }
1850        {if (true) return t;}
1851        throw new Error("Missing return statement in function");
1852      }
1853    
1854      final public LocatedString Identifier() throws ParseException {
1855      LocatedString s;
1856      Token t;
1857        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1858        case IDENTIFIER:
1859          t = jj_consume_token(IDENTIFIER);
1860                          s = new LocatedString(t.image, t);
1861          break;
1862        case ESCAPED_IDENTIFIER:
1863          t = jj_consume_token(ESCAPED_IDENTIFIER);
1864                                   s = new LocatedString(t.image.substring(1), t);
1865          break;
1866        default:
1867          jj_la1[50] = jj_gen;
1868          jj_consume_token(-1);
1869          throw new ParseException();
1870        }
1871        {if (true) return s;}
1872        throw new Error("Missing return statement in function");
1873      }
1874    
1875      final public String Prefix() throws ParseException {
1876      Token t;
1877      String prefix;
1878        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1879        case IDENTIFIER:
1880          t = jj_consume_token(IDENTIFIER);
1881                          prefix = t.image;
1882          break;
1883        case ESCAPED_IDENTIFIER:
1884          t = jj_consume_token(ESCAPED_IDENTIFIER);
1885                                   prefix = t.image.substring(1);
1886          break;
1887        case 5:
1888        case 6:
1889        case 7:
1890        case 10:
1891        case 13:
1892        case 14:
1893        case 15:
1894        case 16:
1895        case 17:
1896        case 18:
1897        case 19:
1898        case 26:
1899        case 27:
1900        case 31:
1901        case 32:
1902        case 33:
1903        case 34:
1904        case 35:
1905        case 36:
1906          t = Keyword();
1907                        prefix = t.image;
1908          break;
1909        default:
1910          jj_la1[51] = jj_gen;
1911          jj_consume_token(-1);
1912          throw new ParseException();
1913        }
1914        {if (true) return lookupPrefix(prefix, t);}
1915        throw new Error("Missing return statement in function");
1916      }
1917    
1918      final public LocatedString UnprefixedName() throws ParseException {
1919      LocatedString s;
1920      Token t;
1921        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1922        case IDENTIFIER:
1923        case ESCAPED_IDENTIFIER:
1924          s = Identifier();
1925          break;
1926        case 5:
1927        case 6:
1928        case 7:
1929        case 10:
1930        case 13:
1931        case 14:
1932        case 15:
1933        case 16:
1934        case 17:
1935        case 18:
1936        case 19:
1937        case 26:
1938        case 27:
1939        case 31:
1940        case 32:
1941        case 33:
1942        case 34:
1943        case 35:
1944        case 36:
1945          t = Keyword();
1946                         s = new LocatedString(t.image, t);
1947          break;
1948        default:
1949          jj_la1[52] = jj_gen;
1950          jj_consume_token(-1);
1951          throw new ParseException();
1952        }
1953        {if (true) return s;}
1954        throw new Error("Missing return statement in function");
1955      }
1956    
1957      final public void Params(DataPatternBuilder dpb) throws ParseException {
1958        jj_consume_token(11);
1959        label_18:
1960        while (true) {
1961          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1962          case 1:
1963          case 5:
1964          case 6:
1965          case 7:
1966          case 10:
1967          case 13:
1968          case 14:
1969          case 15:
1970          case 16:
1971          case 17:
1972          case 18:
1973          case 19:
1974          case 26:
1975          case 27:
1976          case 31:
1977          case 32:
1978          case 33:
1979          case 34:
1980          case 35:
1981          case 36:
1982          case DOCUMENTATION:
1983          case DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT:
1984          case IDENTIFIER:
1985          case ESCAPED_IDENTIFIER:
1986            ;
1987            break;
1988          default:
1989            jj_la1[53] = jj_gen;
1990            break label_18;
1991          }
1992          Param(dpb);
1993        }
1994        jj_consume_token(12);
1995      }
1996    
1997      final public void Param(DataPatternBuilder dpb) throws ParseException {
1998      LocatedString name;
1999      Annotations a;
2000      String value;
2001        a = Annotations();
2002        name = UnprefixedName();
2003        jj_consume_token(2);
2004                                                      a = addCommentsToLeadingAnnotations(a);
2005        value = Literal();
2006        dpb.addParam(name.getString(), value, getContext(), defaultNamespace, name.getLocation(), a);
2007      }
2008    
2009      final public ParsedPattern Except(Scope scope, Token[] except) throws ParseException {
2010      Annotations a;
2011      ParsedPattern p;
2012      Token t;
2013      Token[] innerExcept = new Token[1];
2014        t = jj_consume_token(30);
2015        a = Annotations();
2016        p = PrimaryExpr(false, scope, a, innerExcept);
2017        checkExcept(innerExcept);
2018        except[0] = t;
2019        {if (true) return p;}
2020        throw new Error("Missing return statement in function");
2021      }
2022    
2023      final public ParsedElementAnnotation Documentation() throws ParseException {
2024      CommentList comments = getComments();
2025      ElementAnnotationBuilder eab;
2026      Token t;
2027      String s;
2028        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2029        case DOCUMENTATION:
2030          t = jj_consume_token(DOCUMENTATION);
2031          break;
2032        case DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT:
2033          t = jj_consume_token(DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT);
2034          break;
2035        default:
2036          jj_la1[54] = jj_gen;
2037          jj_consume_token(-1);
2038          throw new ParseException();
2039        }
2040        eab = sb.makeElementAnnotationBuilder(WellKnownNamespaces.RELAX_NG_COMPATIBILITY_ANNOTATIONS,
2041                                              "documentation",
2042                                              getCompatibilityPrefix(),
2043                                              makeLocation(t),
2044                                              comments,
2045                                              getContext());
2046        eab.addText(mungeComment(t.image), makeLocation(t), null);
2047        label_19:
2048        while (true) {
2049          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2050          case DOCUMENTATION_CONTINUE:
2051            ;
2052            break;
2053          default:
2054            jj_la1[55] = jj_gen;
2055            break label_19;
2056          }
2057          t = jj_consume_token(DOCUMENTATION_CONTINUE);
2058                                      eab.addText("\n" + mungeComment(t.image), makeLocation(t), null);
2059        }
2060        {if (true) return eab.makeElementAnnotation();}
2061        throw new Error("Missing return statement in function");
2062      }
2063    
2064      final public Annotations Annotations() throws ParseException {
2065      CommentList comments = getComments();
2066      Annotations a = null;
2067      ParsedElementAnnotation e;
2068        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2069        case DOCUMENTATION:
2070        case DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT:
2071          a = sb.makeAnnotations(comments, getContext());
2072          label_20:
2073          while (true) {
2074            e = Documentation();
2075                               a.addElement(e);
2076            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2077            case DOCUMENTATION:
2078            case DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT:
2079              ;
2080              break;
2081            default:
2082              jj_la1[56] = jj_gen;
2083              break label_20;
2084            }
2085          }
2086          comments = getComments();
2087          if (comments != null)
2088            a.addLeadingComment(comments);
2089          break;
2090        default:
2091          jj_la1[57] = jj_gen;
2092          ;
2093        }
2094        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2095        case 1:
2096          jj_consume_token(1);
2097             if (a == null) a = sb.makeAnnotations(comments, getContext()); clearAttributeList(); annotationsIncludeElements = false;
2098          label_21:
2099          while (true) {
2100            if (jj_2_7(2)) {
2101              ;
2102            } else {
2103              break label_21;
2104            }
2105            PrefixedAnnotationAttribute(a, false);
2106          }
2107          label_22:
2108          while (true) {
2109            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2110            case 5:
2111            case 6:
2112            case 7:
2113            case 10:
2114            case 13:
2115            case 14:
2116            case 15:
2117            case 16:
2118            case 17:
2119            case 18:
2120            case 19:
2121            case 26:
2122            case 27:
2123            case 31:
2124            case 32:
2125            case 33:
2126            case 34:
2127            case 35:
2128            case 36:
2129            case IDENTIFIER:
2130            case ESCAPED_IDENTIFIER:
2131            case PREFIXED_NAME:
2132              ;
2133              break;
2134            default:
2135              jj_la1[58] = jj_gen;
2136              break label_22;
2137            }
2138            e = AnnotationElement(false);
2139                                            a.addElement(e); annotationsIncludeElements = true;
2140          }
2141             a.addComment(getComments());
2142          jj_consume_token(9);
2143          break;
2144        default:
2145          jj_la1[59] = jj_gen;
2146          ;
2147        }
2148        if (a == null && comments != null)
2149          a = sb.makeAnnotations(comments, getContext());
2150        {if (true) return a;}
2151        throw new Error("Missing return statement in function");
2152      }
2153    
2154      final public void AnnotationAttribute(Annotations a) throws ParseException {
2155        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2156        case PREFIXED_NAME:
2157          PrefixedAnnotationAttribute(a, true);
2158          break;
2159        case 5:
2160        case 6:
2161        case 7:
2162        case 10:
2163        case 13:
2164        case 14:
2165        case 15:
2166        case 16:
2167        case 17:
2168        case 18:
2169        case 19:
2170        case 26:
2171        case 27:
2172        case 31:
2173        case 32:
2174        case 33:
2175        case 34:
2176        case 35:
2177        case 36:
2178        case IDENTIFIER:
2179        case ESCAPED_IDENTIFIER:
2180          UnprefixedAnnotationAttribute(a);
2181          break;
2182        default:
2183          jj_la1[60] = jj_gen;
2184          jj_consume_token(-1);
2185          throw new ParseException();
2186        }
2187      }
2188    
2189      final public void PrefixedAnnotationAttribute(Annotations a, boolean nested) throws ParseException {
2190      Token t;
2191      String value;
2192        t = jj_consume_token(PREFIXED_NAME);
2193        jj_consume_token(2);
2194        value = Literal();
2195        String qn = t.image;
2196        int colon = qn.indexOf(':');
2197        String prefix = qn.substring(0, colon);
2198        String ns = lookupPrefix(prefix, t);
2199        if (ns == SchemaBuilder.INHERIT_NS)
2200          error("inherited_annotation_namespace", t);
2201        else if (ns.length() == 0 && !nested)
2202          error("unqualified_annotation_attribute", t);
2203        else if (ns.equals(WellKnownNamespaces.RELAX_NG) && !nested)
2204          error("relax_ng_namespace", t);
2205        /*else if (ns.length() == 0
2206                 && qn.length() - colon - 1 == 5
2207                 && qn.regionMatches(colon + 1, "xmlns", 0, 5))
2208          error("xmlns_annotation_attribute", t);*/
2209        else if (ns.equals(WellKnownNamespaces.XMLNS))
2210          error("xmlns_annotation_attribute_uri", t);
2211        else {
2212          if (ns.length() == 0)
2213            prefix = null;
2214          addAttribute(a, ns, qn.substring(colon + 1), prefix, value, t);
2215        }
2216      }
2217    
2218      final public void UnprefixedAnnotationAttribute(Annotations a) throws ParseException {
2219      LocatedString name;
2220      String value;
2221        name = UnprefixedName();
2222        jj_consume_token(2);
2223        value = Literal();
2224        if (name.getString().equals("xmlns"))
2225          error("xmlns_annotation_attribute", name.getToken());
2226        else
2227          addAttribute(a, "", name.getString(), null, value, name.getToken());
2228      }
2229    
2230      final public ParsedElementAnnotation AnnotationElement(boolean nested) throws ParseException {
2231      ParsedElementAnnotation a;
2232        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2233        case PREFIXED_NAME:
2234          a = PrefixedAnnotationElement(nested);
2235          break;
2236        case 5:
2237        case 6:
2238        case 7:
2239        case 10:
2240        case 13:
2241        case 14:
2242        case 15:
2243        case 16:
2244        case 17:
2245        case 18:
2246        case 19:
2247        case 26:
2248        case 27:
2249        case 31:
2250        case 32:
2251        case 33:
2252        case 34:
2253        case 35:
2254        case 36:
2255        case IDENTIFIER:
2256        case ESCAPED_IDENTIFIER:
2257          a = UnprefixedAnnotationElement();
2258          break;
2259        default:
2260          jj_la1[61] = jj_gen;
2261          jj_consume_token(-1);
2262          throw new ParseException();
2263        }
2264        {if (true) return a;}
2265        throw new Error("Missing return statement in function");
2266      }
2267    
2268      final public ParsedElementAnnotation AnnotationElementNotKeyword() throws ParseException {
2269      ParsedElementAnnotation a;
2270        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2271        case PREFIXED_NAME:
2272          a = PrefixedAnnotationElement(false);
2273          break;
2274        case IDENTIFIER:
2275        case ESCAPED_IDENTIFIER:
2276          a = IdentifierAnnotationElement();
2277          break;
2278        default:
2279          jj_la1[62] = jj_gen;
2280          jj_consume_token(-1);
2281          throw new ParseException();
2282        }
2283        {if (true) return a;}
2284        throw new Error("Missing return statement in function");
2285      }
2286    
2287      final public ParsedElementAnnotation PrefixedAnnotationElement(boolean nested) throws ParseException {
2288      CommentList comments = getComments();
2289      Token t;
2290      ElementAnnotationBuilder eab;
2291        t = jj_consume_token(PREFIXED_NAME);
2292        String qn = t.image;
2293        int colon = qn.indexOf(':');
2294        String prefix = qn.substring(0, colon);
2295        String ns = lookupPrefix(prefix, t);
2296        if (ns == SchemaBuilder.INHERIT_NS) {
2297          error("inherited_annotation_namespace", t);
2298          ns = "";
2299        }
2300        else if (!nested && ns.equals(WellKnownNamespaces.RELAX_NG)) {
2301          error("relax_ng_namespace", t);
2302          ns = "";
2303        }
2304        else {
2305          if (ns.length() == 0)
2306            prefix = null;
2307        }
2308        eab = sb.makeElementAnnotationBuilder(ns, qn.substring(colon + 1), prefix,
2309                                              makeLocation(t), comments, getContext());
2310        AnnotationElementContent(eab);
2311        {if (true) return eab.makeElementAnnotation();}
2312        throw new Error("Missing return statement in function");
2313      }
2314    
2315      final public ParsedElementAnnotation UnprefixedAnnotationElement() throws ParseException {
2316      CommentList comments = getComments();
2317      LocatedString name;
2318      ElementAnnotationBuilder eab;
2319        name = UnprefixedName();
2320        eab = sb.makeElementAnnotationBuilder("", name.getString(), null,
2321                                              name.getLocation(), comments, getContext());
2322        AnnotationElementContent(eab);
2323        {if (true) return eab.makeElementAnnotation();}
2324        throw new Error("Missing return statement in function");
2325      }
2326    
2327      final public ParsedElementAnnotation IdentifierAnnotationElement() throws ParseException {
2328      CommentList comments = getComments();
2329      LocatedString name;
2330      ElementAnnotationBuilder eab;
2331        name = Identifier();
2332        eab = sb.makeElementAnnotationBuilder("", name.getString(), null,
2333                                              name.getLocation(), comments, getContext());
2334        AnnotationElementContent(eab);
2335        {if (true) return eab.makeElementAnnotation();}
2336        throw new Error("Missing return statement in function");
2337      }
2338    
2339      final public void AnnotationElementContent(ElementAnnotationBuilder eab) throws ParseException {
2340      ParsedElementAnnotation e;
2341        jj_consume_token(1);
2342            clearAttributeList();
2343        label_23:
2344        while (true) {
2345          if (jj_2_8(2)) {
2346            ;
2347          } else {
2348            break label_23;
2349          }
2350          AnnotationAttribute(eab);
2351        }
2352        label_24:
2353        while (true) {
2354          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2355          case 5:
2356          case 6:
2357          case 7:
2358          case 10:
2359          case 13:
2360          case 14:
2361          case 15:
2362          case 16:
2363          case 17:
2364          case 18:
2365          case 19:
2366          case 26:
2367          case 27:
2368          case 31:
2369          case 32:
2370          case 33:
2371          case 34:
2372          case 35:
2373          case 36:
2374          case IDENTIFIER:
2375          case ESCAPED_IDENTIFIER:
2376          case PREFIXED_NAME:
2377          case LITERAL:
2378            ;
2379            break;
2380          default:
2381            jj_la1[63] = jj_gen;
2382            break label_24;
2383          }
2384          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2385          case LITERAL:
2386            AnnotationElementLiteral(eab);
2387            label_25:
2388            while (true) {
2389              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2390              case 8:
2391                ;
2392                break;
2393              default:
2394                jj_la1[64] = jj_gen;
2395                break label_25;
2396              }
2397              jj_consume_token(8);
2398              AnnotationElementLiteral(eab);
2399            }
2400            break;
2401          case 5:
2402          case 6:
2403          case 7:
2404          case 10:
2405          case 13:
2406          case 14:
2407          case 15:
2408          case 16:
2409          case 17:
2410          case 18:
2411          case 19:
2412          case 26:
2413          case 27:
2414          case 31:
2415          case 32:
2416          case 33:
2417          case 34:
2418          case 35:
2419          case 36:
2420          case IDENTIFIER:
2421          case ESCAPED_IDENTIFIER:
2422          case PREFIXED_NAME:
2423            e = AnnotationElement(true);
2424                                       eab.addElement(e);
2425            break;
2426          default:
2427            jj_la1[65] = jj_gen;
2428            jj_consume_token(-1);
2429            throw new ParseException();
2430          }
2431        }
2432        eab.addComment(getComments());
2433        jj_consume_token(9);
2434      }
2435    
2436      final public void AnnotationElementLiteral(ElementAnnotationBuilder eab) throws ParseException {
2437      Token t;
2438      CommentList comments = getComments();
2439        t = jj_consume_token(LITERAL);
2440                      eab.addText(unquote(t.image), makeLocation(t), comments);
2441      }
2442    
2443      final public String Literal() throws ParseException {
2444      Token t;
2445      String s;
2446      StringBuffer buf;
2447        t = jj_consume_token(LITERAL);
2448        s = unquote(t.image);
2449        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2450        case 8:
2451          buf = new StringBuffer(s);
2452          label_26:
2453          while (true) {
2454            jj_consume_token(8);
2455            t = jj_consume_token(LITERAL);
2456                             buf.append(unquote(t.image));
2457            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2458            case 8:
2459              ;
2460              break;
2461            default:
2462              jj_la1[66] = jj_gen;
2463              break label_26;
2464            }
2465          }
2466          s = buf.toString();
2467          break;
2468        default:
2469          jj_la1[67] = jj_gen;
2470          ;
2471        }
2472        {if (true) return s;}
2473        throw new Error("Missing return statement in function");
2474      }
2475    
2476      final public LocatedString LocatedLiteral() throws ParseException {
2477      Token t;
2478      Token t2;
2479      String s;
2480      StringBuffer buf;
2481        t = jj_consume_token(LITERAL);
2482        s = unquote(t.image);
2483        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2484        case 8:
2485          buf = new StringBuffer(s);
2486          label_27:
2487          while (true) {
2488            jj_consume_token(8);
2489            t2 = jj_consume_token(LITERAL);
2490                              buf.append(unquote(t2.image));
2491            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2492            case 8:
2493              ;
2494              break;
2495            default:
2496              jj_la1[68] = jj_gen;
2497              break label_27;
2498            }
2499          }
2500          s = buf.toString();
2501          break;
2502        default:
2503          jj_la1[69] = jj_gen;
2504          ;
2505        }
2506        {if (true) return new LocatedString(s, t);}
2507        throw new Error("Missing return statement in function");
2508      }
2509    
2510      final public Token Keyword() throws ParseException {
2511      Token t;
2512        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2513        case 26:
2514          t = jj_consume_token(26);
2515          break;
2516        case 27:
2517          t = jj_consume_token(27);
2518          break;
2519        case 13:
2520          t = jj_consume_token(13);
2521          break;
2522        case 31:
2523          t = jj_consume_token(31);
2524          break;
2525        case 32:
2526          t = jj_consume_token(32);
2527          break;
2528        case 10:
2529          t = jj_consume_token(10);
2530          break;
2531        case 17:
2532          t = jj_consume_token(17);
2533          break;
2534        case 18:
2535          t = jj_consume_token(18);
2536          break;
2537        case 34:
2538          t = jj_consume_token(34);
2539          break;
2540        case 33:
2541          t = jj_consume_token(33);
2542          break;
2543        case 19:
2544          t = jj_consume_token(19);
2545          break;
2546        case 5:
2547          t = jj_consume_token(5);
2548          break;
2549        case 7:
2550          t = jj_consume_token(7);
2551          break;
2552        case 14:
2553          t = jj_consume_token(14);
2554          break;
2555        case 15:
2556          t = jj_consume_token(15);
2557          break;
2558        case 35:
2559          t = jj_consume_token(35);
2560          break;
2561        case 36:
2562          t = jj_consume_token(36);
2563          break;
2564        case 16:
2565          t = jj_consume_token(16);
2566          break;
2567        case 6:
2568          t = jj_consume_token(6);
2569          break;
2570        default:
2571          jj_la1[70] = jj_gen;
2572          jj_consume_token(-1);
2573          throw new ParseException();
2574        }
2575        {if (true) return t;}
2576        throw new Error("Missing return statement in function");
2577      }
2578    
2579      final private boolean jj_2_1(int xla) {
2580        jj_la = xla; jj_lastpos = jj_scanpos = token;
2581        boolean retval = !jj_3_1();
2582        jj_save(0, xla);
2583        return retval;
2584      }
2585    
2586      final private boolean jj_2_2(int xla) {
2587        jj_la = xla; jj_lastpos = jj_scanpos = token;
2588        boolean retval = !jj_3_2();
2589        jj_save(1, xla);
2590        return retval;
2591      }
2592    
2593      final private boolean jj_2_3(int xla) {
2594        jj_la = xla; jj_lastpos = jj_scanpos = token;
2595        boolean retval = !jj_3_3();
2596        jj_save(2, xla);
2597        return retval;
2598      }
2599    
2600      final private boolean jj_2_4(int xla) {
2601        jj_la = xla; jj_lastpos = jj_scanpos = token;
2602        boolean retval = !jj_3_4();
2603        jj_save(3, xla);
2604        return retval;
2605      }
2606    
2607      final private boolean jj_2_5(int xla) {
2608        jj_la = xla; jj_lastpos = jj_scanpos = token;
2609        boolean retval = !jj_3_5();
2610        jj_save(4, xla);
2611        return retval;
2612      }
2613    
2614      final private boolean jj_2_6(int xla) {
2615        jj_la = xla; jj_lastpos = jj_scanpos = token;
2616        boolean retval = !jj_3_6();
2617        jj_save(5, xla);
2618        return retval;
2619      }
2620    
2621      final private boolean jj_2_7(int xla) {
2622        jj_la = xla; jj_lastpos = jj_scanpos = token;
2623        boolean retval = !jj_3_7();
2624        jj_save(6, xla);
2625        return retval;
2626      }
2627    
2628      final private boolean jj_2_8(int xla) {
2629        jj_la = xla; jj_lastpos = jj_scanpos = token;
2630        boolean retval = !jj_3_8();
2631        jj_save(7, xla);
2632        return retval;
2633      }
2634    
2635      final private boolean jj_3R_92() {
2636        if (jj_scan_token(7)) return true;
2637        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2638        return false;
2639      }
2640    
2641      final private boolean jj_3R_91() {
2642        if (jj_scan_token(5)) return true;
2643        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2644        return false;
2645      }
2646    
2647      final private boolean jj_3R_90() {
2648        if (jj_scan_token(19)) return true;
2649        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2650        return false;
2651      }
2652    
2653      final private boolean jj_3R_89() {
2654        if (jj_scan_token(33)) return true;
2655        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2656        return false;
2657      }
2658    
2659      final private boolean jj_3R_88() {
2660        if (jj_scan_token(34)) return true;
2661        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2662        return false;
2663      }
2664    
2665      final private boolean jj_3R_87() {
2666        if (jj_scan_token(18)) return true;
2667        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2668        return false;
2669      }
2670    
2671      final private boolean jj_3R_86() {
2672        if (jj_scan_token(17)) return true;
2673        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2674        return false;
2675      }
2676    
2677      final private boolean jj_3R_85() {
2678        if (jj_scan_token(10)) return true;
2679        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2680        return false;
2681      }
2682    
2683      final private boolean jj_3R_84() {
2684        if (jj_scan_token(32)) return true;
2685        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2686        return false;
2687      }
2688    
2689      final private boolean jj_3R_83() {
2690        if (jj_scan_token(31)) return true;
2691        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2692        return false;
2693      }
2694    
2695      final private boolean jj_3R_82() {
2696        if (jj_scan_token(13)) return true;
2697        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2698        return false;
2699      }
2700    
2701      final private boolean jj_3R_81() {
2702        if (jj_scan_token(27)) return true;
2703        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2704        return false;
2705      }
2706    
2707      final private boolean jj_3R_80() {
2708        if (jj_scan_token(26)) return true;
2709        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2710        return false;
2711      }
2712    
2713      final private boolean jj_3R_79() {
2714        Token xsp;
2715        xsp = jj_scanpos;
2716        if (jj_3R_80()) {
2717        jj_scanpos = xsp;
2718        if (jj_3R_81()) {
2719        jj_scanpos = xsp;
2720        if (jj_3R_82()) {
2721        jj_scanpos = xsp;
2722        if (jj_3R_83()) {
2723        jj_scanpos = xsp;
2724        if (jj_3R_84()) {
2725        jj_scanpos = xsp;
2726        if (jj_3R_85()) {
2727        jj_scanpos = xsp;
2728        if (jj_3R_86()) {
2729        jj_scanpos = xsp;
2730        if (jj_3R_87()) {
2731        jj_scanpos = xsp;
2732        if (jj_3R_88()) {
2733        jj_scanpos = xsp;
2734        if (jj_3R_89()) {
2735        jj_scanpos = xsp;
2736        if (jj_3R_90()) {
2737        jj_scanpos = xsp;
2738        if (jj_3R_91()) {
2739        jj_scanpos = xsp;
2740        if (jj_3R_92()) {
2741        jj_scanpos = xsp;
2742        if (jj_3R_93()) {
2743        jj_scanpos = xsp;
2744        if (jj_3R_94()) {
2745        jj_scanpos = xsp;
2746        if (jj_3R_95()) {
2747        jj_scanpos = xsp;
2748        if (jj_3R_96()) {
2749        jj_scanpos = xsp;
2750        if (jj_3R_97()) {
2751        jj_scanpos = xsp;
2752        if (jj_3R_98()) return true;
2753        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2754        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2755        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2756        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2757        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2758        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2759        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2760        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2761        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2762        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2763        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2764        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2765        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2766        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2767        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2768        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2769        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2770        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2771        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2772        return false;
2773      }
2774    
2775      final private boolean jj_3R_30() {
2776        if (jj_scan_token(PREFIXED_NAME)) return true;
2777        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2778        if (jj_scan_token(2)) return true;
2779        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2780        return false;
2781      }
2782    
2783      final private boolean jj_3R_39() {
2784        if (jj_3R_30()) return true;
2785        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2786        return false;
2787      }
2788    
2789      final private boolean jj_3R_31() {
2790        Token xsp;
2791        xsp = jj_scanpos;
2792        if (jj_3R_39()) {
2793        jj_scanpos = xsp;
2794        if (jj_3R_40()) return true;
2795        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2796        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2797        return false;
2798      }
2799    
2800      final private boolean jj_3_7() {
2801        if (jj_3R_30()) return true;
2802        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2803        return false;
2804      }
2805    
2806      final private boolean jj_3R_70() {
2807        if (jj_3R_47()) return true;
2808        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2809        return false;
2810      }
2811    
2812      final private boolean jj_3R_69() {
2813        if (jj_scan_token(8)) return true;
2814        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2815        return false;
2816      }
2817    
2818      final private boolean jj_3R_76() {
2819        if (jj_scan_token(DOCUMENTATION_CONTINUE)) return true;
2820        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2821        return false;
2822      }
2823    
2824      final private boolean jj_3_8() {
2825        if (jj_3R_31()) return true;
2826        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2827        return false;
2828      }
2829    
2830      final private boolean jj_3R_68() {
2831        if (jj_scan_token(LITERAL)) return true;
2832        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2833        return false;
2834      }
2835    
2836      final private boolean jj_3R_63() {
2837        if (jj_scan_token(1)) return true;
2838        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2839        return false;
2840      }
2841    
2842      final private boolean jj_3R_67() {
2843        if (jj_scan_token(2)) return true;
2844        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2845        return false;
2846      }
2847    
2848      final private boolean jj_3R_52() {
2849        if (jj_3R_41()) return true;
2850        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2851        if (jj_3R_63()) return true;
2852        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2853        return false;
2854      }
2855    
2856      final private boolean jj_3_6() {
2857        if (jj_3R_29()) return true;
2858        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2859        return false;
2860      }
2861    
2862      final private boolean jj_3_2() {
2863        if (jj_3R_28()) return true;
2864        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2865        return false;
2866      }
2867    
2868      final private boolean jj_3R_66() {
2869        if (jj_3R_64()) return true;
2870        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2871        return false;
2872      }
2873    
2874      final private boolean jj_3_5() {
2875        if (jj_3R_29()) return true;
2876        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2877        return false;
2878      }
2879    
2880      final private boolean jj_3R_75() {
2881        if (jj_scan_token(DOCUMENTATION_AFTER_SINGLE_LINE_COMMENT)) return true;
2882        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2883        return false;
2884      }
2885    
2886      final private boolean jj_3R_78() {
2887        if (jj_3R_79()) return true;
2888        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2889        return false;
2890      }
2891    
2892      final private boolean jj_3R_73() {
2893        if (jj_scan_token(4)) return true;
2894        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2895        return false;
2896      }
2897    
2898      final private boolean jj_3R_77() {
2899        if (jj_3R_41()) return true;
2900        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2901        return false;
2902      }
2903    
2904      final private boolean jj_3R_45() {
2905        if (jj_scan_token(4)) return true;
2906        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2907        return false;
2908      }
2909    
2910      final private boolean jj_3R_64() {
2911        Token xsp;
2912        xsp = jj_scanpos;
2913        if (jj_3R_77()) {
2914        jj_scanpos = xsp;
2915        if (jj_3R_78()) return true;
2916        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2917        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2918        return false;
2919      }
2920    
2921      final private boolean jj_3R_58() {
2922        if (jj_scan_token(7)) return true;
2923        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2924        return false;
2925      }
2926    
2927      final private boolean jj_3R_50() {
2928        if (jj_3R_47()) return true;
2929        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2930        return false;
2931      }
2932    
2933      final private boolean jj_3R_59() {
2934        Token xsp;
2935        xsp = jj_scanpos;
2936        if (jj_3R_65()) {
2937        jj_scanpos = xsp;
2938        if (jj_3R_66()) {
2939        jj_scanpos = xsp;
2940        if (jj_3R_67()) {
2941        jj_scanpos = xsp;
2942        if (jj_3R_68()) {
2943        jj_scanpos = xsp;
2944        if (jj_3R_69()) {
2945        jj_scanpos = xsp;
2946        if (jj_3R_70()) return true;
2947        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2948        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2949        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2950        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2951        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2952        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2953        return false;
2954      }
2955    
2956      final private boolean jj_3R_65() {
2957        if (jj_scan_token(PREFIXED_NAME)) return true;
2958        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2959        return false;
2960      }
2961    
2962      final private boolean jj_3R_72() {
2963        if (jj_scan_token(3)) return true;
2964        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2965        return false;
2966      }
2967    
2968      final private boolean jj_3R_47() {
2969        if (jj_scan_token(1)) return true;
2970        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2971        Token xsp;
2972        while (true) {
2973          xsp = jj_scanpos;
2974          if (jj_3R_59()) { jj_scanpos = xsp; break; }
2975          if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2976        }
2977        if (jj_scan_token(9)) return true;
2978        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2979        return false;
2980      }
2981    
2982      final private boolean jj_3R_44() {
2983        if (jj_scan_token(3)) return true;
2984        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2985        return false;
2986      }
2987    
2988      final private boolean jj_3R_57() {
2989        if (jj_scan_token(6)) return true;
2990        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2991        return false;
2992      }
2993    
2994      final private boolean jj_3R_74() {
2995        if (jj_scan_token(DOCUMENTATION)) return true;
2996        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2997        return false;
2998      }
2999    
3000      final private boolean jj_3R_62() {
3001        Token xsp;
3002        xsp = jj_scanpos;
3003        if (jj_3R_74()) {
3004        jj_scanpos = xsp;
3005        if (jj_3R_75()) return true;
3006        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3007        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3008        while (true) {
3009          xsp = jj_scanpos;
3010          if (jj_3R_76()) { jj_scanpos = xsp; break; }
3011          if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3012        }
3013        return false;
3014      }
3015    
3016      final private boolean jj_3R_71() {
3017        if (jj_scan_token(2)) return true;
3018        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3019        return false;
3020      }
3021    
3022      final private boolean jj_3R_49() {
3023        Token xsp;
3024        if (jj_3R_62()) return true;
3025        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3026        while (true) {
3027          xsp = jj_scanpos;
3028          if (jj_3R_62()) { jj_scanpos = xsp; break; }
3029          if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3030        }
3031        return false;
3032      }
3033    
3034      final private boolean jj_3R_43() {
3035        if (jj_scan_token(2)) return true;
3036        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3037        return false;
3038      }
3039    
3040      final private boolean jj_3R_46() {
3041        Token xsp;
3042        xsp = jj_scanpos;
3043        if (jj_3R_56()) {
3044        jj_scanpos = xsp;
3045        if (jj_3R_57()) {
3046        jj_scanpos = xsp;
3047        if (jj_3R_58()) return true;
3048        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3049        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3050        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3051        return false;
3052      }
3053    
3054      final private boolean jj_3R_42() {
3055        if (jj_scan_token(1)) return true;
3056        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3057        return false;
3058      }
3059    
3060      final private boolean jj_3R_56() {
3061        if (jj_scan_token(5)) return true;
3062        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3063        return false;
3064      }
3065    
3066      final private boolean jj_3R_55() {
3067        if (jj_scan_token(ESCAPED_IDENTIFIER)) return true;
3068        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3069        return false;
3070      }
3071    
3072      final private boolean jj_3R_54() {
3073        if (jj_scan_token(IDENTIFIER)) return true;
3074        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3075        return false;
3076      }
3077    
3078      final private boolean jj_3R_61() {
3079        if (jj_3R_46()) return true;
3080        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3081        return false;
3082      }
3083    
3084      final private boolean jj_3R_41() {
3085        Token xsp;
3086        xsp = jj_scanpos;
3087        if (jj_3R_54()) {
3088        jj_scanpos = xsp;
3089        if (jj_3R_55()) return true;
3090        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3091        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3092        return false;
3093      }
3094    
3095      final private boolean jj_3R_51() {
3096        if (jj_scan_token(PREFIXED_NAME)) return true;
3097        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3098        if (jj_3R_63()) return true;
3099        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3100        return false;
3101      }
3102    
3103      final private boolean jj_3R_48() {
3104        Token xsp;
3105        xsp = jj_scanpos;
3106        if (jj_3R_60()) {
3107        jj_scanpos = xsp;
3108        if (jj_3R_61()) return true;
3109        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3110        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3111        return false;
3112      }
3113    
3114      final private boolean jj_3R_60() {
3115        if (jj_3R_41()) return true;
3116        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3117        Token xsp;
3118        xsp = jj_scanpos;
3119        if (jj_3R_71()) {
3120        jj_scanpos = xsp;
3121        if (jj_3R_72()) {
3122        jj_scanpos = xsp;
3123        if (jj_3R_73()) return true;
3124        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3125        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3126        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3127        return false;
3128      }
3129    
3130      final private boolean jj_3R_36() {
3131        if (jj_3R_49()) return true;
3132        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3133        Token xsp;
3134        xsp = jj_scanpos;
3135        if (jj_3R_50()) jj_scanpos = xsp;
3136        else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3137        if (jj_3R_48()) return true;
3138        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3139        return false;
3140      }
3141    
3142      final private boolean jj_3R_35() {
3143        if (jj_3R_47()) return true;
3144        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3145        if (jj_3R_48()) return true;
3146        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3147        return false;
3148      }
3149    
3150      final private boolean jj_3R_34() {
3151        if (jj_3R_46()) return true;
3152        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3153        return false;
3154      }
3155    
3156      final private boolean jj_3R_38() {
3157        if (jj_3R_52()) return true;
3158        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3159        return false;
3160      }
3161    
3162      final private boolean jj_3_1() {
3163        if (jj_3R_28()) return true;
3164        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3165        return false;
3166      }
3167    
3168      final private boolean jj_3R_33() {
3169        if (jj_3R_41()) return true;
3170        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3171        Token xsp;
3172        xsp = jj_scanpos;
3173        if (jj_3R_42()) {
3174        jj_scanpos = xsp;
3175        if (jj_3R_43()) {
3176        jj_scanpos = xsp;
3177        if (jj_3R_44()) {
3178        jj_scanpos = xsp;
3179        if (jj_3R_45()) return true;
3180        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3181        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3182        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3183        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3184        return false;
3185      }
3186    
3187      final private boolean jj_3R_37() {
3188        if (jj_3R_51()) return true;
3189        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3190        return false;
3191      }
3192    
3193      final private boolean jj_3R_28() {
3194        Token xsp;
3195        xsp = jj_scanpos;
3196        if (jj_3R_32()) {
3197        jj_scanpos = xsp;
3198        if (jj_3R_33()) {
3199        jj_scanpos = xsp;
3200        if (jj_3R_34()) {
3201        jj_scanpos = xsp;
3202        if (jj_3R_35()) {
3203        jj_scanpos = xsp;
3204        if (jj_3R_36()) return true;
3205        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3206        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3207        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3208        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3209        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3210        return false;
3211      }
3212    
3213      final private boolean jj_3R_32() {
3214        if (jj_scan_token(PREFIXED_NAME)) return true;
3215        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3216        if (jj_scan_token(1)) return true;
3217        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3218        return false;
3219      }
3220    
3221      final private boolean jj_3R_29() {
3222        Token xsp;
3223        xsp = jj_scanpos;
3224        if (jj_3R_37()) {
3225        jj_scanpos = xsp;
3226        if (jj_3R_38()) return true;
3227        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3228        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3229        return false;
3230      }
3231    
3232      final private boolean jj_3_4() {
3233        if (jj_3R_29()) return true;
3234        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3235        return false;
3236      }
3237    
3238      final private boolean jj_3R_53() {
3239        if (jj_3R_64()) return true;
3240        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3241        if (jj_scan_token(2)) return true;
3242        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3243        return false;
3244      }
3245    
3246      final private boolean jj_3R_40() {
3247        if (jj_3R_53()) return true;
3248        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3249        return false;
3250      }
3251    
3252      final private boolean jj_3R_98() {
3253        if (jj_scan_token(6)) return true;
3254        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3255        return false;
3256      }
3257    
3258      final private boolean jj_3_3() {
3259        if (jj_3R_29()) return true;
3260        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3261        return false;
3262      }
3263    
3264      final private boolean jj_3R_97() {
3265        if (jj_scan_token(16)) return true;
3266        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3267        return false;
3268      }
3269    
3270      final private boolean jj_3R_96() {
3271        if (jj_scan_token(36)) return true;
3272        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3273        return false;
3274      }
3275    
3276      final private boolean jj_3R_95() {
3277        if (jj_scan_token(35)) return true;
3278        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3279        return false;
3280      }
3281    
3282      final private boolean jj_3R_94() {
3283        if (jj_scan_token(15)) return true;
3284        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3285        return false;
3286      }
3287    
3288      final private boolean jj_3R_93() {
3289        if (jj_scan_token(14)) return true;
3290        if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3291        return false;
3292      }
3293    
3294      public CompactSyntaxTokenManager token_source;
3295      UCode_UCodeESC_CharStream jj_input_stream;
3296      public Token token, jj_nt;
3297      private int jj_ntk;
3298      private Token jj_scanpos, jj_lastpos;
3299      private int jj_la;
3300      public boolean lookingAhead = false;
3301      private boolean jj_semLA;
3302      private int jj_gen;
3303      final private int[] jj_la1 = new int[71];
3304      final private int[] jj_la1_0 = {0x9c0e0402,0x1e,0x2,0xe2,0x1c,0xe0,0xe0,0x0,0x0,0x0,0x8c0fe5e6,0x8c0fe5e6,0x402,0x16000,0x16000,0x8c0fe4e0,0x6000,0x8000,0x0,0x9c0e0400,0x100000,0x200000,0x400000,0x700000,0x700000,0x3800000,0x0,0x3800000,0x9e0fe4e0,0x0,0x100000,0x100000,0x9e0fe4e0,0x9c0fe4e0,0x2000000,0x40000000,0x40000000,0xe2,0xe0,0x20,0x1c,0x800,0x62,0x60,0x8000,0x40000000,0x40000000,0x800,0x0,0x0,0x0,0x8c0fe4e0,0x8c0fe4e0,0x8c0fe4e2,0x0,0x0,0x0,0x0,0x8c0fe4e0,0x2,0x8c0fe4e0,0x8c0fe4e0,0x0,0x8c0fe4e0,0x100,0x8c0fe4e0,0x100,0x100,0x100,0x100,0x8c0fe4e0,};
3305      final private int[] jj_la1_1 = {0x6c0091f,0x0,0x0,0x2c00900,0x0,0xc00000,0x0,0x900,0x200,0x900,0x6c0001f,0x6c0001f,0x900,0x0,0x0,0xc0001f,0x0,0x4000000,0x8000000,0x6c0001f,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x3c0001f,0x8000000,0x0,0x0,0x3c0001f,0x2c0001f,0x1000000,0x0,0x0,0xc00900,0xc00000,0xc00000,0x0,0x0,0xc00900,0xc00000,0x0,0x0,0x0,0x0,0x4000000,0x2000018,0xc00000,0xc0001f,0xc0001f,0xc0091f,0x900,0x200,0x900,0x900,0x2c0001f,0x0,0x2c0001f,0x2c0001f,0x2c00000,0x6c0001f,0x0,0x6c0001f,0x0,0x0,0x0,0x0,0x1f,};
3306      final private JJCalls[] jj_2_rtns = new JJCalls[8];
3307      private boolean jj_rescan = false;
3308      private int jj_gc = 0;
3309    
3310      public CompactSyntax(java.io.InputStream stream) {
3311        jj_input_stream = new UCode_UCodeESC_CharStream(stream, 1, 1);
3312        token_source = new CompactSyntaxTokenManager(jj_input_stream);
3313        token = new Token();
3314        jj_ntk = -1;
3315        jj_gen = 0;
3316        for (int i = 0; i < 71; i++) jj_la1[i] = -1;
3317        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3318      }
3319    
3320      public void ReInit(java.io.InputStream stream) {
3321        jj_input_stream.ReInit(stream, 1, 1);
3322        token_source.ReInit(jj_input_stream);
3323        token = new Token();
3324        jj_ntk = -1;
3325        jj_gen = 0;
3326        for (int i = 0; i < 71; i++) jj_la1[i] = -1;
3327        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3328      }
3329    
3330      public CompactSyntax(java.io.Reader stream) {
3331        jj_input_stream = new UCode_UCodeESC_CharStream(stream, 1, 1);
3332        token_source = new CompactSyntaxTokenManager(jj_input_stream);
3333        token = new Token();
3334        jj_ntk = -1;
3335        jj_gen = 0;
3336        for (int i = 0; i < 71; i++) jj_la1[i] = -1;
3337        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3338      }
3339    
3340      public void ReInit(java.io.Reader stream) {
3341        jj_input_stream.ReInit(stream, 1, 1);
3342        token_source.ReInit(jj_input_stream);
3343        token = new Token();
3344        jj_ntk = -1;
3345        jj_gen = 0;
3346        for (int i = 0; i < 71; i++) jj_la1[i] = -1;
3347        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3348      }
3349    
3350      public CompactSyntax(CompactSyntaxTokenManager tm) {
3351        token_source = tm;
3352        token = new Token();
3353        jj_ntk = -1;
3354        jj_gen = 0;
3355        for (int i = 0; i < 71; i++) jj_la1[i] = -1;
3356        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3357      }
3358    
3359      public void ReInit(CompactSyntaxTokenManager tm) {
3360        token_source = tm;
3361        token = new Token();
3362        jj_ntk = -1;
3363        jj_gen = 0;
3364        for (int i = 0; i < 71; i++) jj_la1[i] = -1;
3365        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3366      }
3367    
3368      final private Token jj_consume_token(int kind) throws ParseException {
3369        Token oldToken;
3370        if ((oldToken = token).next != null) token = token.next;
3371        else token = token.next = token_source.getNextToken();
3372        jj_ntk = -1;
3373        if (token.kind == kind) {
3374          jj_gen++;
3375          if (++jj_gc > 100) {
3376            jj_gc = 0;
3377            for (int i = 0; i < jj_2_rtns.length; i++) {
3378              JJCalls c = jj_2_rtns[i];
3379              while (c != null) {
3380                if (c.gen < jj_gen) c.first = null;
3381                c = c.next;
3382              }
3383            }
3384          }
3385          return token;
3386        }
3387        token = oldToken;
3388        jj_kind = kind;
3389        throw generateParseException();
3390      }
3391    
3392      final private boolean jj_scan_token(int kind) {
3393        if (jj_scanpos == jj_lastpos) {
3394          jj_la--;
3395          if (jj_scanpos.next == null) {
3396            jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
3397          } else {
3398            jj_lastpos = jj_scanpos = jj_scanpos.next;
3399          }
3400        } else {
3401          jj_scanpos = jj_scanpos.next;
3402        }
3403        if (jj_rescan) {
3404          int i = 0; Token tok = token;
3405          while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
3406          if (tok != null) jj_add_error_token(kind, i);
3407        }
3408        return (jj_scanpos.kind != kind);
3409      }
3410    
3411      final public Token getNextToken() {
3412        if (token.next != null) token = token.next;
3413        else token = token.next = token_source.getNextToken();
3414        jj_ntk = -1;
3415        jj_gen++;
3416        return token;
3417      }
3418    
3419      final public Token getToken(int index) {
3420        Token t = lookingAhead ? jj_scanpos : token;
3421        for (int i = 0; i < index; i++) {
3422          if (t.next != null) t = t.next;
3423          else t = t.next = token_source.getNextToken();
3424        }
3425        return t;
3426      }
3427    
3428      final private int jj_ntk() {
3429        if ((jj_nt=token.next) == null)
3430          return (jj_ntk = (token.next=token_source.getNextToken()).kind);
3431        else
3432          return (jj_ntk = jj_nt.kind);
3433      }
3434    
3435      private java.util.Vector jj_expentries = new java.util.Vector();
3436      private int[] jj_expentry;
3437      private int jj_kind = -1;
3438      private int[] jj_lasttokens = new int[100];
3439      private int jj_endpos;
3440    
3441      private void jj_add_error_token(int kind, int pos) {
3442        if (pos >= 100) return;
3443        if (pos == jj_endpos + 1) {
3444          jj_lasttokens[jj_endpos++] = kind;
3445        } else if (jj_endpos != 0) {
3446          jj_expentry = new int[jj_endpos];
3447          for (int i = 0; i < jj_endpos; i++) {
3448            jj_expentry[i] = jj_lasttokens[i];
3449          }
3450          boolean exists = false;
3451          for (java.util.Enumeration en = jj_expentries.elements(); en.hasMoreElements();) {
3452            int[] oldentry = (int[])(en.nextElement());
3453            if (oldentry.length == jj_expentry.length) {
3454              exists = true;
3455              for (int i = 0; i < jj_expentry.length; i++) {
3456                if (oldentry[i] != jj_expentry[i]) {
3457                  exists = false;
3458                  break;
3459                }
3460              }
3461              if (exists) break;
3462            }
3463          }
3464          if (!exists) jj_expentries.addElement(jj_expentry);
3465          if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
3466        }
3467      }
3468    
3469      final public ParseException generateParseException() {
3470        jj_expentries.removeAllElements();
3471        boolean[] la1tokens = new boolean[61];
3472        for (int i = 0; i < 61; i++) {
3473          la1tokens[i] = false;
3474        }
3475        if (jj_kind >= 0) {
3476          la1tokens[jj_kind] = true;
3477          jj_kind = -1;
3478        }
3479        for (int i = 0; i < 71; i++) {
3480          if (jj_la1[i] == jj_gen) {
3481            for (int j = 0; j < 32; j++) {
3482              if ((jj_la1_0[i] & (1<<j)) != 0) {
3483                la1tokens[j] = true;
3484              }
3485              if ((jj_la1_1[i] & (1<<j)) != 0) {
3486                la1tokens[32+j] = true;
3487              }
3488            }
3489          }
3490        }
3491        for (int i = 0; i < 61; i++) {
3492          if (la1tokens[i]) {
3493            jj_expentry = new int[1];
3494            jj_expentry[0] = i;
3495            jj_expentries.addElement(jj_expentry);
3496          }
3497        }
3498        jj_endpos = 0;
3499        jj_rescan_token();
3500        jj_add_error_token(0, 0);
3501        int[][] exptokseq = new int[jj_expentries.size()][];
3502        for (int i = 0; i < jj_expentries.size(); i++) {
3503          exptokseq[i] = (int[])jj_expentries.elementAt(i);
3504        }
3505        return new ParseException(token, exptokseq, tokenImage);
3506      }
3507    
3508      final public void enable_tracing() {
3509      }
3510    
3511      final public void disable_tracing() {
3512      }
3513    
3514      final private void jj_rescan_token() {
3515        jj_rescan = true;
3516        for (int i = 0; i < 8; i++) {
3517          JJCalls p = jj_2_rtns[i];
3518          do {
3519            if (p.gen > jj_gen) {
3520              jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
3521              switch (i) {
3522                case 0: jj_3_1(); break;
3523                case 1: jj_3_2(); break;
3524                case 2: jj_3_3(); break;
3525                case 3: jj_3_4(); break;
3526                case 4: jj_3_5(); break;
3527                case 5: jj_3_6(); break;
3528                case 6: jj_3_7(); break;
3529                case 7: jj_3_8(); break;
3530              }
3531            }
3532            p = p.next;
3533          } while (p != null);
3534        }
3535        jj_rescan = false;
3536      }
3537    
3538      final private void jj_save(int index, int xla) {
3539        JJCalls p = jj_2_rtns[index];
3540        while (p.gen > jj_gen) {
3541          if (p.next == null) { p = p.next = new JJCalls(); break; }
3542          p = p.next;
3543        }
3544        p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
3545      }
3546    
3547      static final class JJCalls {
3548        int gen;
3549        Token first;
3550        int arg;
3551        JJCalls next;
3552      }
3553    
3554    }