forked from pool/stringtemplate4
11169 lines
347 KiB
Diff
11169 lines
347 KiB
Diff
diff -urEbwBN src/main/java/CodeGenerator.tokens src/main/java/CodeGenerator.tokens
|
|
--- src/main/java/CodeGenerator.tokens 1970-01-01 01:00:00.000000000 +0100
|
|
+++ src/main/java/CodeGenerator.tokens 2024-09-21 13:57:52.307857206 +0200
|
|
@@ -0,0 +1,79 @@
|
|
+RBRACK=17
|
|
+LBRACK=16
|
|
+ELSE=5
|
|
+ELLIPSIS=11
|
|
+LCURLY=20
|
|
+BANG=10
|
|
+EQUALS=12
|
|
+TEXT=22
|
|
+ID=25
|
|
+SEMI=9
|
|
+LPAREN=14
|
|
+IF=4
|
|
+ELSEIF=6
|
|
+COLON=13
|
|
+RPAREN=15
|
|
+WS=27
|
|
+COMMA=18
|
|
+RCURLY=21
|
|
+ENDIF=7
|
|
+RDELIM=24
|
|
+SUPER=8
|
|
+DOT=19
|
|
+LDELIM=23
|
|
+STRING=26
|
|
+PIPE=28
|
|
+OR=29
|
|
+AND=30
|
|
+INDENT=31
|
|
+NEWLINE=32
|
|
+AT=33
|
|
+END=34
|
|
+TRUE=35
|
|
+FALSE=36
|
|
+COMMENT=37
|
|
+SLASH=38
|
|
+ARGS=39
|
|
+ELEMENTS=40
|
|
+EXEC_FUNC=41
|
|
+EXPR=42
|
|
+INCLUDE=43
|
|
+INCLUDE_IND=44
|
|
+INCLUDE_REGION=45
|
|
+INCLUDE_SUPER=46
|
|
+INCLUDE_SUPER_REGION=47
|
|
+INDENTED_EXPR=48
|
|
+LIST=49
|
|
+MAP=50
|
|
+NULL=51
|
|
+OPTIONS=52
|
|
+PROP=53
|
|
+PROP_IND=54
|
|
+REGION=55
|
|
+SUBTEMPLATE=56
|
|
+TO_STR=57
|
|
+ZIP=58
|
|
+'...'=11
|
|
+'super'=8
|
|
+'|'=28
|
|
+'!'=10
|
|
+'}'=21
|
|
+'else'=5
|
|
+'if'=4
|
|
+'{'=20
|
|
+'elseif'=6
|
|
+';'=9
|
|
+'='=12
|
|
+':'=13
|
|
+'('=14
|
|
+'['=16
|
|
+','=18
|
|
+'.'=19
|
|
+'endif'=7
|
|
+')'=15
|
|
+']'=17
|
|
+'||'=29
|
|
+'&&'=30
|
|
+'@'=33
|
|
+'@end'=34
|
|
+'/'=38
|
|
diff -urEbwBN src/main/java/Group.tokens src/main/java/Group.tokens
|
|
--- src/main/java/Group.tokens 1970-01-01 01:00:00.000000000 +0100
|
|
+++ src/main/java/Group.tokens 2024-09-21 13:57:52.307857206 +0200
|
|
@@ -0,0 +1,44 @@
|
|
+T__16=16
|
|
+T__17=17
|
|
+T__18=18
|
|
+T__19=19
|
|
+T__20=20
|
|
+T__21=21
|
|
+T__22=22
|
|
+T__23=23
|
|
+T__24=24
|
|
+T__25=25
|
|
+T__26=26
|
|
+T__27=27
|
|
+T__28=28
|
|
+T__29=29
|
|
+ANONYMOUS_TEMPLATE=4
|
|
+BIGSTRING=5
|
|
+BIGSTRING_NO_NL=6
|
|
+COMMENT=7
|
|
+FALSE=8
|
|
+ID=9
|
|
+LBRACK=10
|
|
+LINE_COMMENT=11
|
|
+RBRACK=12
|
|
+STRING=13
|
|
+TRUE=14
|
|
+WS=15
|
|
+'('=16
|
|
+')'=17
|
|
+','=18
|
|
+'.'=19
|
|
+':'=20
|
|
+'::='=21
|
|
+';'=22
|
|
+'='=23
|
|
+'@'=24
|
|
+'['=10
|
|
+']'=12
|
|
+'default'=25
|
|
+'delimiters'=26
|
|
+'false'=8
|
|
+'group'=27
|
|
+'implements'=28
|
|
+'import'=29
|
|
+'true'=14
|
|
diff -urEbwBN src/main/java/org/stringtemplate/v4/compiler/CodeGenerator.java src/main/java/org/stringtemplate/v4/compiler/CodeGenerator.java
|
|
--- src/main/java/org/stringtemplate/v4/compiler/CodeGenerator.java 1970-01-01 01:00:00.000000000 +0100
|
|
+++ src/main/java/org/stringtemplate/v4/compiler/CodeGenerator.java 2024-09-21 13:57:52.307857206 +0200
|
|
@@ -0,0 +1,2595 @@
|
|
+// $ANTLR 3.5.3 org/stringtemplate/v4/compiler/CodeGenerator.g 2024-09-21 11:54:23
|
|
+
|
|
+/*
|
|
+ * [The "BSD license"]
|
|
+ * Copyright (c) 2011 Terence Parr
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. The name of the author may not be used to endorse or promote products
|
|
+ * derived from this software without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ */
|
|
+package org.stringtemplate.v4.compiler;
|
|
+import org.stringtemplate.v4.misc.*;
|
|
+import org.stringtemplate.v4.*;
|
|
+
|
|
+
|
|
+import org.antlr.runtime.*;
|
|
+import org.antlr.runtime.tree.*;
|
|
+import java.util.Stack;
|
|
+import java.util.List;
|
|
+import java.util.ArrayList;
|
|
+
|
|
+@SuppressWarnings("all")
|
|
+public class CodeGenerator extends TreeParser {
|
|
+ public static final String[] tokenNames = new String[] {
|
|
+ "<invalid>", "<EOR>", "<DOWN>", "<UP>", "IF", "ELSE", "ELSEIF", "ENDIF",
|
|
+ "SUPER", "SEMI", "BANG", "ELLIPSIS", "EQUALS", "COLON", "LPAREN", "RPAREN",
|
|
+ "LBRACK", "RBRACK", "COMMA", "DOT", "LCURLY", "RCURLY", "TEXT", "LDELIM",
|
|
+ "RDELIM", "ID", "STRING", "WS", "PIPE", "OR", "AND", "INDENT", "NEWLINE",
|
|
+ "AT", "END", "TRUE", "FALSE", "COMMENT", "SLASH", "ARGS", "ELEMENTS",
|
|
+ "EXEC_FUNC", "EXPR", "INCLUDE", "INCLUDE_IND", "INCLUDE_REGION", "INCLUDE_SUPER",
|
|
+ "INCLUDE_SUPER_REGION", "INDENTED_EXPR", "LIST", "MAP", "NULL", "OPTIONS",
|
|
+ "PROP", "PROP_IND", "REGION", "SUBTEMPLATE", "TO_STR", "ZIP"
|
|
+ };
|
|
+ public static final int EOF=-1;
|
|
+ public static final int RBRACK=17;
|
|
+ public static final int LBRACK=16;
|
|
+ public static final int ELSE=5;
|
|
+ public static final int ELLIPSIS=11;
|
|
+ public static final int LCURLY=20;
|
|
+ public static final int BANG=10;
|
|
+ public static final int EQUALS=12;
|
|
+ public static final int TEXT=22;
|
|
+ public static final int ID=25;
|
|
+ public static final int SEMI=9;
|
|
+ public static final int LPAREN=14;
|
|
+ public static final int IF=4;
|
|
+ public static final int ELSEIF=6;
|
|
+ public static final int COLON=13;
|
|
+ public static final int RPAREN=15;
|
|
+ public static final int WS=27;
|
|
+ public static final int COMMA=18;
|
|
+ public static final int RCURLY=21;
|
|
+ public static final int ENDIF=7;
|
|
+ public static final int RDELIM=24;
|
|
+ public static final int SUPER=8;
|
|
+ public static final int DOT=19;
|
|
+ public static final int LDELIM=23;
|
|
+ public static final int STRING=26;
|
|
+ public static final int PIPE=28;
|
|
+ public static final int OR=29;
|
|
+ public static final int AND=30;
|
|
+ public static final int INDENT=31;
|
|
+ public static final int NEWLINE=32;
|
|
+ public static final int AT=33;
|
|
+ public static final int END=34;
|
|
+ public static final int TRUE=35;
|
|
+ public static final int FALSE=36;
|
|
+ public static final int COMMENT=37;
|
|
+ public static final int SLASH=38;
|
|
+ public static final int ARGS=39;
|
|
+ public static final int ELEMENTS=40;
|
|
+ public static final int EXEC_FUNC=41;
|
|
+ public static final int EXPR=42;
|
|
+ public static final int INCLUDE=43;
|
|
+ public static final int INCLUDE_IND=44;
|
|
+ public static final int INCLUDE_REGION=45;
|
|
+ public static final int INCLUDE_SUPER=46;
|
|
+ public static final int INCLUDE_SUPER_REGION=47;
|
|
+ public static final int INDENTED_EXPR=48;
|
|
+ public static final int LIST=49;
|
|
+ public static final int MAP=50;
|
|
+ public static final int NULL=51;
|
|
+ public static final int OPTIONS=52;
|
|
+ public static final int PROP=53;
|
|
+ public static final int PROP_IND=54;
|
|
+ public static final int REGION=55;
|
|
+ public static final int SUBTEMPLATE=56;
|
|
+ public static final int TO_STR=57;
|
|
+ public static final int ZIP=58;
|
|
+
|
|
+ // delegates
|
|
+ public TreeParser[] getDelegates() {
|
|
+ return new TreeParser[] {};
|
|
+ }
|
|
+
|
|
+ // delegators
|
|
+
|
|
+
|
|
+ public CodeGenerator(TreeNodeStream input) {
|
|
+ this(input, new RecognizerSharedState());
|
|
+ }
|
|
+ public CodeGenerator(TreeNodeStream input, RecognizerSharedState state) {
|
|
+ super(input, state);
|
|
+ }
|
|
+
|
|
+ @Override public String[] getTokenNames() { return CodeGenerator.tokenNames; }
|
|
+ @Override public String getGrammarFileName() { return "org/stringtemplate/v4/compiler/CodeGenerator.g"; }
|
|
+
|
|
+
|
|
+ String outermostTemplateName; // name of overall template
|
|
+ CompiledST outermostImpl;
|
|
+ Token templateToken; // overall template token
|
|
+ String template; // overall template text
|
|
+ ErrorManager errMgr;
|
|
+ public CodeGenerator(TreeNodeStream input, ErrorManager errMgr, String name, String template, Token templateToken) {
|
|
+ this(input, new RecognizerSharedState());
|
|
+ this.errMgr = errMgr;
|
|
+ this.outermostTemplateName = name;
|
|
+ this.template = template;
|
|
+ this.templateToken = templateToken;
|
|
+ }
|
|
+
|
|
+ public void addArgument(List<FormalArgument> args, Token t) {
|
|
+ String name = t.getText();
|
|
+ for (FormalArgument arg : args) {
|
|
+ if (arg.name.equals(name)) {
|
|
+ errMgr.compileTimeError(ErrorType.PARAMETER_REDEFINITION, templateToken, t, name);
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ args.add(new FormalArgument(name));
|
|
+ }
|
|
+
|
|
+ // convience funcs to hide offensive sending of emit messages to
|
|
+ // CompilationState temp data object.
|
|
+
|
|
+ public void emit1(CommonTree opAST, short opcode, int arg) {
|
|
+ template_stack.peek().state.emit1(opAST, opcode, arg);
|
|
+ }
|
|
+ public void emit1(CommonTree opAST, short opcode, String arg) {
|
|
+ template_stack.peek().state.emit1(opAST, opcode, arg);
|
|
+ }
|
|
+ public void emit2(CommonTree opAST, short opcode, int arg, int arg2) {
|
|
+ template_stack.peek().state.emit2(opAST, opcode, arg, arg2);
|
|
+ }
|
|
+ public void emit2(CommonTree opAST, short opcode, String s, int arg2) {
|
|
+ template_stack.peek().state.emit2(opAST, opcode, s, arg2);
|
|
+ }
|
|
+ public void emit(CommonTree opAST, short opcode) {
|
|
+ template_stack.peek().state.emit(opAST, opcode);
|
|
+ }
|
|
+ public void insert(int addr, short opcode, String s) {
|
|
+ template_stack.peek().state.insert(addr, opcode, s);
|
|
+ }
|
|
+ public void setOption(CommonTree id) {
|
|
+ template_stack.peek().state.setOption(id);
|
|
+ }
|
|
+ public void write(int addr, short value) {
|
|
+ template_stack.peek().state.write(addr,value);
|
|
+ }
|
|
+ public int address() { return template_stack.peek().state.ip; }
|
|
+ public void func(CommonTree id) { template_stack.peek().state.func(templateToken, id); }
|
|
+ public void refAttr(CommonTree id) { template_stack.peek().state.refAttr(templateToken, id); }
|
|
+ public int defineString(String s) { return template_stack.peek().state.defineString(s); }
|
|
+
|
|
+ @Override
|
|
+ public void displayRecognitionError(String[] tokenNames, RecognitionException e) {
|
|
+ Token tokenWithPosition = e.token;
|
|
+ if (tokenWithPosition.getInputStream() == null) {
|
|
+ tokenWithPosition = input.getTreeAdaptor().getToken(input.LT(-1));
|
|
+ }
|
|
+
|
|
+ String hdr = getErrorHeader(e);
|
|
+ String msg = getErrorMessage(e, tokenNames);
|
|
+ errMgr.compileTimeError(ErrorType.SYNTAX_ERROR, templateToken, tokenWithPosition, hdr + " " + msg);
|
|
+ }
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "templateAndEOF"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:141:1: templateAndEOF : template[null,null] EOF ;
|
|
+ public final void templateAndEOF() throws RecognitionException {
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:141:16: ( template[null,null] EOF )
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:141:18: template[null,null] EOF
|
|
+ {
|
|
+ pushFollow(FOLLOW_template_in_templateAndEOF50);
|
|
+ template(null, null);
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input,EOF,FOLLOW_EOF_in_templateAndEOF53);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "templateAndEOF"
|
|
+
|
|
+
|
|
+ protected static class template_scope {
|
|
+ CompilationState state;
|
|
+ }
|
|
+ protected Stack<template_scope> template_stack = new Stack<template_scope>();
|
|
+
|
|
+
|
|
+ // $ANTLR start "template"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:143:1: template[String name, List<FormalArgument> args] returns [CompiledST impl] : chunk ;
|
|
+ public final CompiledST template(String name, List<FormalArgument> args) throws RecognitionException {
|
|
+ template_stack.push(new template_scope());
|
|
+ CompiledST impl = null;
|
|
+
|
|
+
|
|
+
|
|
+ template_stack.peek().state = new CompilationState(errMgr, name, input.getTokenStream());
|
|
+ impl = template_stack.peek().state.impl;
|
|
+ if ( template_stack.size() == 1 ) outermostImpl = impl;
|
|
+ impl.defineFormalArgs(args); // make sure args are defined prior to compilation
|
|
+ if ( name!=null && name.startsWith(Compiler.SUBTEMPLATE_PREFIX) ) {
|
|
+ impl.addArg(new FormalArgument("i"));
|
|
+ impl.addArg(new FormalArgument("i0"));
|
|
+ }
|
|
+ impl.template = template; // always forget the entire template; char indexes are relative to it
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:158:2: ( chunk )
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:158:4: chunk
|
|
+ {
|
|
+ pushFollow(FOLLOW_chunk_in_template77);
|
|
+ chunk();
|
|
+ state._fsp--;
|
|
+
|
|
+ // finish off the CompiledST result
|
|
+ if ( template_stack.peek().state.stringtable!=null ) impl.strings = template_stack.peek().state.stringtable.toArray();
|
|
+ impl.codeSize = template_stack.peek().state.ip;
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ template_stack.pop();
|
|
+ }
|
|
+ return impl;
|
|
+ }
|
|
+ // $ANTLR end "template"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "chunk"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:165:1: chunk : ( element )* ;
|
|
+ public final void chunk() throws RecognitionException {
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:166:2: ( ( element )* )
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:166:4: ( element )*
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:166:4: ( element )*
|
|
+ loop1:
|
|
+ while (true) {
|
|
+ int alt1=2;
|
|
+ int LA1_0 = input.LA(1);
|
|
+ if ( (LA1_0==IF||LA1_0==TEXT||LA1_0==NEWLINE||LA1_0==EXPR||LA1_0==INDENTED_EXPR||LA1_0==REGION) ) {
|
|
+ alt1=1;
|
|
+ }
|
|
+
|
|
+ switch (alt1) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:166:4: element
|
|
+ {
|
|
+ pushFollow(FOLLOW_element_in_chunk92);
|
|
+ element();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop1;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "chunk"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "element"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:169:1: element : ( ^( INDENTED_EXPR INDENT compoundElement[$INDENT] ) | compoundElement[null] | ^( INDENTED_EXPR INDENT ( singleElement )? ) | singleElement );
|
|
+ public final void element() throws RecognitionException {
|
|
+ CommonTree INDENT1=null;
|
|
+ CommonTree INDENT2=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:170:2: ( ^( INDENTED_EXPR INDENT compoundElement[$INDENT] ) | compoundElement[null] | ^( INDENTED_EXPR INDENT ( singleElement )? ) | singleElement )
|
|
+ int alt3=4;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case INDENTED_EXPR:
|
|
+ {
|
|
+ int LA3_1 = input.LA(2);
|
|
+ if ( (LA3_1==DOWN) ) {
|
|
+ int LA3_4 = input.LA(3);
|
|
+ if ( (LA3_4==INDENT) ) {
|
|
+ int LA3_5 = input.LA(4);
|
|
+ if ( (LA3_5==IF||LA3_5==REGION) ) {
|
|
+ alt3=1;
|
|
+ }
|
|
+ else if ( (LA3_5==UP||LA3_5==TEXT||LA3_5==NEWLINE||LA3_5==EXPR) ) {
|
|
+ alt3=3;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 5, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 4, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 1, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case IF:
|
|
+ case REGION:
|
|
+ {
|
|
+ alt3=2;
|
|
+ }
|
|
+ break;
|
|
+ case TEXT:
|
|
+ case NEWLINE:
|
|
+ case EXPR:
|
|
+ {
|
|
+ alt3=4;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt3) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:170:4: ^( INDENTED_EXPR INDENT compoundElement[$INDENT] )
|
|
+ {
|
|
+ match(input,INDENTED_EXPR,FOLLOW_INDENTED_EXPR_in_element105);
|
|
+ match(input, Token.DOWN, null);
|
|
+ INDENT1=(CommonTree)match(input,INDENT,FOLLOW_INDENT_in_element107);
|
|
+ pushFollow(FOLLOW_compoundElement_in_element109);
|
|
+ compoundElement(INDENT1);
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:171:4: compoundElement[null]
|
|
+ {
|
|
+ pushFollow(FOLLOW_compoundElement_in_element117);
|
|
+ compoundElement(null);
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:172:4: ^( INDENTED_EXPR INDENT ( singleElement )? )
|
|
+ {
|
|
+ match(input,INDENTED_EXPR,FOLLOW_INDENTED_EXPR_in_element124);
|
|
+ match(input, Token.DOWN, null);
|
|
+ INDENT2=(CommonTree)match(input,INDENT,FOLLOW_INDENT_in_element126);
|
|
+ template_stack.peek().state.indent(INDENT2);
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:172:63: ( singleElement )?
|
|
+ int alt2=2;
|
|
+ int LA2_0 = input.LA(1);
|
|
+ if ( (LA2_0==TEXT||LA2_0==NEWLINE||LA2_0==EXPR) ) {
|
|
+ alt2=1;
|
|
+ }
|
|
+ switch (alt2) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:172:63: singleElement
|
|
+ {
|
|
+ pushFollow(FOLLOW_singleElement_in_element130);
|
|
+ singleElement();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ template_stack.peek().state.emit(Bytecode.INSTR_DEDENT);
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:173:4: singleElement
|
|
+ {
|
|
+ pushFollow(FOLLOW_singleElement_in_element139);
|
|
+ singleElement();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "element"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "singleElement"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:176:1: singleElement : ( exprElement | TEXT | NEWLINE );
|
|
+ public final void singleElement() throws RecognitionException {
|
|
+ CommonTree TEXT3=null;
|
|
+ CommonTree NEWLINE4=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:177:2: ( exprElement | TEXT | NEWLINE )
|
|
+ int alt4=3;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case EXPR:
|
|
+ {
|
|
+ alt4=1;
|
|
+ }
|
|
+ break;
|
|
+ case TEXT:
|
|
+ {
|
|
+ alt4=2;
|
|
+ }
|
|
+ break;
|
|
+ case NEWLINE:
|
|
+ {
|
|
+ alt4=3;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 4, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt4) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:177:4: exprElement
|
|
+ {
|
|
+ pushFollow(FOLLOW_exprElement_in_singleElement150);
|
|
+ exprElement();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:178:4: TEXT
|
|
+ {
|
|
+ TEXT3=(CommonTree)match(input,TEXT,FOLLOW_TEXT_in_singleElement155);
|
|
+
|
|
+ if ( (TEXT3!=null?TEXT3.getText():null).length()>0 ) {
|
|
+ emit1(TEXT3,Bytecode.INSTR_WRITE_STR, (TEXT3!=null?TEXT3.getText():null));
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:185:4: NEWLINE
|
|
+ {
|
|
+ NEWLINE4=(CommonTree)match(input,NEWLINE,FOLLOW_NEWLINE_in_singleElement165);
|
|
+ emit(NEWLINE4, Bytecode.INSTR_NEWLINE);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "singleElement"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "compoundElement"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:188:1: compoundElement[CommonTree indent] : ( ifstat[indent] | region[indent] );
|
|
+ public final void compoundElement(CommonTree indent) throws RecognitionException {
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:189:2: ( ifstat[indent] | region[indent] )
|
|
+ int alt5=2;
|
|
+ int LA5_0 = input.LA(1);
|
|
+ if ( (LA5_0==IF) ) {
|
|
+ alt5=1;
|
|
+ }
|
|
+ else if ( (LA5_0==REGION) ) {
|
|
+ alt5=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 5, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt5) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:189:4: ifstat[indent]
|
|
+ {
|
|
+ pushFollow(FOLLOW_ifstat_in_compoundElement179);
|
|
+ ifstat(indent);
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:190:4: region[indent]
|
|
+ {
|
|
+ pushFollow(FOLLOW_region_in_compoundElement185);
|
|
+ region(indent);
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "compoundElement"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "exprElement"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:193:1: exprElement : ^( EXPR expr ( exprOptions )? ) ;
|
|
+ public final void exprElement() throws RecognitionException {
|
|
+ CommonTree EXPR5=null;
|
|
+
|
|
+ short op = Bytecode.INSTR_WRITE;
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:195:2: ( ^( EXPR expr ( exprOptions )? ) )
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:195:4: ^( EXPR expr ( exprOptions )? )
|
|
+ {
|
|
+ EXPR5=(CommonTree)match(input,EXPR,FOLLOW_EXPR_in_exprElement204);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_expr_in_exprElement206);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:195:17: ( exprOptions )?
|
|
+ int alt6=2;
|
|
+ int LA6_0 = input.LA(1);
|
|
+ if ( (LA6_0==OPTIONS) ) {
|
|
+ alt6=1;
|
|
+ }
|
|
+ switch (alt6) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:195:18: exprOptions
|
|
+ {
|
|
+ pushFollow(FOLLOW_exprOptions_in_exprElement209);
|
|
+ exprOptions();
|
|
+ state._fsp--;
|
|
+
|
|
+ op=Bytecode.INSTR_WRITE_OPT;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+
|
|
+ /*
|
|
+ CompilationState state = template_stack.peek().state;
|
|
+ CompiledST impl = state.impl;
|
|
+ if ( impl.instrs[state.ip-1] == Bytecode.INSTR_LOAD_LOCAL ) {
|
|
+ impl.instrs[state.ip-1] = Bytecode.INSTR_WRITE_LOCAL;
|
|
+ }
|
|
+ else {
|
|
+ emit(EXPR5, op);
|
|
+ }
|
|
+ */
|
|
+ emit(EXPR5, op);
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "exprElement"
|
|
+
|
|
+
|
|
+ public static class region_return extends TreeRuleReturnScope {
|
|
+ public String name;
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "region"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:211:1: region[CommonTree indent] returns [String name] : ^( REGION ID template[$name,null] ) ;
|
|
+ public final CodeGenerator.region_return region(CommonTree indent) throws RecognitionException {
|
|
+ CodeGenerator.region_return retval = new CodeGenerator.region_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree ID6=null;
|
|
+ CompiledST template7 =null;
|
|
+
|
|
+
|
|
+ if ( indent!=null ) template_stack.peek().state.indent(indent);
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:218:2: ( ^( REGION ID template[$name,null] ) )
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:218:4: ^( REGION ID template[$name,null] )
|
|
+ {
|
|
+ match(input,REGION,FOLLOW_REGION_in_region247);
|
|
+ match(input, Token.DOWN, null);
|
|
+ ID6=(CommonTree)match(input,ID,FOLLOW_ID_in_region249);
|
|
+ retval.name = STGroup.getMangledRegionName(outermostTemplateName, (ID6!=null?ID6.getText():null));
|
|
+ pushFollow(FOLLOW_template_in_region259);
|
|
+ template7=template(retval.name, null);
|
|
+ state._fsp--;
|
|
+
|
|
+
|
|
+ CompiledST sub = template7;
|
|
+ sub.isRegion = true;
|
|
+ sub.regionDefType = ST.RegionType.EMBEDDED;
|
|
+ sub.templateDefStartToken = ID6.token;
|
|
+ //sub.dump();
|
|
+ outermostImpl.addImplicitlyDefinedTemplate(sub);
|
|
+ emit2(((CommonTree)retval.start), Bytecode.INSTR_NEW, retval.name, 0);
|
|
+ emit(((CommonTree)retval.start), Bytecode.INSTR_WRITE);
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ if ( indent!=null ) template_stack.peek().state.emit(Bytecode.INSTR_DEDENT);
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "region"
|
|
+
|
|
+
|
|
+ public static class subtemplate_return extends TreeRuleReturnScope {
|
|
+ public String name;
|
|
+ public int nargs;
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "subtemplate"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:234:1: subtemplate returns [String name, int nargs] : ( ^( SUBTEMPLATE ( ^( ARGS ( ID )+ ) )* template[$name,args] ) | SUBTEMPLATE );
|
|
+ public final CodeGenerator.subtemplate_return subtemplate() throws RecognitionException {
|
|
+ CodeGenerator.subtemplate_return retval = new CodeGenerator.subtemplate_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree ID8=null;
|
|
+ CommonTree SUBTEMPLATE10=null;
|
|
+ CommonTree SUBTEMPLATE11=null;
|
|
+ CompiledST template9 =null;
|
|
+
|
|
+
|
|
+ retval.name = Compiler.getNewSubtemplateName();
|
|
+ List<FormalArgument> args = new ArrayList<FormalArgument>();
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:239:2: ( ^( SUBTEMPLATE ( ^( ARGS ( ID )+ ) )* template[$name,args] ) | SUBTEMPLATE )
|
|
+ int alt9=2;
|
|
+ int LA9_0 = input.LA(1);
|
|
+ if ( (LA9_0==SUBTEMPLATE) ) {
|
|
+ int LA9_1 = input.LA(2);
|
|
+ if ( (LA9_1==DOWN) ) {
|
|
+ alt9=1;
|
|
+ }
|
|
+ else if ( ((LA9_1 >= UP && LA9_1 <= ELSEIF)||(LA9_1 >= BANG && LA9_1 <= EQUALS)||LA9_1==TEXT||(LA9_1 >= ID && LA9_1 <= STRING)||(LA9_1 >= OR && LA9_1 <= AND)||LA9_1==NEWLINE||(LA9_1 >= TRUE && LA9_1 <= FALSE)||(LA9_1 >= EXEC_FUNC && LA9_1 <= ZIP)) ) {
|
|
+ alt9=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 9, 1, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 9, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt9) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:239:4: ^( SUBTEMPLATE ( ^( ARGS ( ID )+ ) )* template[$name,args] )
|
|
+ {
|
|
+ SUBTEMPLATE10=(CommonTree)match(input,SUBTEMPLATE,FOLLOW_SUBTEMPLATE_in_subtemplate292);
|
|
+ if ( input.LA(1)==Token.DOWN ) {
|
|
+ match(input, Token.DOWN, null);
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:240:4: ( ^( ARGS ( ID )+ ) )*
|
|
+ loop8:
|
|
+ while (true) {
|
|
+ int alt8=2;
|
|
+ int LA8_0 = input.LA(1);
|
|
+ if ( (LA8_0==ARGS) ) {
|
|
+ alt8=1;
|
|
+ }
|
|
+
|
|
+ switch (alt8) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:240:5: ^( ARGS ( ID )+ )
|
|
+ {
|
|
+ match(input,ARGS,FOLLOW_ARGS_in_subtemplate299);
|
|
+ match(input, Token.DOWN, null);
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:240:12: ( ID )+
|
|
+ int cnt7=0;
|
|
+ loop7:
|
|
+ while (true) {
|
|
+ int alt7=2;
|
|
+ int LA7_0 = input.LA(1);
|
|
+ if ( (LA7_0==ID) ) {
|
|
+ alt7=1;
|
|
+ }
|
|
+
|
|
+ switch (alt7) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:240:13: ID
|
|
+ {
|
|
+ ID8=(CommonTree)match(input,ID,FOLLOW_ID_in_subtemplate302);
|
|
+ addArgument(args, ID8.token);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ if ( cnt7 >= 1 ) break loop7;
|
|
+ EarlyExitException eee = new EarlyExitException(7, input);
|
|
+ throw eee;
|
|
+ }
|
|
+ cnt7++;
|
|
+ }
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop8;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ retval.nargs = args.size();
|
|
+ pushFollow(FOLLOW_template_in_subtemplate319);
|
|
+ template9=template(retval.name, args);
|
|
+ state._fsp--;
|
|
+
|
|
+
|
|
+ CompiledST sub = template9;
|
|
+ sub.isAnonSubtemplate = true;
|
|
+ sub.templateDefStartToken = SUBTEMPLATE10.token;
|
|
+ sub.ast = SUBTEMPLATE10;
|
|
+ sub.ast.setUnknownTokenBoundaries();
|
|
+ sub.tokens = input.getTokenStream();
|
|
+ //sub.dump();
|
|
+ outermostImpl.addImplicitlyDefinedTemplate(sub);
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:254:4: SUBTEMPLATE
|
|
+ {
|
|
+ SUBTEMPLATE11=(CommonTree)match(input,SUBTEMPLATE,FOLLOW_SUBTEMPLATE_in_subtemplate335);
|
|
+
|
|
+ CompiledST sub = new CompiledST();
|
|
+ sub.name = retval.name;
|
|
+ sub.template = "";
|
|
+ sub.addArg(new FormalArgument("i"));
|
|
+ sub.addArg(new FormalArgument("i0"));
|
|
+ sub.isAnonSubtemplate = true;
|
|
+ sub.templateDefStartToken = SUBTEMPLATE11.token;
|
|
+ sub.ast = SUBTEMPLATE11;
|
|
+ sub.ast.setUnknownTokenBoundaries();
|
|
+ sub.tokens = input.getTokenStream();
|
|
+ //sub.dump();
|
|
+ outermostImpl.addImplicitlyDefinedTemplate(sub);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "subtemplate"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "ifstat"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:271:1: ifstat[CommonTree indent] : ^(i= 'if' conditional chunk ( ^(eif= 'elseif' ec= conditional chunk ) )* ( ^(el= 'else' chunk ) )? ) ;
|
|
+ public final void ifstat(CommonTree indent) throws RecognitionException {
|
|
+ CommonTree i=null;
|
|
+ CommonTree eif=null;
|
|
+ CommonTree el=null;
|
|
+ TreeRuleReturnScope ec =null;
|
|
+
|
|
+
|
|
+ /** Tracks address of branch operand (in code block). It's how
|
|
+ * we backpatch forward references when generating code for IFs.
|
|
+ */
|
|
+ int prevBranchOperand = -1;
|
|
+ /** Branch instruction operands that are forward refs to end of IF.
|
|
+ * We need to update them once we see the endif.
|
|
+ */
|
|
+ List<Integer> endRefs = new ArrayList<Integer>();
|
|
+ if ( indent!=null ) template_stack.peek().state.indent(indent);
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:286:2: ( ^(i= 'if' conditional chunk ( ^(eif= 'elseif' ec= conditional chunk ) )* ( ^(el= 'else' chunk ) )? ) )
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:286:4: ^(i= 'if' conditional chunk ( ^(eif= 'elseif' ec= conditional chunk ) )* ( ^(el= 'else' chunk ) )? )
|
|
+ {
|
|
+ i=(CommonTree)match(input,IF,FOLLOW_IF_in_ifstat367);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_conditional_in_ifstat369);
|
|
+ conditional();
|
|
+ state._fsp--;
|
|
+
|
|
+
|
|
+ prevBranchOperand = address()+1;
|
|
+ emit1(i,Bytecode.INSTR_BRF, -1); // write placeholder as branch target
|
|
+
|
|
+ pushFollow(FOLLOW_chunk_in_ifstat379);
|
|
+ chunk();
|
|
+ state._fsp--;
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:292:4: ( ^(eif= 'elseif' ec= conditional chunk ) )*
|
|
+ loop10:
|
|
+ while (true) {
|
|
+ int alt10=2;
|
|
+ int LA10_0 = input.LA(1);
|
|
+ if ( (LA10_0==ELSEIF) ) {
|
|
+ alt10=1;
|
|
+ }
|
|
+
|
|
+ switch (alt10) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:292:6: ^(eif= 'elseif' ec= conditional chunk )
|
|
+ {
|
|
+ eif=(CommonTree)match(input,ELSEIF,FOLLOW_ELSEIF_in_ifstat389);
|
|
+
|
|
+ endRefs.add(address()+1);
|
|
+ emit1(eif,Bytecode.INSTR_BR, -1); // br end
|
|
+ // update previous branch instruction
|
|
+ write(prevBranchOperand, (short)address());
|
|
+ prevBranchOperand = -1;
|
|
+
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_conditional_in_ifstat403);
|
|
+ ec=conditional();
|
|
+ state._fsp--;
|
|
+
|
|
+
|
|
+ prevBranchOperand = address()+1;
|
|
+ // write placeholder as branch target
|
|
+ emit1((ec!=null?((CommonTree)ec.start):null), Bytecode.INSTR_BRF, -1);
|
|
+
|
|
+ pushFollow(FOLLOW_chunk_in_ifstat415);
|
|
+ chunk();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop10;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:309:4: ( ^(el= 'else' chunk ) )?
|
|
+ int alt11=2;
|
|
+ int LA11_0 = input.LA(1);
|
|
+ if ( (LA11_0==ELSE) ) {
|
|
+ alt11=1;
|
|
+ }
|
|
+ switch (alt11) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:309:6: ^(el= 'else' chunk )
|
|
+ {
|
|
+ el=(CommonTree)match(input,ELSE,FOLLOW_ELSE_in_ifstat438);
|
|
+
|
|
+ endRefs.add(address()+1);
|
|
+ emit1(el, Bytecode.INSTR_BR, -1); // br end
|
|
+ // update previous branch instruction
|
|
+ write(prevBranchOperand, (short)address());
|
|
+ prevBranchOperand = -1;
|
|
+
|
|
+ if ( input.LA(1)==Token.DOWN ) {
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_chunk_in_ifstat452);
|
|
+ chunk();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+
|
|
+ if ( prevBranchOperand>=0 ) {
|
|
+ write(prevBranchOperand, (short)address());
|
|
+ }
|
|
+ for (int opnd : endRefs) write(opnd, (short)address());
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ if ( indent!=null ) template_stack.peek().state.emit(Bytecode.INSTR_DEDENT);
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "ifstat"
|
|
+
|
|
+
|
|
+ public static class conditional_return extends TreeRuleReturnScope {
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "conditional"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:329:1: conditional : ( ^( OR conditional conditional ) | ^( AND conditional conditional ) | ^( BANG conditional ) | expr );
|
|
+ public final CodeGenerator.conditional_return conditional() throws RecognitionException {
|
|
+ CodeGenerator.conditional_return retval = new CodeGenerator.conditional_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree OR12=null;
|
|
+ CommonTree AND13=null;
|
|
+ CommonTree BANG14=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:330:2: ( ^( OR conditional conditional ) | ^( AND conditional conditional ) | ^( BANG conditional ) | expr )
|
|
+ int alt12=4;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case OR:
|
|
+ {
|
|
+ alt12=1;
|
|
+ }
|
|
+ break;
|
|
+ case AND:
|
|
+ {
|
|
+ alt12=2;
|
|
+ }
|
|
+ break;
|
|
+ case BANG:
|
|
+ {
|
|
+ alt12=3;
|
|
+ }
|
|
+ break;
|
|
+ case ID:
|
|
+ case STRING:
|
|
+ case TRUE:
|
|
+ case FALSE:
|
|
+ case EXEC_FUNC:
|
|
+ case INCLUDE:
|
|
+ case INCLUDE_IND:
|
|
+ case INCLUDE_REGION:
|
|
+ case INCLUDE_SUPER:
|
|
+ case INCLUDE_SUPER_REGION:
|
|
+ case LIST:
|
|
+ case MAP:
|
|
+ case PROP:
|
|
+ case PROP_IND:
|
|
+ case SUBTEMPLATE:
|
|
+ case TO_STR:
|
|
+ case ZIP:
|
|
+ {
|
|
+ alt12=4;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 12, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt12) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:330:4: ^( OR conditional conditional )
|
|
+ {
|
|
+ OR12=(CommonTree)match(input,OR,FOLLOW_OR_in_conditional486);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_conditional_in_conditional488);
|
|
+ conditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ pushFollow(FOLLOW_conditional_in_conditional490);
|
|
+ conditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ emit(OR12, Bytecode.INSTR_OR);
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:331:4: ^( AND conditional conditional )
|
|
+ {
|
|
+ AND13=(CommonTree)match(input,AND,FOLLOW_AND_in_conditional500);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_conditional_in_conditional502);
|
|
+ conditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ pushFollow(FOLLOW_conditional_in_conditional504);
|
|
+ conditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ emit(AND13, Bytecode.INSTR_AND);
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:332:4: ^( BANG conditional )
|
|
+ {
|
|
+ BANG14=(CommonTree)match(input,BANG,FOLLOW_BANG_in_conditional514);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_conditional_in_conditional516);
|
|
+ conditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ emit(BANG14, Bytecode.INSTR_NOT);
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:333:4: expr
|
|
+ {
|
|
+ pushFollow(FOLLOW_expr_in_conditional528);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "conditional"
|
|
+
|
|
+
|
|
+ public static class exprOptions_return extends TreeRuleReturnScope {
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "exprOptions"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:336:1: exprOptions : ^( OPTIONS ( option )* ) ;
|
|
+ public final CodeGenerator.exprOptions_return exprOptions() throws RecognitionException {
|
|
+ CodeGenerator.exprOptions_return retval = new CodeGenerator.exprOptions_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:336:13: ( ^( OPTIONS ( option )* ) )
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:336:15: ^( OPTIONS ( option )* )
|
|
+ {
|
|
+ emit(((CommonTree)retval.start), Bytecode.INSTR_OPTIONS);
|
|
+ match(input,OPTIONS,FOLLOW_OPTIONS_in_exprOptions542);
|
|
+ if ( input.LA(1)==Token.DOWN ) {
|
|
+ match(input, Token.DOWN, null);
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:336:65: ( option )*
|
|
+ loop13:
|
|
+ while (true) {
|
|
+ int alt13=2;
|
|
+ int LA13_0 = input.LA(1);
|
|
+ if ( (LA13_0==EQUALS) ) {
|
|
+ alt13=1;
|
|
+ }
|
|
+
|
|
+ switch (alt13) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:336:65: option
|
|
+ {
|
|
+ pushFollow(FOLLOW_option_in_exprOptions544);
|
|
+ option();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop13;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "exprOptions"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "option"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:338:1: option : ^( '=' ID expr ) ;
|
|
+ public final void option() throws RecognitionException {
|
|
+ CommonTree ID15=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:338:8: ( ^( '=' ID expr ) )
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:338:10: ^( '=' ID expr )
|
|
+ {
|
|
+ match(input,EQUALS,FOLLOW_EQUALS_in_option556);
|
|
+ match(input, Token.DOWN, null);
|
|
+ ID15=(CommonTree)match(input,ID,FOLLOW_ID_in_option558);
|
|
+ pushFollow(FOLLOW_expr_in_option560);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ setOption(ID15);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "option"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "expr"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:340:1: expr : ( ^( ZIP ^( ELEMENTS ( expr )+ ) mapTemplateRef[ne] ) | ^( MAP expr ( mapTemplateRef[1] )+ ) | prop | includeExpr );
|
|
+ public final void expr() throws RecognitionException {
|
|
+ CommonTree ZIP16=null;
|
|
+ CommonTree MAP17=null;
|
|
+
|
|
+ int nt = 0, ne = 0;
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:342:2: ( ^( ZIP ^( ELEMENTS ( expr )+ ) mapTemplateRef[ne] ) | ^( MAP expr ( mapTemplateRef[1] )+ ) | prop | includeExpr )
|
|
+ int alt16=4;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case ZIP:
|
|
+ {
|
|
+ alt16=1;
|
|
+ }
|
|
+ break;
|
|
+ case MAP:
|
|
+ {
|
|
+ alt16=2;
|
|
+ }
|
|
+ break;
|
|
+ case PROP:
|
|
+ case PROP_IND:
|
|
+ {
|
|
+ alt16=3;
|
|
+ }
|
|
+ break;
|
|
+ case ID:
|
|
+ case STRING:
|
|
+ case TRUE:
|
|
+ case FALSE:
|
|
+ case EXEC_FUNC:
|
|
+ case INCLUDE:
|
|
+ case INCLUDE_IND:
|
|
+ case INCLUDE_REGION:
|
|
+ case INCLUDE_SUPER:
|
|
+ case INCLUDE_SUPER_REGION:
|
|
+ case LIST:
|
|
+ case SUBTEMPLATE:
|
|
+ case TO_STR:
|
|
+ {
|
|
+ alt16=4;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 16, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt16) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:342:4: ^( ZIP ^( ELEMENTS ( expr )+ ) mapTemplateRef[ne] )
|
|
+ {
|
|
+ ZIP16=(CommonTree)match(input,ZIP,FOLLOW_ZIP_in_expr579);
|
|
+ match(input, Token.DOWN, null);
|
|
+ match(input,ELEMENTS,FOLLOW_ELEMENTS_in_expr582);
|
|
+ match(input, Token.DOWN, null);
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:342:21: ( expr )+
|
|
+ int cnt14=0;
|
|
+ loop14:
|
|
+ while (true) {
|
|
+ int alt14=2;
|
|
+ int LA14_0 = input.LA(1);
|
|
+ if ( ((LA14_0 >= ID && LA14_0 <= STRING)||(LA14_0 >= TRUE && LA14_0 <= FALSE)||LA14_0==EXEC_FUNC||(LA14_0 >= INCLUDE && LA14_0 <= INCLUDE_SUPER_REGION)||(LA14_0 >= LIST && LA14_0 <= MAP)||(LA14_0 >= PROP && LA14_0 <= PROP_IND)||(LA14_0 >= SUBTEMPLATE && LA14_0 <= ZIP)) ) {
|
|
+ alt14=1;
|
|
+ }
|
|
+
|
|
+ switch (alt14) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:342:22: expr
|
|
+ {
|
|
+ pushFollow(FOLLOW_expr_in_expr585);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ ne++;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ if ( cnt14 >= 1 ) break loop14;
|
|
+ EarlyExitException eee = new EarlyExitException(14, input);
|
|
+ throw eee;
|
|
+ }
|
|
+ cnt14++;
|
|
+ }
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ pushFollow(FOLLOW_mapTemplateRef_in_expr592);
|
|
+ mapTemplateRef(ne);
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ emit1(ZIP16, Bytecode.INSTR_ZIP_MAP, ne);
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:344:4: ^( MAP expr ( mapTemplateRef[1] )+ )
|
|
+ {
|
|
+ MAP17=(CommonTree)match(input,MAP,FOLLOW_MAP_in_expr604);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_expr_in_expr606);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:344:15: ( mapTemplateRef[1] )+
|
|
+ int cnt15=0;
|
|
+ loop15:
|
|
+ while (true) {
|
|
+ int alt15=2;
|
|
+ int LA15_0 = input.LA(1);
|
|
+ if ( ((LA15_0 >= INCLUDE && LA15_0 <= INCLUDE_IND)||LA15_0==SUBTEMPLATE) ) {
|
|
+ alt15=1;
|
|
+ }
|
|
+
|
|
+ switch (alt15) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:344:16: mapTemplateRef[1]
|
|
+ {
|
|
+ pushFollow(FOLLOW_mapTemplateRef_in_expr609);
|
|
+ mapTemplateRef(1);
|
|
+ state._fsp--;
|
|
+
|
|
+ nt++;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ if ( cnt15 >= 1 ) break loop15;
|
|
+ EarlyExitException eee = new EarlyExitException(15, input);
|
|
+ throw eee;
|
|
+ }
|
|
+ cnt15++;
|
|
+ }
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+
|
|
+ if ( nt>1 ) emit1(MAP17, nt>1?Bytecode.INSTR_ROT_MAP:Bytecode.INSTR_MAP, nt);
|
|
+ else emit(MAP17, Bytecode.INSTR_MAP);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:349:4: prop
|
|
+ {
|
|
+ pushFollow(FOLLOW_prop_in_expr624);
|
|
+ prop();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:350:4: includeExpr
|
|
+ {
|
|
+ pushFollow(FOLLOW_includeExpr_in_expr629);
|
|
+ includeExpr();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "expr"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "prop"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:353:1: prop : ( ^( PROP expr ID ) | ^( PROP_IND expr expr ) );
|
|
+ public final void prop() throws RecognitionException {
|
|
+ CommonTree PROP18=null;
|
|
+ CommonTree ID19=null;
|
|
+ CommonTree PROP_IND20=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:353:5: ( ^( PROP expr ID ) | ^( PROP_IND expr expr ) )
|
|
+ int alt17=2;
|
|
+ int LA17_0 = input.LA(1);
|
|
+ if ( (LA17_0==PROP) ) {
|
|
+ alt17=1;
|
|
+ }
|
|
+ else if ( (LA17_0==PROP_IND) ) {
|
|
+ alt17=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 17, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt17) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:353:7: ^( PROP expr ID )
|
|
+ {
|
|
+ PROP18=(CommonTree)match(input,PROP,FOLLOW_PROP_in_prop639);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_expr_in_prop641);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ ID19=(CommonTree)match(input,ID,FOLLOW_ID_in_prop643);
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ emit1(PROP18, Bytecode.INSTR_LOAD_PROP, (ID19!=null?ID19.getText():null));
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:354:4: ^( PROP_IND expr expr )
|
|
+ {
|
|
+ PROP_IND20=(CommonTree)match(input,PROP_IND,FOLLOW_PROP_IND_in_prop657);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_expr_in_prop659);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ pushFollow(FOLLOW_expr_in_prop661);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ emit(PROP_IND20, Bytecode.INSTR_LOAD_PROP_IND);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "prop"
|
|
+
|
|
+
|
|
+ public static class mapTemplateRef_return extends TreeRuleReturnScope {
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "mapTemplateRef"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:357:1: mapTemplateRef[int num_exprs] : ( ^( INCLUDE qualifiedId args ) | subtemplate | ^( INCLUDE_IND expr args ) );
|
|
+ public final CodeGenerator.mapTemplateRef_return mapTemplateRef(int num_exprs) throws RecognitionException {
|
|
+ CodeGenerator.mapTemplateRef_return retval = new CodeGenerator.mapTemplateRef_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree INCLUDE21=null;
|
|
+ CommonTree INCLUDE_IND25=null;
|
|
+ TreeRuleReturnScope args22 =null;
|
|
+ TreeRuleReturnScope qualifiedId23 =null;
|
|
+ TreeRuleReturnScope subtemplate24 =null;
|
|
+ TreeRuleReturnScope args26 =null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:358:2: ( ^( INCLUDE qualifiedId args ) | subtemplate | ^( INCLUDE_IND expr args ) )
|
|
+ int alt18=3;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case INCLUDE:
|
|
+ {
|
|
+ alt18=1;
|
|
+ }
|
|
+ break;
|
|
+ case SUBTEMPLATE:
|
|
+ {
|
|
+ alt18=2;
|
|
+ }
|
|
+ break;
|
|
+ case INCLUDE_IND:
|
|
+ {
|
|
+ alt18=3;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 18, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt18) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:358:4: ^( INCLUDE qualifiedId args )
|
|
+ {
|
|
+ INCLUDE21=(CommonTree)match(input,INCLUDE,FOLLOW_INCLUDE_in_mapTemplateRef681);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_qualifiedId_in_mapTemplateRef683);
|
|
+ qualifiedId23=qualifiedId();
|
|
+ state._fsp--;
|
|
+
|
|
+ for (int i=1; i<=num_exprs; i++) emit(INCLUDE21,Bytecode.INSTR_NULL);
|
|
+ pushFollow(FOLLOW_args_in_mapTemplateRef693);
|
|
+ args22=args();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+
|
|
+ if ( (args22!=null?((CodeGenerator.args_return)args22).passThru:false) ) emit1(((CommonTree)retval.start), Bytecode.INSTR_PASSTHRU, (qualifiedId23!=null?(input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(qualifiedId23.start),input.getTreeAdaptor().getTokenStopIndex(qualifiedId23.start))):null));
|
|
+ if ( (args22!=null?((CodeGenerator.args_return)args22).namedArgs:false) ) emit1(INCLUDE21, Bytecode.INSTR_NEW_BOX_ARGS, (qualifiedId23!=null?(input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(qualifiedId23.start),input.getTreeAdaptor().getTokenStopIndex(qualifiedId23.start))):null));
|
|
+ else emit2(INCLUDE21, Bytecode.INSTR_NEW, (qualifiedId23!=null?(input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(qualifiedId23.start),input.getTreeAdaptor().getTokenStopIndex(qualifiedId23.start))):null), (args22!=null?((CodeGenerator.args_return)args22).n:0)+num_exprs);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:367:4: subtemplate
|
|
+ {
|
|
+ pushFollow(FOLLOW_subtemplate_in_mapTemplateRef706);
|
|
+ subtemplate24=subtemplate();
|
|
+ state._fsp--;
|
|
+
|
|
+
|
|
+ if ( (subtemplate24!=null?((CodeGenerator.subtemplate_return)subtemplate24).nargs:0) != num_exprs ) {
|
|
+ errMgr.compileTimeError(ErrorType.ANON_ARGUMENT_MISMATCH,
|
|
+ templateToken, (subtemplate24!=null?((CommonTree)subtemplate24.start):null).token, (subtemplate24!=null?((CodeGenerator.subtemplate_return)subtemplate24).nargs:0), num_exprs);
|
|
+ }
|
|
+ for (int i=1; i<=num_exprs; i++) emit((subtemplate24!=null?((CommonTree)subtemplate24.start):null),Bytecode.INSTR_NULL);
|
|
+ emit2((subtemplate24!=null?((CommonTree)subtemplate24.start):null), Bytecode.INSTR_NEW,
|
|
+ (subtemplate24!=null?((CodeGenerator.subtemplate_return)subtemplate24).name:null),
|
|
+ num_exprs);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:379:4: ^( INCLUDE_IND expr args )
|
|
+ {
|
|
+ INCLUDE_IND25=(CommonTree)match(input,INCLUDE_IND,FOLLOW_INCLUDE_IND_in_mapTemplateRef718);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_expr_in_mapTemplateRef720);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+
|
|
+ emit(INCLUDE_IND25,Bytecode.INSTR_TOSTR);
|
|
+ for (int i=1; i<=num_exprs; i++) emit(INCLUDE_IND25,Bytecode.INSTR_NULL);
|
|
+
|
|
+ pushFollow(FOLLOW_args_in_mapTemplateRef730);
|
|
+ args26=args();
|
|
+ state._fsp--;
|
|
+
|
|
+
|
|
+ emit1(INCLUDE_IND25, Bytecode.INSTR_NEW_IND, (args26!=null?((CodeGenerator.args_return)args26).n:0)+num_exprs);
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "mapTemplateRef"
|
|
+
|
|
+
|
|
+ public static class includeExpr_return extends TreeRuleReturnScope {
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "includeExpr"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:391:1: includeExpr : ( ^( EXEC_FUNC ID ( expr )? ) | ^( INCLUDE qualifiedId args ) | ^( INCLUDE_SUPER ID args ) | ^( INCLUDE_REGION ID ) | ^( INCLUDE_SUPER_REGION ID ) | primary );
|
|
+ public final CodeGenerator.includeExpr_return includeExpr() throws RecognitionException {
|
|
+ CodeGenerator.includeExpr_return retval = new CodeGenerator.includeExpr_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree ID27=null;
|
|
+ CommonTree INCLUDE30=null;
|
|
+ CommonTree ID32=null;
|
|
+ CommonTree INCLUDE_SUPER33=null;
|
|
+ CommonTree ID34=null;
|
|
+ CommonTree INCLUDE_REGION35=null;
|
|
+ CommonTree ID36=null;
|
|
+ CommonTree INCLUDE_SUPER_REGION37=null;
|
|
+ TreeRuleReturnScope args28 =null;
|
|
+ TreeRuleReturnScope qualifiedId29 =null;
|
|
+ TreeRuleReturnScope args31 =null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:392:2: ( ^( EXEC_FUNC ID ( expr )? ) | ^( INCLUDE qualifiedId args ) | ^( INCLUDE_SUPER ID args ) | ^( INCLUDE_REGION ID ) | ^( INCLUDE_SUPER_REGION ID ) | primary )
|
|
+ int alt20=6;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case EXEC_FUNC:
|
|
+ {
|
|
+ alt20=1;
|
|
+ }
|
|
+ break;
|
|
+ case INCLUDE:
|
|
+ {
|
|
+ alt20=2;
|
|
+ }
|
|
+ break;
|
|
+ case INCLUDE_SUPER:
|
|
+ {
|
|
+ alt20=3;
|
|
+ }
|
|
+ break;
|
|
+ case INCLUDE_REGION:
|
|
+ {
|
|
+ alt20=4;
|
|
+ }
|
|
+ break;
|
|
+ case INCLUDE_SUPER_REGION:
|
|
+ {
|
|
+ alt20=5;
|
|
+ }
|
|
+ break;
|
|
+ case ID:
|
|
+ case STRING:
|
|
+ case TRUE:
|
|
+ case FALSE:
|
|
+ case INCLUDE_IND:
|
|
+ case LIST:
|
|
+ case SUBTEMPLATE:
|
|
+ case TO_STR:
|
|
+ {
|
|
+ alt20=6;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 20, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt20) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:392:4: ^( EXEC_FUNC ID ( expr )? )
|
|
+ {
|
|
+ match(input,EXEC_FUNC,FOLLOW_EXEC_FUNC_in_includeExpr752);
|
|
+ match(input, Token.DOWN, null);
|
|
+ ID27=(CommonTree)match(input,ID,FOLLOW_ID_in_includeExpr754);
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:392:19: ( expr )?
|
|
+ int alt19=2;
|
|
+ int LA19_0 = input.LA(1);
|
|
+ if ( ((LA19_0 >= ID && LA19_0 <= STRING)||(LA19_0 >= TRUE && LA19_0 <= FALSE)||LA19_0==EXEC_FUNC||(LA19_0 >= INCLUDE && LA19_0 <= INCLUDE_SUPER_REGION)||(LA19_0 >= LIST && LA19_0 <= MAP)||(LA19_0 >= PROP && LA19_0 <= PROP_IND)||(LA19_0 >= SUBTEMPLATE && LA19_0 <= ZIP)) ) {
|
|
+ alt19=1;
|
|
+ }
|
|
+ switch (alt19) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:392:19: expr
|
|
+ {
|
|
+ pushFollow(FOLLOW_expr_in_includeExpr756);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ func(ID27);
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:393:4: ^( INCLUDE qualifiedId args )
|
|
+ {
|
|
+ INCLUDE30=(CommonTree)match(input,INCLUDE,FOLLOW_INCLUDE_in_includeExpr767);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_qualifiedId_in_includeExpr769);
|
|
+ qualifiedId29=qualifiedId();
|
|
+ state._fsp--;
|
|
+
|
|
+ pushFollow(FOLLOW_args_in_includeExpr771);
|
|
+ args28=args();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+
|
|
+ if ( (args28!=null?((CodeGenerator.args_return)args28).passThru:false) ) emit1(((CommonTree)retval.start), Bytecode.INSTR_PASSTHRU, (qualifiedId29!=null?(input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(qualifiedId29.start),input.getTreeAdaptor().getTokenStopIndex(qualifiedId29.start))):null));
|
|
+ if ( (args28!=null?((CodeGenerator.args_return)args28).namedArgs:false) ) emit1(INCLUDE30, Bytecode.INSTR_NEW_BOX_ARGS, (qualifiedId29!=null?(input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(qualifiedId29.start),input.getTreeAdaptor().getTokenStopIndex(qualifiedId29.start))):null));
|
|
+ else emit2(INCLUDE30, Bytecode.INSTR_NEW, (qualifiedId29!=null?(input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(qualifiedId29.start),input.getTreeAdaptor().getTokenStopIndex(qualifiedId29.start))):null), (args28!=null?((CodeGenerator.args_return)args28).n:0));
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:399:4: ^( INCLUDE_SUPER ID args )
|
|
+ {
|
|
+ INCLUDE_SUPER33=(CommonTree)match(input,INCLUDE_SUPER,FOLLOW_INCLUDE_SUPER_in_includeExpr782);
|
|
+ match(input, Token.DOWN, null);
|
|
+ ID32=(CommonTree)match(input,ID,FOLLOW_ID_in_includeExpr784);
|
|
+ pushFollow(FOLLOW_args_in_includeExpr786);
|
|
+ args31=args();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+
|
|
+ if ( (args31!=null?((CodeGenerator.args_return)args31).passThru:false) ) emit1(((CommonTree)retval.start), Bytecode.INSTR_PASSTHRU, (ID32!=null?ID32.getText():null));
|
|
+ if ( (args31!=null?((CodeGenerator.args_return)args31).namedArgs:false) ) emit1(INCLUDE_SUPER33, Bytecode.INSTR_SUPER_NEW_BOX_ARGS, (ID32!=null?ID32.getText():null));
|
|
+ else emit2(INCLUDE_SUPER33, Bytecode.INSTR_SUPER_NEW, (ID32!=null?ID32.getText():null), (args31!=null?((CodeGenerator.args_return)args31).n:0));
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:405:4: ^( INCLUDE_REGION ID )
|
|
+ {
|
|
+ INCLUDE_REGION35=(CommonTree)match(input,INCLUDE_REGION,FOLLOW_INCLUDE_REGION_in_includeExpr797);
|
|
+ match(input, Token.DOWN, null);
|
|
+ ID34=(CommonTree)match(input,ID,FOLLOW_ID_in_includeExpr799);
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+
|
|
+ CompiledST impl =
|
|
+ Compiler.defineBlankRegion(outermostImpl, ID34.token);
|
|
+ //impl.dump();
|
|
+ emit2(INCLUDE_REGION35,Bytecode.INSTR_NEW,impl.name,0);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 5 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:411:4: ^( INCLUDE_SUPER_REGION ID )
|
|
+ {
|
|
+ INCLUDE_SUPER_REGION37=(CommonTree)match(input,INCLUDE_SUPER_REGION,FOLLOW_INCLUDE_SUPER_REGION_in_includeExpr809);
|
|
+ match(input, Token.DOWN, null);
|
|
+ ID36=(CommonTree)match(input,ID,FOLLOW_ID_in_includeExpr811);
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+
|
|
+ String mangled =
|
|
+ STGroup.getMangledRegionName(outermostImpl.name, (ID36!=null?ID36.getText():null));
|
|
+ emit2(INCLUDE_SUPER_REGION37,Bytecode.INSTR_SUPER_NEW,mangled,0);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 6 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:416:4: primary
|
|
+ {
|
|
+ pushFollow(FOLLOW_primary_in_includeExpr819);
|
|
+ primary();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "includeExpr"
|
|
+
|
|
+
|
|
+ public static class primary_return extends TreeRuleReturnScope {
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "primary"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:419:1: primary : ( ID | STRING | TRUE | FALSE | subtemplate | list | ^( INCLUDE_IND expr args ) | ^( TO_STR expr ) );
|
|
+ public final CodeGenerator.primary_return primary() throws RecognitionException {
|
|
+ CodeGenerator.primary_return retval = new CodeGenerator.primary_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree ID38=null;
|
|
+ CommonTree STRING39=null;
|
|
+ CommonTree TRUE40=null;
|
|
+ CommonTree FALSE41=null;
|
|
+ CommonTree INCLUDE_IND43=null;
|
|
+ CommonTree TO_STR45=null;
|
|
+ TreeRuleReturnScope subtemplate42 =null;
|
|
+ TreeRuleReturnScope args44 =null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:420:2: ( ID | STRING | TRUE | FALSE | subtemplate | list | ^( INCLUDE_IND expr args ) | ^( TO_STR expr ) )
|
|
+ int alt21=8;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case ID:
|
|
+ {
|
|
+ alt21=1;
|
|
+ }
|
|
+ break;
|
|
+ case STRING:
|
|
+ {
|
|
+ alt21=2;
|
|
+ }
|
|
+ break;
|
|
+ case TRUE:
|
|
+ {
|
|
+ alt21=3;
|
|
+ }
|
|
+ break;
|
|
+ case FALSE:
|
|
+ {
|
|
+ alt21=4;
|
|
+ }
|
|
+ break;
|
|
+ case SUBTEMPLATE:
|
|
+ {
|
|
+ alt21=5;
|
|
+ }
|
|
+ break;
|
|
+ case LIST:
|
|
+ {
|
|
+ alt21=6;
|
|
+ }
|
|
+ break;
|
|
+ case INCLUDE_IND:
|
|
+ {
|
|
+ alt21=7;
|
|
+ }
|
|
+ break;
|
|
+ case TO_STR:
|
|
+ {
|
|
+ alt21=8;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 21, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt21) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:420:4: ID
|
|
+ {
|
|
+ ID38=(CommonTree)match(input,ID,FOLLOW_ID_in_primary830);
|
|
+ refAttr(ID38);
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:421:4: STRING
|
|
+ {
|
|
+ STRING39=(CommonTree)match(input,STRING,FOLLOW_STRING_in_primary840);
|
|
+ emit1(STRING39,Bytecode.INSTR_LOAD_STR, Misc.strip((STRING39!=null?STRING39.getText():null),1));
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:422:4: TRUE
|
|
+ {
|
|
+ TRUE40=(CommonTree)match(input,TRUE,FOLLOW_TRUE_in_primary849);
|
|
+ emit(TRUE40, Bytecode.INSTR_TRUE);
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:423:4: FALSE
|
|
+ {
|
|
+ FALSE41=(CommonTree)match(input,FALSE,FOLLOW_FALSE_in_primary858);
|
|
+ emit(FALSE41, Bytecode.INSTR_FALSE);
|
|
+ }
|
|
+ break;
|
|
+ case 5 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:424:4: subtemplate
|
|
+ {
|
|
+ pushFollow(FOLLOW_subtemplate_in_primary867);
|
|
+ subtemplate42=subtemplate();
|
|
+ state._fsp--;
|
|
+
|
|
+ emit2(((CommonTree)retval.start),Bytecode.INSTR_NEW, (subtemplate42!=null?((CodeGenerator.subtemplate_return)subtemplate42).name:null), 0);
|
|
+ }
|
|
+ break;
|
|
+ case 6 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:426:4: list
|
|
+ {
|
|
+ pushFollow(FOLLOW_list_in_primary894);
|
|
+ list();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 7 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:427:4: ^( INCLUDE_IND expr args )
|
|
+ {
|
|
+ INCLUDE_IND43=(CommonTree)match(input,INCLUDE_IND,FOLLOW_INCLUDE_IND_in_primary901);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_expr_in_primary906);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ emit(INCLUDE_IND43, Bytecode.INSTR_TOSTR);
|
|
+ pushFollow(FOLLOW_args_in_primary915);
|
|
+ args44=args();
|
|
+ state._fsp--;
|
|
+
|
|
+ emit1(INCLUDE_IND43, Bytecode.INSTR_NEW_IND, (args44!=null?((CodeGenerator.args_return)args44).n:0));
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 8 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:431:4: ^( TO_STR expr )
|
|
+ {
|
|
+ TO_STR45=(CommonTree)match(input,TO_STR,FOLLOW_TO_STR_in_primary935);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_expr_in_primary937);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ emit(TO_STR45, Bytecode.INSTR_TOSTR);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "primary"
|
|
+
|
|
+
|
|
+ public static class qualifiedId_return extends TreeRuleReturnScope {
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "qualifiedId"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:434:1: qualifiedId : ( ^( SLASH qualifiedId ID ) | ^( SLASH ID ) | ID );
|
|
+ public final CodeGenerator.qualifiedId_return qualifiedId() throws RecognitionException {
|
|
+ CodeGenerator.qualifiedId_return retval = new CodeGenerator.qualifiedId_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:435:2: ( ^( SLASH qualifiedId ID ) | ^( SLASH ID ) | ID )
|
|
+ int alt22=3;
|
|
+ int LA22_0 = input.LA(1);
|
|
+ if ( (LA22_0==SLASH) ) {
|
|
+ int LA22_1 = input.LA(2);
|
|
+ if ( (LA22_1==DOWN) ) {
|
|
+ int LA22_3 = input.LA(3);
|
|
+ if ( (LA22_3==ID) ) {
|
|
+ int LA22_4 = input.LA(4);
|
|
+ if ( (LA22_4==UP) ) {
|
|
+ alt22=2;
|
|
+ }
|
|
+ else if ( (LA22_4==ID) ) {
|
|
+ alt22=1;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 22, 4, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA22_3==SLASH) ) {
|
|
+ alt22=1;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 22, 3, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 22, 1, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA22_0==ID) ) {
|
|
+ alt22=3;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 22, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt22) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:435:4: ^( SLASH qualifiedId ID )
|
|
+ {
|
|
+ match(input,SLASH,FOLLOW_SLASH_in_qualifiedId952);
|
|
+ match(input, Token.DOWN, null);
|
|
+ pushFollow(FOLLOW_qualifiedId_in_qualifiedId954);
|
|
+ qualifiedId();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input,ID,FOLLOW_ID_in_qualifiedId956);
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:436:4: ^( SLASH ID )
|
|
+ {
|
|
+ match(input,SLASH,FOLLOW_SLASH_in_qualifiedId963);
|
|
+ match(input, Token.DOWN, null);
|
|
+ match(input,ID,FOLLOW_ID_in_qualifiedId965);
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:437:4: ID
|
|
+ {
|
|
+ match(input,ID,FOLLOW_ID_in_qualifiedId971);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "qualifiedId"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "arg"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:440:1: arg : expr ;
|
|
+ public final void arg() throws RecognitionException {
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:440:5: ( expr )
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:440:7: expr
|
|
+ {
|
|
+ pushFollow(FOLLOW_expr_in_arg981);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "arg"
|
|
+
|
|
+
|
|
+ public static class args_return extends TreeRuleReturnScope {
|
|
+ public int n=0;
|
|
+ public boolean namedArgs=false;
|
|
+ public boolean passThru;
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "args"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:442:1: args returns [int n=0, boolean namedArgs=false, boolean passThru] : ( ( arg )+ | ( ^(eq= '=' ID expr ) )+ ( '...' )? | '...' |);
|
|
+ public final CodeGenerator.args_return args() throws RecognitionException {
|
|
+ CodeGenerator.args_return retval = new CodeGenerator.args_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree eq=null;
|
|
+ CommonTree ID46=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:443:2: ( ( arg )+ | ( ^(eq= '=' ID expr ) )+ ( '...' )? | '...' |)
|
|
+ int alt26=4;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case ID:
|
|
+ case STRING:
|
|
+ case TRUE:
|
|
+ case FALSE:
|
|
+ case EXEC_FUNC:
|
|
+ case INCLUDE:
|
|
+ case INCLUDE_IND:
|
|
+ case INCLUDE_REGION:
|
|
+ case INCLUDE_SUPER:
|
|
+ case INCLUDE_SUPER_REGION:
|
|
+ case LIST:
|
|
+ case MAP:
|
|
+ case PROP:
|
|
+ case PROP_IND:
|
|
+ case SUBTEMPLATE:
|
|
+ case TO_STR:
|
|
+ case ZIP:
|
|
+ {
|
|
+ alt26=1;
|
|
+ }
|
|
+ break;
|
|
+ case EQUALS:
|
|
+ {
|
|
+ alt26=2;
|
|
+ }
|
|
+ break;
|
|
+ case ELLIPSIS:
|
|
+ {
|
|
+ alt26=3;
|
|
+ }
|
|
+ break;
|
|
+ case UP:
|
|
+ {
|
|
+ alt26=4;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 26, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt26) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:443:4: ( arg )+
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:443:4: ( arg )+
|
|
+ int cnt23=0;
|
|
+ loop23:
|
|
+ while (true) {
|
|
+ int alt23=2;
|
|
+ int LA23_0 = input.LA(1);
|
|
+ if ( ((LA23_0 >= ID && LA23_0 <= STRING)||(LA23_0 >= TRUE && LA23_0 <= FALSE)||LA23_0==EXEC_FUNC||(LA23_0 >= INCLUDE && LA23_0 <= INCLUDE_SUPER_REGION)||(LA23_0 >= LIST && LA23_0 <= MAP)||(LA23_0 >= PROP && LA23_0 <= PROP_IND)||(LA23_0 >= SUBTEMPLATE && LA23_0 <= ZIP)) ) {
|
|
+ alt23=1;
|
|
+ }
|
|
+
|
|
+ switch (alt23) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:443:6: arg
|
|
+ {
|
|
+ pushFollow(FOLLOW_arg_in_args997);
|
|
+ arg();
|
|
+ state._fsp--;
|
|
+
|
|
+ retval.n++;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ if ( cnt23 >= 1 ) break loop23;
|
|
+ EarlyExitException eee = new EarlyExitException(23, input);
|
|
+ throw eee;
|
|
+ }
|
|
+ cnt23++;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:444:4: ( ^(eq= '=' ID expr ) )+ ( '...' )?
|
|
+ {
|
|
+ emit(((CommonTree)retval.start), Bytecode.INSTR_ARGS); retval.namedArgs =true;
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:445:3: ( ^(eq= '=' ID expr ) )+
|
|
+ int cnt24=0;
|
|
+ loop24:
|
|
+ while (true) {
|
|
+ int alt24=2;
|
|
+ int LA24_0 = input.LA(1);
|
|
+ if ( (LA24_0==EQUALS) ) {
|
|
+ alt24=1;
|
|
+ }
|
|
+
|
|
+ switch (alt24) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:445:5: ^(eq= '=' ID expr )
|
|
+ {
|
|
+ eq=(CommonTree)match(input,EQUALS,FOLLOW_EQUALS_in_args1016);
|
|
+ match(input, Token.DOWN, null);
|
|
+ ID46=(CommonTree)match(input,ID,FOLLOW_ID_in_args1018);
|
|
+ pushFollow(FOLLOW_expr_in_args1020);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+
|
|
+ retval.n++; emit1(eq, Bytecode.INSTR_STORE_ARG, defineString((ID46!=null?ID46.getText():null)));
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ if ( cnt24 >= 1 ) break loop24;
|
|
+ EarlyExitException eee = new EarlyExitException(24, input);
|
|
+ throw eee;
|
|
+ }
|
|
+ cnt24++;
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:448:3: ( '...' )?
|
|
+ int alt25=2;
|
|
+ int LA25_0 = input.LA(1);
|
|
+ if ( (LA25_0==ELLIPSIS) ) {
|
|
+ alt25=1;
|
|
+ }
|
|
+ switch (alt25) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:448:5: '...'
|
|
+ {
|
|
+ match(input,ELLIPSIS,FOLLOW_ELLIPSIS_in_args1037);
|
|
+ retval.passThru =true;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:449:9: '...'
|
|
+ {
|
|
+ match(input,ELLIPSIS,FOLLOW_ELLIPSIS_in_args1052);
|
|
+ retval.passThru =true; emit(((CommonTree)retval.start), Bytecode.INSTR_ARGS); retval.namedArgs =true;
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:451:3:
|
|
+ {
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "args"
|
|
+
|
|
+
|
|
+ public static class list_return extends TreeRuleReturnScope {
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "list"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:453:1: list : ^( LIST ( listElement )* ) ;
|
|
+ public final CodeGenerator.list_return list() throws RecognitionException {
|
|
+ CodeGenerator.list_return retval = new CodeGenerator.list_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ TreeRuleReturnScope listElement47 =null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:453:5: ( ^( LIST ( listElement )* ) )
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:453:7: ^( LIST ( listElement )* )
|
|
+ {
|
|
+ emit(((CommonTree)retval.start), Bytecode.INSTR_LIST);
|
|
+ match(input,LIST,FOLLOW_LIST_in_list1072);
|
|
+ if ( input.LA(1)==Token.DOWN ) {
|
|
+ match(input, Token.DOWN, null);
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:454:10: ( listElement )*
|
|
+ loop27:
|
|
+ while (true) {
|
|
+ int alt27=2;
|
|
+ int LA27_0 = input.LA(1);
|
|
+ if ( ((LA27_0 >= ID && LA27_0 <= STRING)||(LA27_0 >= TRUE && LA27_0 <= FALSE)||LA27_0==EXEC_FUNC||(LA27_0 >= INCLUDE && LA27_0 <= INCLUDE_SUPER_REGION)||(LA27_0 >= LIST && LA27_0 <= NULL)||(LA27_0 >= PROP && LA27_0 <= PROP_IND)||(LA27_0 >= SUBTEMPLATE && LA27_0 <= ZIP)) ) {
|
|
+ alt27=1;
|
|
+ }
|
|
+
|
|
+ switch (alt27) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:454:11: listElement
|
|
+ {
|
|
+ pushFollow(FOLLOW_listElement_in_list1075);
|
|
+ listElement47=listElement();
|
|
+ state._fsp--;
|
|
+
|
|
+ emit((listElement47!=null?((CommonTree)listElement47.start):null), Bytecode.INSTR_ADD);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop27;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ match(input, Token.UP, null);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "list"
|
|
+
|
|
+
|
|
+ public static class listElement_return extends TreeRuleReturnScope {
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "listElement"
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:457:1: listElement : ( expr | NULL );
|
|
+ public final CodeGenerator.listElement_return listElement() throws RecognitionException {
|
|
+ CodeGenerator.listElement_return retval = new CodeGenerator.listElement_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree NULL48=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:457:13: ( expr | NULL )
|
|
+ int alt28=2;
|
|
+ int LA28_0 = input.LA(1);
|
|
+ if ( ((LA28_0 >= ID && LA28_0 <= STRING)||(LA28_0 >= TRUE && LA28_0 <= FALSE)||LA28_0==EXEC_FUNC||(LA28_0 >= INCLUDE && LA28_0 <= INCLUDE_SUPER_REGION)||(LA28_0 >= LIST && LA28_0 <= MAP)||(LA28_0 >= PROP && LA28_0 <= PROP_IND)||(LA28_0 >= SUBTEMPLATE && LA28_0 <= ZIP)) ) {
|
|
+ alt28=1;
|
|
+ }
|
|
+ else if ( (LA28_0==NULL) ) {
|
|
+ alt28=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 28, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt28) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:457:15: expr
|
|
+ {
|
|
+ pushFollow(FOLLOW_expr_in_listElement1091);
|
|
+ expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/CodeGenerator.g:457:22: NULL
|
|
+ {
|
|
+ NULL48=(CommonTree)match(input,NULL,FOLLOW_NULL_in_listElement1095);
|
|
+ emit(NULL48,Bytecode.INSTR_NULL);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "listElement"
|
|
+
|
|
+ // Delegated rules
|
|
+
|
|
+
|
|
+
|
|
+ public static final BitSet FOLLOW_template_in_templateAndEOF50 = new BitSet(new long[]{0x0000000000000000L});
|
|
+ public static final BitSet FOLLOW_EOF_in_templateAndEOF53 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_chunk_in_template77 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_element_in_chunk92 = new BitSet(new long[]{0x0081040100400012L});
|
|
+ public static final BitSet FOLLOW_INDENTED_EXPR_in_element105 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_INDENT_in_element107 = new BitSet(new long[]{0x0080000000000010L});
|
|
+ public static final BitSet FOLLOW_compoundElement_in_element109 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_compoundElement_in_element117 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_INDENTED_EXPR_in_element124 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_INDENT_in_element126 = new BitSet(new long[]{0x0000040100400008L});
|
|
+ public static final BitSet FOLLOW_singleElement_in_element130 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_singleElement_in_element139 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_exprElement_in_singleElement150 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_TEXT_in_singleElement155 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_NEWLINE_in_singleElement165 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ifstat_in_compoundElement179 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_region_in_compoundElement185 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_EXPR_in_exprElement204 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_expr_in_exprElement206 = new BitSet(new long[]{0x0010000000000008L});
|
|
+ public static final BitSet FOLLOW_exprOptions_in_exprElement209 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_REGION_in_region247 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_ID_in_region249 = new BitSet(new long[]{0x0081040100400010L});
|
|
+ public static final BitSet FOLLOW_template_in_region259 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_SUBTEMPLATE_in_subtemplate292 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_ARGS_in_subtemplate299 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_ID_in_subtemplate302 = new BitSet(new long[]{0x0000000002000008L});
|
|
+ public static final BitSet FOLLOW_template_in_subtemplate319 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_SUBTEMPLATE_in_subtemplate335 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_IF_in_ifstat367 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_conditional_in_ifstat369 = new BitSet(new long[]{0x0081040100400078L});
|
|
+ public static final BitSet FOLLOW_chunk_in_ifstat379 = new BitSet(new long[]{0x0000000000000068L});
|
|
+ public static final BitSet FOLLOW_ELSEIF_in_ifstat389 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_conditional_in_ifstat403 = new BitSet(new long[]{0x0081040100400018L});
|
|
+ public static final BitSet FOLLOW_chunk_in_ifstat415 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_ELSE_in_ifstat438 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_chunk_in_ifstat452 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_OR_in_conditional486 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_conditional_in_conditional488 = new BitSet(new long[]{0x0766FA1866000400L});
|
|
+ public static final BitSet FOLLOW_conditional_in_conditional490 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_AND_in_conditional500 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_conditional_in_conditional502 = new BitSet(new long[]{0x0766FA1866000400L});
|
|
+ public static final BitSet FOLLOW_conditional_in_conditional504 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_BANG_in_conditional514 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_conditional_in_conditional516 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_expr_in_conditional528 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_OPTIONS_in_exprOptions542 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_option_in_exprOptions544 = new BitSet(new long[]{0x0000000000001008L});
|
|
+ public static final BitSet FOLLOW_EQUALS_in_option556 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_ID_in_option558 = new BitSet(new long[]{0x0766FA1806000000L});
|
|
+ public static final BitSet FOLLOW_expr_in_option560 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_ZIP_in_expr579 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_ELEMENTS_in_expr582 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_expr_in_expr585 = new BitSet(new long[]{0x0766FA1806000008L});
|
|
+ public static final BitSet FOLLOW_mapTemplateRef_in_expr592 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_MAP_in_expr604 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_expr_in_expr606 = new BitSet(new long[]{0x0100180000000000L});
|
|
+ public static final BitSet FOLLOW_mapTemplateRef_in_expr609 = new BitSet(new long[]{0x0100180000000008L});
|
|
+ public static final BitSet FOLLOW_prop_in_expr624 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_includeExpr_in_expr629 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_PROP_in_prop639 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_expr_in_prop641 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_ID_in_prop643 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_PROP_IND_in_prop657 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_expr_in_prop659 = new BitSet(new long[]{0x0766FA1806000000L});
|
|
+ public static final BitSet FOLLOW_expr_in_prop661 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_INCLUDE_in_mapTemplateRef681 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_qualifiedId_in_mapTemplateRef683 = new BitSet(new long[]{0x0766FA1806001808L});
|
|
+ public static final BitSet FOLLOW_args_in_mapTemplateRef693 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_subtemplate_in_mapTemplateRef706 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_INCLUDE_IND_in_mapTemplateRef718 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_expr_in_mapTemplateRef720 = new BitSet(new long[]{0x0766FA1806001808L});
|
|
+ public static final BitSet FOLLOW_args_in_mapTemplateRef730 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_EXEC_FUNC_in_includeExpr752 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_ID_in_includeExpr754 = new BitSet(new long[]{0x0766FA1806000008L});
|
|
+ public static final BitSet FOLLOW_expr_in_includeExpr756 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_INCLUDE_in_includeExpr767 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_qualifiedId_in_includeExpr769 = new BitSet(new long[]{0x0766FA1806001808L});
|
|
+ public static final BitSet FOLLOW_args_in_includeExpr771 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_INCLUDE_SUPER_in_includeExpr782 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_ID_in_includeExpr784 = new BitSet(new long[]{0x0766FA1806001808L});
|
|
+ public static final BitSet FOLLOW_args_in_includeExpr786 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_INCLUDE_REGION_in_includeExpr797 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_ID_in_includeExpr799 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_INCLUDE_SUPER_REGION_in_includeExpr809 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_ID_in_includeExpr811 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_primary_in_includeExpr819 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ID_in_primary830 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_STRING_in_primary840 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_TRUE_in_primary849 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_FALSE_in_primary858 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_subtemplate_in_primary867 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_list_in_primary894 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_INCLUDE_IND_in_primary901 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_expr_in_primary906 = new BitSet(new long[]{0x0766FA1806001808L});
|
|
+ public static final BitSet FOLLOW_args_in_primary915 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_TO_STR_in_primary935 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_expr_in_primary937 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_SLASH_in_qualifiedId952 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_qualifiedId_in_qualifiedId954 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_ID_in_qualifiedId956 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_SLASH_in_qualifiedId963 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_ID_in_qualifiedId965 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_ID_in_qualifiedId971 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_expr_in_arg981 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_arg_in_args997 = new BitSet(new long[]{0x0766FA1806000002L});
|
|
+ public static final BitSet FOLLOW_EQUALS_in_args1016 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_ID_in_args1018 = new BitSet(new long[]{0x0766FA1806000000L});
|
|
+ public static final BitSet FOLLOW_expr_in_args1020 = new BitSet(new long[]{0x0000000000000008L});
|
|
+ public static final BitSet FOLLOW_ELLIPSIS_in_args1037 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ELLIPSIS_in_args1052 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_LIST_in_list1072 = new BitSet(new long[]{0x0000000000000004L});
|
|
+ public static final BitSet FOLLOW_listElement_in_list1075 = new BitSet(new long[]{0x076EFA1806000008L});
|
|
+ public static final BitSet FOLLOW_expr_in_listElement1091 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_NULL_in_listElement1095 = new BitSet(new long[]{0x0000000000000002L});
|
|
+}
|
|
diff -urEbwBN src/main/java/org/stringtemplate/v4/compiler/GroupLexer.java src/main/java/org/stringtemplate/v4/compiler/GroupLexer.java
|
|
--- src/main/java/org/stringtemplate/v4/compiler/GroupLexer.java 1970-01-01 01:00:00.000000000 +0100
|
|
+++ src/main/java/org/stringtemplate/v4/compiler/GroupLexer.java 2024-09-21 13:57:52.307857206 +0200
|
|
@@ -0,0 +1,1310 @@
|
|
+// $ANTLR 3.5.3 org/stringtemplate/v4/compiler/Group.g 2024-09-21 11:54:24
|
|
+
|
|
+/*
|
|
+ * [The "BSD license"]
|
|
+ * Copyright (c) 2011 Terence Parr
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. The name of the author may not be used to endorse or promote products
|
|
+ * derived from this software without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ */
|
|
+package org.stringtemplate.v4.compiler;
|
|
+import org.stringtemplate.v4.*;
|
|
+import org.stringtemplate.v4.misc.*;
|
|
+import java.io.File;
|
|
+
|
|
+
|
|
+import org.antlr.runtime.*;
|
|
+import java.util.Stack;
|
|
+import java.util.List;
|
|
+import java.util.ArrayList;
|
|
+
|
|
+@SuppressWarnings("all")
|
|
+public class GroupLexer extends Lexer {
|
|
+ public static final int EOF=-1;
|
|
+ public static final int T__16=16;
|
|
+ public static final int T__17=17;
|
|
+ public static final int T__18=18;
|
|
+ public static final int T__19=19;
|
|
+ public static final int T__20=20;
|
|
+ public static final int T__21=21;
|
|
+ public static final int T__22=22;
|
|
+ public static final int T__23=23;
|
|
+ public static final int T__24=24;
|
|
+ public static final int T__25=25;
|
|
+ public static final int T__26=26;
|
|
+ public static final int T__27=27;
|
|
+ public static final int T__28=28;
|
|
+ public static final int T__29=29;
|
|
+ public static final int ANONYMOUS_TEMPLATE=4;
|
|
+ public static final int BIGSTRING=5;
|
|
+ public static final int BIGSTRING_NO_NL=6;
|
|
+ public static final int COMMENT=7;
|
|
+ public static final int FALSE=8;
|
|
+ public static final int ID=9;
|
|
+ public static final int LBRACK=10;
|
|
+ public static final int LINE_COMMENT=11;
|
|
+ public static final int RBRACK=12;
|
|
+ public static final int STRING=13;
|
|
+ public static final int TRUE=14;
|
|
+ public static final int WS=15;
|
|
+
|
|
+ public STGroup group;
|
|
+
|
|
+ @Override
|
|
+ public void reportError(RecognitionException e) {
|
|
+ String msg = null;
|
|
+ if ( e instanceof NoViableAltException ) {
|
|
+ msg = "invalid character '"+(char)input.LA(1)+"'";
|
|
+ }
|
|
+ else if ( e instanceof MismatchedTokenException && ((MismatchedTokenException)e).expecting=='"' ) {
|
|
+ msg = "unterminated string";
|
|
+ }
|
|
+ else {
|
|
+ msg = getErrorMessage(e, getTokenNames());
|
|
+ }
|
|
+ group.errMgr.groupSyntaxError(ErrorType.SYNTAX_ERROR, getSourceName(), e, msg);
|
|
+ }
|
|
+ @Override
|
|
+ public String getSourceName() {
|
|
+ String fullFileName = super.getSourceName();
|
|
+ File f = new File(fullFileName); // strip to simple name
|
|
+ return f.getName();
|
|
+ }
|
|
+
|
|
+
|
|
+ // delegates
|
|
+ // delegators
|
|
+ public Lexer[] getDelegates() {
|
|
+ return new Lexer[] {};
|
|
+ }
|
|
+
|
|
+ public GroupLexer() {}
|
|
+ public GroupLexer(CharStream input) {
|
|
+ this(input, new RecognizerSharedState());
|
|
+ }
|
|
+ public GroupLexer(CharStream input, RecognizerSharedState state) {
|
|
+ super(input,state);
|
|
+ }
|
|
+ @Override public String getGrammarFileName() { return "org/stringtemplate/v4/compiler/Group.g"; }
|
|
+
|
|
+ // $ANTLR start "FALSE"
|
|
+ public final void mFALSE() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = FALSE;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:65:7: ( 'false' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:65:9: 'false'
|
|
+ {
|
|
+ match("false");
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "FALSE"
|
|
+
|
|
+ // $ANTLR start "LBRACK"
|
|
+ public final void mLBRACK() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = LBRACK;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:66:8: ( '[' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:66:10: '['
|
|
+ {
|
|
+ match('[');
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "LBRACK"
|
|
+
|
|
+ // $ANTLR start "RBRACK"
|
|
+ public final void mRBRACK() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = RBRACK;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:67:8: ( ']' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:67:10: ']'
|
|
+ {
|
|
+ match(']');
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "RBRACK"
|
|
+
|
|
+ // $ANTLR start "TRUE"
|
|
+ public final void mTRUE() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = TRUE;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:68:6: ( 'true' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:68:8: 'true'
|
|
+ {
|
|
+ match("true");
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "TRUE"
|
|
+
|
|
+ // $ANTLR start "T__16"
|
|
+ public final void mT__16() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__16;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:69:7: ( '(' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:69:9: '('
|
|
+ {
|
|
+ match('(');
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__16"
|
|
+
|
|
+ // $ANTLR start "T__17"
|
|
+ public final void mT__17() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__17;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:70:7: ( ')' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:70:9: ')'
|
|
+ {
|
|
+ match(')');
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__17"
|
|
+
|
|
+ // $ANTLR start "T__18"
|
|
+ public final void mT__18() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__18;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:71:7: ( ',' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:71:9: ','
|
|
+ {
|
|
+ match(',');
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__18"
|
|
+
|
|
+ // $ANTLR start "T__19"
|
|
+ public final void mT__19() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__19;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:72:7: ( '.' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:72:9: '.'
|
|
+ {
|
|
+ match('.');
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__19"
|
|
+
|
|
+ // $ANTLR start "T__20"
|
|
+ public final void mT__20() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__20;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:73:7: ( ':' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:73:9: ':'
|
|
+ {
|
|
+ match(':');
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__20"
|
|
+
|
|
+ // $ANTLR start "T__21"
|
|
+ public final void mT__21() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__21;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:74:7: ( '::=' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:74:9: '::='
|
|
+ {
|
|
+ match("::=");
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__21"
|
|
+
|
|
+ // $ANTLR start "T__22"
|
|
+ public final void mT__22() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__22;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:75:7: ( ';' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:75:9: ';'
|
|
+ {
|
|
+ match(';');
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__22"
|
|
+
|
|
+ // $ANTLR start "T__23"
|
|
+ public final void mT__23() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__23;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:76:7: ( '=' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:76:9: '='
|
|
+ {
|
|
+ match('=');
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__23"
|
|
+
|
|
+ // $ANTLR start "T__24"
|
|
+ public final void mT__24() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__24;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:77:7: ( '@' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:77:9: '@'
|
|
+ {
|
|
+ match('@');
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__24"
|
|
+
|
|
+ // $ANTLR start "T__25"
|
|
+ public final void mT__25() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__25;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:78:7: ( 'default' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:78:9: 'default'
|
|
+ {
|
|
+ match("default");
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__25"
|
|
+
|
|
+ // $ANTLR start "T__26"
|
|
+ public final void mT__26() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__26;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:79:7: ( 'delimiters' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:79:9: 'delimiters'
|
|
+ {
|
|
+ match("delimiters");
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__26"
|
|
+
|
|
+ // $ANTLR start "T__27"
|
|
+ public final void mT__27() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__27;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:80:7: ( 'group' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:80:9: 'group'
|
|
+ {
|
|
+ match("group");
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__27"
|
|
+
|
|
+ // $ANTLR start "T__28"
|
|
+ public final void mT__28() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__28;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:81:7: ( 'implements' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:81:9: 'implements'
|
|
+ {
|
|
+ match("implements");
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__28"
|
|
+
|
|
+ // $ANTLR start "T__29"
|
|
+ public final void mT__29() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = T__29;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:82:7: ( 'import' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:82:9: 'import'
|
|
+ {
|
|
+ match("import");
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "T__29"
|
|
+
|
|
+ // $ANTLR start "ID"
|
|
+ public final void mID() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = ID;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:356:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '-' | '_' )* )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:356:6: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '-' | '_' )*
|
|
+ {
|
|
+ if ( (input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
|
|
+ input.consume();
|
|
+ }
|
|
+ else {
|
|
+ MismatchedSetException mse = new MismatchedSetException(null,input);
|
|
+ recover(mse);
|
|
+ throw mse;
|
|
+ }
|
|
+ // org/stringtemplate/v4/compiler/Group.g:356:30: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '-' | '_' )*
|
|
+ loop1:
|
|
+ while (true) {
|
|
+ int alt1=2;
|
|
+ int LA1_0 = input.LA(1);
|
|
+ if ( (LA1_0=='-'||(LA1_0 >= '0' && LA1_0 <= '9')||(LA1_0 >= 'A' && LA1_0 <= 'Z')||LA1_0=='_'||(LA1_0 >= 'a' && LA1_0 <= 'z')) ) {
|
|
+ alt1=1;
|
|
+ }
|
|
+
|
|
+ switch (alt1) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:
|
|
+ {
|
|
+ if ( input.LA(1)=='-'||(input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
|
|
+ input.consume();
|
|
+ }
|
|
+ else {
|
|
+ MismatchedSetException mse = new MismatchedSetException(null,input);
|
|
+ recover(mse);
|
|
+ throw mse;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop1;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "ID"
|
|
+
|
|
+ // $ANTLR start "STRING"
|
|
+ public final void mSTRING() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = STRING;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:360:2: ( '\"' ( '\\\\' '\"' | '\\\\' ~ '\"' | '\\n' |~ ( '\\\\' | '\"' | '\\n' ) )* '\"' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:360:4: '\"' ( '\\\\' '\"' | '\\\\' ~ '\"' | '\\n' |~ ( '\\\\' | '\"' | '\\n' ) )* '\"'
|
|
+ {
|
|
+ match('\"');
|
|
+ // org/stringtemplate/v4/compiler/Group.g:361:3: ( '\\\\' '\"' | '\\\\' ~ '\"' | '\\n' |~ ( '\\\\' | '\"' | '\\n' ) )*
|
|
+ loop2:
|
|
+ while (true) {
|
|
+ int alt2=5;
|
|
+ int LA2_0 = input.LA(1);
|
|
+ if ( (LA2_0=='\\') ) {
|
|
+ int LA2_2 = input.LA(2);
|
|
+ if ( (LA2_2=='\"') ) {
|
|
+ alt2=1;
|
|
+ }
|
|
+ else if ( ((LA2_2 >= '\u0000' && LA2_2 <= '!')||(LA2_2 >= '#' && LA2_2 <= '\uFFFF')) ) {
|
|
+ alt2=2;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA2_0=='\n') ) {
|
|
+ alt2=3;
|
|
+ }
|
|
+ else if ( ((LA2_0 >= '\u0000' && LA2_0 <= '\t')||(LA2_0 >= '\u000B' && LA2_0 <= '!')||(LA2_0 >= '#' && LA2_0 <= '[')||(LA2_0 >= ']' && LA2_0 <= '\uFFFF')) ) {
|
|
+ alt2=4;
|
|
+ }
|
|
+
|
|
+ switch (alt2) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:361:5: '\\\\' '\"'
|
|
+ {
|
|
+ match('\\');
|
|
+ match('\"');
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:362:5: '\\\\' ~ '\"'
|
|
+ {
|
|
+ match('\\');
|
|
+ if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '!')||(input.LA(1) >= '#' && input.LA(1) <= '\uFFFF') ) {
|
|
+ input.consume();
|
|
+ }
|
|
+ else {
|
|
+ MismatchedSetException mse = new MismatchedSetException(null,input);
|
|
+ recover(mse);
|
|
+ throw mse;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:363:5: '\\n'
|
|
+ {
|
|
+
|
|
+ String msg = "\\n in string";
|
|
+ NoViableAltException e = new NoViableAltException("", 0, 0, input);
|
|
+ group.errMgr.groupLexerError(ErrorType.SYNTAX_ERROR, getSourceName(), e, msg);
|
|
+
|
|
+ match('\n');
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:369:5: ~ ( '\\\\' | '\"' | '\\n' )
|
|
+ {
|
|
+ if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '\t')||(input.LA(1) >= '\u000B' && input.LA(1) <= '!')||(input.LA(1) >= '#' && input.LA(1) <= '[')||(input.LA(1) >= ']' && input.LA(1) <= '\uFFFF') ) {
|
|
+ input.consume();
|
|
+ }
|
|
+ else {
|
|
+ MismatchedSetException mse = new MismatchedSetException(null,input);
|
|
+ recover(mse);
|
|
+ throw mse;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop2;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ match('\"');
|
|
+
|
|
+ String txt = getText().replaceAll("\\\\\"","\"");
|
|
+ setText(txt);
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "STRING"
|
|
+
|
|
+ // $ANTLR start "BIGSTRING_NO_NL"
|
|
+ public final void mBIGSTRING_NO_NL() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = BIGSTRING_NO_NL;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:379:2: ( '<%' ( . )* '%>' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:379:4: '<%' ( . )* '%>'
|
|
+ {
|
|
+ match("<%");
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:379:9: ( . )*
|
|
+ loop3:
|
|
+ while (true) {
|
|
+ int alt3=2;
|
|
+ int LA3_0 = input.LA(1);
|
|
+ if ( (LA3_0=='%') ) {
|
|
+ int LA3_1 = input.LA(2);
|
|
+ if ( (LA3_1=='>') ) {
|
|
+ alt3=2;
|
|
+ }
|
|
+ else if ( ((LA3_1 >= '\u0000' && LA3_1 <= '=')||(LA3_1 >= '?' && LA3_1 <= '\uFFFF')) ) {
|
|
+ alt3=1;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( ((LA3_0 >= '\u0000' && LA3_0 <= '$')||(LA3_0 >= '&' && LA3_0 <= '\uFFFF')) ) {
|
|
+ alt3=1;
|
|
+ }
|
|
+
|
|
+ switch (alt3) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:379:11: .
|
|
+ {
|
|
+ matchAny();
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop3;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ match("%>");
|
|
+
|
|
+
|
|
+ String txt = getText().replaceAll("%\\\\>","%>");
|
|
+ setText(txt);
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "BIGSTRING_NO_NL"
|
|
+
|
|
+ // $ANTLR start "BIGSTRING"
|
|
+ public final void mBIGSTRING() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = BIGSTRING;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:398:2: ( '<<' ( options {greedy=false; } : '\\\\' '>' | '\\\\' ~ '>' |~ '\\\\' )* '>>' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:398:4: '<<' ( options {greedy=false; } : '\\\\' '>' | '\\\\' ~ '>' |~ '\\\\' )* '>>'
|
|
+ {
|
|
+ match("<<");
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:399:3: ( options {greedy=false; } : '\\\\' '>' | '\\\\' ~ '>' |~ '\\\\' )*
|
|
+ loop4:
|
|
+ while (true) {
|
|
+ int alt4=4;
|
|
+ int LA4_0 = input.LA(1);
|
|
+ if ( (LA4_0=='>') ) {
|
|
+ int LA4_1 = input.LA(2);
|
|
+ if ( (LA4_1=='>') ) {
|
|
+ alt4=4;
|
|
+ }
|
|
+ else if ( ((LA4_1 >= '\u0000' && LA4_1 <= '=')||(LA4_1 >= '?' && LA4_1 <= '\uFFFF')) ) {
|
|
+ alt4=3;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA4_0=='\\') ) {
|
|
+ int LA4_2 = input.LA(2);
|
|
+ if ( (LA4_2=='>') ) {
|
|
+ alt4=1;
|
|
+ }
|
|
+ else if ( ((LA4_2 >= '\u0000' && LA4_2 <= '=')||(LA4_2 >= '?' && LA4_2 <= '\uFFFF')) ) {
|
|
+ alt4=2;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( ((LA4_0 >= '\u0000' && LA4_0 <= '=')||(LA4_0 >= '?' && LA4_0 <= '[')||(LA4_0 >= ']' && LA4_0 <= '\uFFFF')) ) {
|
|
+ alt4=3;
|
|
+ }
|
|
+
|
|
+ switch (alt4) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:400:5: '\\\\' '>'
|
|
+ {
|
|
+ match('\\');
|
|
+ match('>');
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:401:5: '\\\\' ~ '>'
|
|
+ {
|
|
+ match('\\');
|
|
+ if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '=')||(input.LA(1) >= '?' && input.LA(1) <= '\uFFFF') ) {
|
|
+ input.consume();
|
|
+ }
|
|
+ else {
|
|
+ MismatchedSetException mse = new MismatchedSetException(null,input);
|
|
+ recover(mse);
|
|
+ throw mse;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:402:5: ~ '\\\\'
|
|
+ {
|
|
+ if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '[')||(input.LA(1) >= ']' && input.LA(1) <= '\uFFFF') ) {
|
|
+ input.consume();
|
|
+ }
|
|
+ else {
|
|
+ MismatchedSetException mse = new MismatchedSetException(null,input);
|
|
+ recover(mse);
|
|
+ throw mse;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop4;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ match(">>");
|
|
+
|
|
+
|
|
+ String txt = getText();
|
|
+ txt = Misc.replaceEscapedRightAngle(txt); // replace \> with > unless <\\>
|
|
+ setText(txt);
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "BIGSTRING"
|
|
+
|
|
+ // $ANTLR start "ANONYMOUS_TEMPLATE"
|
|
+ public final void mANONYMOUS_TEMPLATE() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = ANONYMOUS_TEMPLATE;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:408:5: ( '{' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:408:7: '{'
|
|
+ {
|
|
+ match('{');
|
|
+
|
|
+ Token templateToken = new CommonToken(input, ANONYMOUS_TEMPLATE, 0, getCharIndex(), getCharIndex());
|
|
+ STLexer lexer =
|
|
+ new STLexer(group.errMgr, input, templateToken, group.delimiterStartChar, group.delimiterStopChar);
|
|
+ lexer.subtemplateDepth = 1;
|
|
+ Token t = lexer.nextToken();
|
|
+ while ( lexer.subtemplateDepth>=1 || t.getType()!=STLexer.RCURLY ) {
|
|
+ if ( t.getType()==STLexer.EOF_TYPE ) {
|
|
+ MismatchedTokenException e = new MismatchedTokenException('}', input);
|
|
+ String msg = "missing final '}' in {...} anonymous template";
|
|
+ group.errMgr.groupLexerError(ErrorType.SYNTAX_ERROR, getSourceName(), e, msg);
|
|
+ break;
|
|
+ }
|
|
+ t = lexer.nextToken();
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "ANONYMOUS_TEMPLATE"
|
|
+
|
|
+ // $ANTLR start "COMMENT"
|
|
+ public final void mCOMMENT() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = COMMENT;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:430:5: ( '/*' ( options {greedy=false; } : . )* '*/' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:430:9: '/*' ( options {greedy=false; } : . )* '*/'
|
|
+ {
|
|
+ match("/*");
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:430:14: ( options {greedy=false; } : . )*
|
|
+ loop5:
|
|
+ while (true) {
|
|
+ int alt5=2;
|
|
+ int LA5_0 = input.LA(1);
|
|
+ if ( (LA5_0=='*') ) {
|
|
+ int LA5_1 = input.LA(2);
|
|
+ if ( (LA5_1=='/') ) {
|
|
+ alt5=2;
|
|
+ }
|
|
+ else if ( ((LA5_1 >= '\u0000' && LA5_1 <= '.')||(LA5_1 >= '0' && LA5_1 <= '\uFFFF')) ) {
|
|
+ alt5=1;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( ((LA5_0 >= '\u0000' && LA5_0 <= ')')||(LA5_0 >= '+' && LA5_0 <= '\uFFFF')) ) {
|
|
+ alt5=1;
|
|
+ }
|
|
+
|
|
+ switch (alt5) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:430:42: .
|
|
+ {
|
|
+ matchAny();
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop5;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ match("*/");
|
|
+
|
|
+ skip();
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "COMMENT"
|
|
+
|
|
+ // $ANTLR start "LINE_COMMENT"
|
|
+ public final void mLINE_COMMENT() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = LINE_COMMENT;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:434:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:434:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
|
|
+ {
|
|
+ match("//");
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:434:12: (~ ( '\\n' | '\\r' ) )*
|
|
+ loop6:
|
|
+ while (true) {
|
|
+ int alt6=2;
|
|
+ int LA6_0 = input.LA(1);
|
|
+ if ( ((LA6_0 >= '\u0000' && LA6_0 <= '\t')||(LA6_0 >= '\u000B' && LA6_0 <= '\f')||(LA6_0 >= '\u000E' && LA6_0 <= '\uFFFF')) ) {
|
|
+ alt6=1;
|
|
+ }
|
|
+
|
|
+ switch (alt6) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:
|
|
+ {
|
|
+ if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '\t')||(input.LA(1) >= '\u000B' && input.LA(1) <= '\f')||(input.LA(1) >= '\u000E' && input.LA(1) <= '\uFFFF') ) {
|
|
+ input.consume();
|
|
+ }
|
|
+ else {
|
|
+ MismatchedSetException mse = new MismatchedSetException(null,input);
|
|
+ recover(mse);
|
|
+ throw mse;
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop6;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:434:26: ( '\\r' )?
|
|
+ int alt7=2;
|
|
+ int LA7_0 = input.LA(1);
|
|
+ if ( (LA7_0=='\r') ) {
|
|
+ alt7=1;
|
|
+ }
|
|
+ switch (alt7) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:434:26: '\\r'
|
|
+ {
|
|
+ match('\r');
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ match('\n');
|
|
+ skip();
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "LINE_COMMENT"
|
|
+
|
|
+ // $ANTLR start "WS"
|
|
+ public final void mWS() throws RecognitionException {
|
|
+ try {
|
|
+ int _type = WS;
|
|
+ int _channel = DEFAULT_TOKEN_CHANNEL;
|
|
+ // org/stringtemplate/v4/compiler/Group.g:437:5: ( ( ' ' | '\\r' | '\\t' | '\\n' ) )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:437:7: ( ' ' | '\\r' | '\\t' | '\\n' )
|
|
+ {
|
|
+ if ( (input.LA(1) >= '\t' && input.LA(1) <= '\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
|
|
+ input.consume();
|
|
+ }
|
|
+ else {
|
|
+ MismatchedSetException mse = new MismatchedSetException(null,input);
|
|
+ recover(mse);
|
|
+ throw mse;
|
|
+ }
|
|
+ skip();
|
|
+ }
|
|
+
|
|
+ state.type = _type;
|
|
+ state.channel = _channel;
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "WS"
|
|
+
|
|
+ @Override
|
|
+ public void mTokens() throws RecognitionException {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:8: ( FALSE | LBRACK | RBRACK | TRUE | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | ID | STRING | BIGSTRING_NO_NL | BIGSTRING | ANONYMOUS_TEMPLATE | COMMENT | LINE_COMMENT | WS )
|
|
+ int alt8=26;
|
|
+ alt8 = dfa8.predict(input);
|
|
+ switch (alt8) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:10: FALSE
|
|
+ {
|
|
+ mFALSE();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:16: LBRACK
|
|
+ {
|
|
+ mLBRACK();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:23: RBRACK
|
|
+ {
|
|
+ mRBRACK();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:30: TRUE
|
|
+ {
|
|
+ mTRUE();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 5 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:35: T__16
|
|
+ {
|
|
+ mT__16();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 6 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:41: T__17
|
|
+ {
|
|
+ mT__17();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 7 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:47: T__18
|
|
+ {
|
|
+ mT__18();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 8 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:53: T__19
|
|
+ {
|
|
+ mT__19();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 9 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:59: T__20
|
|
+ {
|
|
+ mT__20();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 10 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:65: T__21
|
|
+ {
|
|
+ mT__21();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 11 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:71: T__22
|
|
+ {
|
|
+ mT__22();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 12 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:77: T__23
|
|
+ {
|
|
+ mT__23();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 13 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:83: T__24
|
|
+ {
|
|
+ mT__24();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 14 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:89: T__25
|
|
+ {
|
|
+ mT__25();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 15 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:95: T__26
|
|
+ {
|
|
+ mT__26();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 16 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:101: T__27
|
|
+ {
|
|
+ mT__27();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 17 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:107: T__28
|
|
+ {
|
|
+ mT__28();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 18 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:113: T__29
|
|
+ {
|
|
+ mT__29();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 19 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:119: ID
|
|
+ {
|
|
+ mID();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 20 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:122: STRING
|
|
+ {
|
|
+ mSTRING();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 21 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:129: BIGSTRING_NO_NL
|
|
+ {
|
|
+ mBIGSTRING_NO_NL();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 22 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:145: BIGSTRING
|
|
+ {
|
|
+ mBIGSTRING();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 23 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:155: ANONYMOUS_TEMPLATE
|
|
+ {
|
|
+ mANONYMOUS_TEMPLATE();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 24 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:174: COMMENT
|
|
+ {
|
|
+ mCOMMENT();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 25 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:182: LINE_COMMENT
|
|
+ {
|
|
+ mLINE_COMMENT();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 26 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:1:195: WS
|
|
+ {
|
|
+ mWS();
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+
|
|
+
|
|
+ protected DFA8 dfa8 = new DFA8(this);
|
|
+ static final String DFA8_eotS =
|
|
+ "\1\uffff\1\20\2\uffff\1\20\4\uffff\1\31\3\uffff\3\20\6\uffff\2\20\2\uffff"+
|
|
+ "\3\20\4\uffff\7\20\1\57\5\20\1\65\1\uffff\2\20\1\70\2\20\1\uffff\2\20"+
|
|
+ "\1\uffff\1\20\1\76\1\77\2\20\2\uffff\4\20\1\106\1\107\2\uffff";
|
|
+ static final String DFA8_eofS =
|
|
+ "\110\uffff";
|
|
+ static final String DFA8_minS =
|
|
+ "\1\11\1\141\2\uffff\1\162\4\uffff\1\72\3\uffff\1\145\1\162\1\155\2\uffff"+
|
|
+ "\1\45\1\uffff\1\52\1\uffff\1\154\1\165\2\uffff\1\146\1\157\1\160\4\uffff"+
|
|
+ "\1\163\1\145\1\141\1\151\1\165\1\154\1\145\1\55\1\165\1\155\1\160\1\145"+
|
|
+ "\1\162\1\55\1\uffff\1\154\1\151\1\55\1\155\1\164\1\uffff\2\164\1\uffff"+
|
|
+ "\1\145\2\55\1\145\1\156\2\uffff\1\162\1\164\2\163\2\55\2\uffff";
|
|
+ static final String DFA8_maxS =
|
|
+ "\1\173\1\141\2\uffff\1\162\4\uffff\1\72\3\uffff\1\145\1\162\1\155\2\uffff"+
|
|
+ "\1\74\1\uffff\1\57\1\uffff\1\154\1\165\2\uffff\1\154\1\157\1\160\4\uffff"+
|
|
+ "\1\163\1\145\1\141\1\151\1\165\1\157\1\145\1\172\1\165\1\155\1\160\1\145"+
|
|
+ "\1\162\1\172\1\uffff\1\154\1\151\1\172\1\155\1\164\1\uffff\2\164\1\uffff"+
|
|
+ "\1\145\2\172\1\145\1\156\2\uffff\1\162\1\164\2\163\2\172\2\uffff";
|
|
+ static final String DFA8_acceptS =
|
|
+ "\2\uffff\1\2\1\3\1\uffff\1\5\1\6\1\7\1\10\1\uffff\1\13\1\14\1\15\3\uffff"+
|
|
+ "\1\23\1\24\1\uffff\1\27\1\uffff\1\32\2\uffff\1\12\1\11\3\uffff\1\25\1"+
|
|
+ "\26\1\30\1\31\16\uffff\1\4\5\uffff\1\1\2\uffff\1\20\5\uffff\1\22\1\16"+
|
|
+ "\6\uffff\1\17\1\21";
|
|
+ static final String DFA8_specialS =
|
|
+ "\110\uffff}>";
|
|
+ static final String[] DFA8_transitionS = {
|
|
+ "\2\25\2\uffff\1\25\22\uffff\1\25\1\uffff\1\21\5\uffff\1\5\1\6\2\uffff"+
|
|
+ "\1\7\1\uffff\1\10\1\24\12\uffff\1\11\1\12\1\22\1\13\2\uffff\1\14\32\20"+
|
|
+ "\1\2\1\uffff\1\3\1\uffff\1\20\1\uffff\3\20\1\15\1\20\1\1\1\16\1\20\1"+
|
|
+ "\17\12\20\1\4\6\20\1\23",
|
|
+ "\1\26",
|
|
+ "",
|
|
+ "",
|
|
+ "\1\27",
|
|
+ "",
|
|
+ "",
|
|
+ "",
|
|
+ "",
|
|
+ "\1\30",
|
|
+ "",
|
|
+ "",
|
|
+ "",
|
|
+ "\1\32",
|
|
+ "\1\33",
|
|
+ "\1\34",
|
|
+ "",
|
|
+ "",
|
|
+ "\1\35\26\uffff\1\36",
|
|
+ "",
|
|
+ "\1\37\4\uffff\1\40",
|
|
+ "",
|
|
+ "\1\41",
|
|
+ "\1\42",
|
|
+ "",
|
|
+ "",
|
|
+ "\1\43\5\uffff\1\44",
|
|
+ "\1\45",
|
|
+ "\1\46",
|
|
+ "",
|
|
+ "",
|
|
+ "",
|
|
+ "",
|
|
+ "\1\47",
|
|
+ "\1\50",
|
|
+ "\1\51",
|
|
+ "\1\52",
|
|
+ "\1\53",
|
|
+ "\1\54\2\uffff\1\55",
|
|
+ "\1\56",
|
|
+ "\1\20\2\uffff\12\20\7\uffff\32\20\4\uffff\1\20\1\uffff\32\20",
|
|
+ "\1\60",
|
|
+ "\1\61",
|
|
+ "\1\62",
|
|
+ "\1\63",
|
|
+ "\1\64",
|
|
+ "\1\20\2\uffff\12\20\7\uffff\32\20\4\uffff\1\20\1\uffff\32\20",
|
|
+ "",
|
|
+ "\1\66",
|
|
+ "\1\67",
|
|
+ "\1\20\2\uffff\12\20\7\uffff\32\20\4\uffff\1\20\1\uffff\32\20",
|
|
+ "\1\71",
|
|
+ "\1\72",
|
|
+ "",
|
|
+ "\1\73",
|
|
+ "\1\74",
|
|
+ "",
|
|
+ "\1\75",
|
|
+ "\1\20\2\uffff\12\20\7\uffff\32\20\4\uffff\1\20\1\uffff\32\20",
|
|
+ "\1\20\2\uffff\12\20\7\uffff\32\20\4\uffff\1\20\1\uffff\32\20",
|
|
+ "\1\100",
|
|
+ "\1\101",
|
|
+ "",
|
|
+ "",
|
|
+ "\1\102",
|
|
+ "\1\103",
|
|
+ "\1\104",
|
|
+ "\1\105",
|
|
+ "\1\20\2\uffff\12\20\7\uffff\32\20\4\uffff\1\20\1\uffff\32\20",
|
|
+ "\1\20\2\uffff\12\20\7\uffff\32\20\4\uffff\1\20\1\uffff\32\20",
|
|
+ "",
|
|
+ ""
|
|
+ };
|
|
+
|
|
+ static final short[] DFA8_eot = DFA.unpackEncodedString(DFA8_eotS);
|
|
+ static final short[] DFA8_eof = DFA.unpackEncodedString(DFA8_eofS);
|
|
+ static final char[] DFA8_min = DFA.unpackEncodedStringToUnsignedChars(DFA8_minS);
|
|
+ static final char[] DFA8_max = DFA.unpackEncodedStringToUnsignedChars(DFA8_maxS);
|
|
+ static final short[] DFA8_accept = DFA.unpackEncodedString(DFA8_acceptS);
|
|
+ static final short[] DFA8_special = DFA.unpackEncodedString(DFA8_specialS);
|
|
+ static final short[][] DFA8_transition;
|
|
+
|
|
+ static {
|
|
+ int numStates = DFA8_transitionS.length;
|
|
+ DFA8_transition = new short[numStates][];
|
|
+ for (int i=0; i<numStates; i++) {
|
|
+ DFA8_transition[i] = DFA.unpackEncodedString(DFA8_transitionS[i]);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ protected class DFA8 extends DFA {
|
|
+
|
|
+ public DFA8(BaseRecognizer recognizer) {
|
|
+ this.recognizer = recognizer;
|
|
+ this.decisionNumber = 8;
|
|
+ this.eot = DFA8_eot;
|
|
+ this.eof = DFA8_eof;
|
|
+ this.min = DFA8_min;
|
|
+ this.max = DFA8_max;
|
|
+ this.accept = DFA8_accept;
|
|
+ this.special = DFA8_special;
|
|
+ this.transition = DFA8_transition;
|
|
+ }
|
|
+ @Override
|
|
+ public String getDescription() {
|
|
+ return "1:1: Tokens : ( FALSE | LBRACK | RBRACK | TRUE | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | ID | STRING | BIGSTRING_NO_NL | BIGSTRING | ANONYMOUS_TEMPLATE | COMMENT | LINE_COMMENT | WS );";
|
|
+ }
|
|
+ }
|
|
+
|
|
+}
|
|
diff -urEbwBN src/main/java/org/stringtemplate/v4/compiler/GroupParser.java src/main/java/org/stringtemplate/v4/compiler/GroupParser.java
|
|
--- src/main/java/org/stringtemplate/v4/compiler/GroupParser.java 1970-01-01 01:00:00.000000000 +0100
|
|
+++ src/main/java/org/stringtemplate/v4/compiler/GroupParser.java 2024-09-21 13:57:52.307857206 +0200
|
|
@@ -0,0 +1,1420 @@
|
|
+// $ANTLR 3.5.3 org/stringtemplate/v4/compiler/Group.g 2024-09-21 11:54:24
|
|
+
|
|
+/*
|
|
+ * [The "BSD license"]
|
|
+ * Copyright (c) 2011 Terence Parr
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Redistribution and use in source and binary forms, with or without
|
|
+ * modification, are permitted provided that the following conditions
|
|
+ * are met:
|
|
+ * 1. Redistributions of source code must retain the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer.
|
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
|
+ * notice, this list of conditions and the following disclaimer in the
|
|
+ * documentation and/or other materials provided with the distribution.
|
|
+ * 3. The name of the author may not be used to endorse or promote products
|
|
+ * derived from this software without specific prior written permission.
|
|
+ *
|
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
+ */
|
|
+package org.stringtemplate.v4.compiler;
|
|
+
|
|
+import java.util.Collections;
|
|
+import java.util.Map;
|
|
+import java.util.LinkedHashMap;
|
|
+import java.util.List;
|
|
+import java.util.ArrayList;
|
|
+import org.stringtemplate.v4.misc.*;
|
|
+import org.stringtemplate.v4.*;
|
|
+import java.io.File;
|
|
+
|
|
+
|
|
+import org.antlr.runtime.*;
|
|
+import java.util.Stack;
|
|
+import java.util.List;
|
|
+import java.util.ArrayList;
|
|
+
|
|
+@SuppressWarnings("all")
|
|
+public class GroupParser extends Parser {
|
|
+ public static final String[] tokenNames = new String[] {
|
|
+ "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ANONYMOUS_TEMPLATE", "BIGSTRING",
|
|
+ "BIGSTRING_NO_NL", "COMMENT", "FALSE", "ID", "LBRACK", "LINE_COMMENT",
|
|
+ "RBRACK", "STRING", "TRUE", "WS", "'('", "')'", "','", "'.'", "':'", "'::='",
|
|
+ "';'", "'='", "'@'", "'default'", "'delimiters'", "'group'", "'implements'",
|
|
+ "'import'"
|
|
+ };
|
|
+ public static final int EOF=-1;
|
|
+ public static final int T__16=16;
|
|
+ public static final int T__17=17;
|
|
+ public static final int T__18=18;
|
|
+ public static final int T__19=19;
|
|
+ public static final int T__20=20;
|
|
+ public static final int T__21=21;
|
|
+ public static final int T__22=22;
|
|
+ public static final int T__23=23;
|
|
+ public static final int T__24=24;
|
|
+ public static final int T__25=25;
|
|
+ public static final int T__26=26;
|
|
+ public static final int T__27=27;
|
|
+ public static final int T__28=28;
|
|
+ public static final int T__29=29;
|
|
+ public static final int ANONYMOUS_TEMPLATE=4;
|
|
+ public static final int BIGSTRING=5;
|
|
+ public static final int BIGSTRING_NO_NL=6;
|
|
+ public static final int COMMENT=7;
|
|
+ public static final int FALSE=8;
|
|
+ public static final int ID=9;
|
|
+ public static final int LBRACK=10;
|
|
+ public static final int LINE_COMMENT=11;
|
|
+ public static final int RBRACK=12;
|
|
+ public static final int STRING=13;
|
|
+ public static final int TRUE=14;
|
|
+ public static final int WS=15;
|
|
+
|
|
+ // delegates
|
|
+ public Parser[] getDelegates() {
|
|
+ return new Parser[] {};
|
|
+ }
|
|
+
|
|
+ // delegators
|
|
+
|
|
+
|
|
+ public GroupParser(TokenStream input) {
|
|
+ this(input, new RecognizerSharedState());
|
|
+ }
|
|
+ public GroupParser(TokenStream input, RecognizerSharedState state) {
|
|
+ super(input, state);
|
|
+ }
|
|
+
|
|
+ @Override public String[] getTokenNames() { return GroupParser.tokenNames; }
|
|
+ @Override public String getGrammarFileName() { return "org/stringtemplate/v4/compiler/Group.g"; }
|
|
+
|
|
+
|
|
+ public STGroup group;
|
|
+
|
|
+ @Override
|
|
+ public void displayRecognitionError(String[] tokenNames,
|
|
+ RecognitionException e)
|
|
+ {
|
|
+ String msg = getErrorMessage(e, tokenNames);
|
|
+ group.errMgr.groupSyntaxError(ErrorType.SYNTAX_ERROR, getSourceName(), e, msg);
|
|
+ }
|
|
+ @Override
|
|
+ public String getSourceName() {
|
|
+ String fullFileName = super.getSourceName();
|
|
+ File f = new File(fullFileName); // strip to simple name
|
|
+ return f.getName();
|
|
+ }
|
|
+ public void error(String msg) {
|
|
+ NoViableAltException e = new NoViableAltException("", 0, 0, input);
|
|
+ group.errMgr.groupSyntaxError(ErrorType.SYNTAX_ERROR, getSourceName(), e, msg);
|
|
+ recover(input, null);
|
|
+ }
|
|
+
|
|
+ public void addArgument(List<FormalArgument> args, Token t, Token defaultValueToken) {
|
|
+ String name = t.getText();
|
|
+ for (FormalArgument arg : args) {
|
|
+ if (arg.name.equals(name)) {
|
|
+ group.errMgr.compileTimeError(ErrorType.PARAMETER_REDEFINITION, null, t, name);
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ args.add(new FormalArgument(name, defaultValueToken));
|
|
+ }
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "group"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:172:1: group[STGroup group, String prefix] : ( oldStyleHeader )? ( delimiters )? ( 'import' STRING | 'import' ID ( '.' ID )* )* ( def[prefix] )* EOF ;
|
|
+ public final void group(STGroup group, String prefix) throws RecognitionException {
|
|
+ Token STRING1=null;
|
|
+
|
|
+
|
|
+ GroupLexer lexer = (GroupLexer)input.getTokenSource();
|
|
+ this.group = lexer.group = group;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:177:2: ( ( oldStyleHeader )? ( delimiters )? ( 'import' STRING | 'import' ID ( '.' ID )* )* ( def[prefix] )* EOF )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:177:4: ( oldStyleHeader )? ( delimiters )? ( 'import' STRING | 'import' ID ( '.' ID )* )* ( def[prefix] )* EOF
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:177:4: ( oldStyleHeader )?
|
|
+ int alt1=2;
|
|
+ int LA1_0 = input.LA(1);
|
|
+ if ( (LA1_0==27) ) {
|
|
+ alt1=1;
|
|
+ }
|
|
+ switch (alt1) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:177:4: oldStyleHeader
|
|
+ {
|
|
+ pushFollow(FOLLOW_oldStyleHeader_in_group86);
|
|
+ oldStyleHeader();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:178:3: ( delimiters )?
|
|
+ int alt2=2;
|
|
+ int LA2_0 = input.LA(1);
|
|
+ if ( (LA2_0==26) ) {
|
|
+ alt2=1;
|
|
+ }
|
|
+ switch (alt2) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:178:3: delimiters
|
|
+ {
|
|
+ pushFollow(FOLLOW_delimiters_in_group91);
|
|
+ delimiters();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:179:6: ( 'import' STRING | 'import' ID ( '.' ID )* )*
|
|
+ loop4:
|
|
+ while (true) {
|
|
+ int alt4=3;
|
|
+ int LA4_0 = input.LA(1);
|
|
+ if ( (LA4_0==29) ) {
|
|
+ int LA4_2 = input.LA(2);
|
|
+ if ( (LA4_2==STRING) ) {
|
|
+ alt4=1;
|
|
+ }
|
|
+ else if ( (LA4_2==ID) ) {
|
|
+ alt4=2;
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ switch (alt4) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:179:8: 'import' STRING
|
|
+ {
|
|
+ match(input,29,FOLLOW_29_in_group101);
|
|
+ STRING1=(Token)match(input,STRING,FOLLOW_STRING_in_group103);
|
|
+ group.importTemplates(STRING1);
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:180:5: 'import' ID ( '.' ID )*
|
|
+ {
|
|
+ match(input,29,FOLLOW_29_in_group111);
|
|
+
|
|
+ MismatchedTokenException e = new MismatchedTokenException(STRING, input);
|
|
+ reportError(e);
|
|
+
|
|
+ match(input,ID,FOLLOW_ID_in_group122);
|
|
+ // org/stringtemplate/v4/compiler/Group.g:185:7: ( '.' ID )*
|
|
+ loop3:
|
|
+ while (true) {
|
|
+ int alt3=2;
|
|
+ int LA3_0 = input.LA(1);
|
|
+ if ( (LA3_0==19) ) {
|
|
+ alt3=1;
|
|
+ }
|
|
+
|
|
+ switch (alt3) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:185:8: '.' ID
|
|
+ {
|
|
+ match(input,19,FOLLOW_19_in_group125);
|
|
+ match(input,ID,FOLLOW_ID_in_group127);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop3;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop4;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:187:3: ( def[prefix] )*
|
|
+ loop5:
|
|
+ while (true) {
|
|
+ int alt5=2;
|
|
+ int LA5_0 = input.LA(1);
|
|
+ if ( (LA5_0==ID||LA5_0==24) ) {
|
|
+ alt5=1;
|
|
+ }
|
|
+
|
|
+ switch (alt5) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:187:3: def[prefix]
|
|
+ {
|
|
+ pushFollow(FOLLOW_def_in_group139);
|
|
+ def(prefix);
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop5;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ match(input,EOF,FOLLOW_EOF_in_group145);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "group"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "oldStyleHeader"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:191:1: oldStyleHeader : 'group' ID ( ':' ID )? ( 'implements' ID ( ',' ID )* )? ';' ;
|
|
+ public final void oldStyleHeader() throws RecognitionException {
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:192:5: ( 'group' ID ( ':' ID )? ( 'implements' ID ( ',' ID )* )? ';' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:192:9: 'group' ID ( ':' ID )? ( 'implements' ID ( ',' ID )* )? ';'
|
|
+ {
|
|
+ match(input,27,FOLLOW_27_in_oldStyleHeader162);
|
|
+ match(input,ID,FOLLOW_ID_in_oldStyleHeader164);
|
|
+ // org/stringtemplate/v4/compiler/Group.g:192:20: ( ':' ID )?
|
|
+ int alt6=2;
|
|
+ int LA6_0 = input.LA(1);
|
|
+ if ( (LA6_0==20) ) {
|
|
+ alt6=1;
|
|
+ }
|
|
+ switch (alt6) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:192:22: ':' ID
|
|
+ {
|
|
+ match(input,20,FOLLOW_20_in_oldStyleHeader168);
|
|
+ match(input,ID,FOLLOW_ID_in_oldStyleHeader170);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:193:6: ( 'implements' ID ( ',' ID )* )?
|
|
+ int alt8=2;
|
|
+ int LA8_0 = input.LA(1);
|
|
+ if ( (LA8_0==28) ) {
|
|
+ alt8=1;
|
|
+ }
|
|
+ switch (alt8) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:193:8: 'implements' ID ( ',' ID )*
|
|
+ {
|
|
+ match(input,28,FOLLOW_28_in_oldStyleHeader182);
|
|
+ match(input,ID,FOLLOW_ID_in_oldStyleHeader184);
|
|
+ // org/stringtemplate/v4/compiler/Group.g:193:24: ( ',' ID )*
|
|
+ loop7:
|
|
+ while (true) {
|
|
+ int alt7=2;
|
|
+ int LA7_0 = input.LA(1);
|
|
+ if ( (LA7_0==18) ) {
|
|
+ alt7=1;
|
|
+ }
|
|
+
|
|
+ switch (alt7) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:193:25: ',' ID
|
|
+ {
|
|
+ match(input,18,FOLLOW_18_in_oldStyleHeader187);
|
|
+ match(input,ID,FOLLOW_ID_in_oldStyleHeader189);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop7;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ match(input,22,FOLLOW_22_in_oldStyleHeader201);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "oldStyleHeader"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "groupName"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:197:1: groupName returns [String name] : a= ID ( '.' a= ID )* ;
|
|
+ public final String groupName() throws RecognitionException {
|
|
+ String name = null;
|
|
+
|
|
+
|
|
+ Token a=null;
|
|
+
|
|
+ StringBuilder buf = new StringBuilder();
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:199:2: (a= ID ( '.' a= ID )* )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:199:4: a= ID ( '.' a= ID )*
|
|
+ {
|
|
+ a=(Token)match(input,ID,FOLLOW_ID_in_groupName223);
|
|
+ buf.append((a!=null?a.getText():null));
|
|
+ // org/stringtemplate/v4/compiler/Group.g:199:32: ( '.' a= ID )*
|
|
+ loop9:
|
|
+ while (true) {
|
|
+ int alt9=2;
|
|
+ int LA9_0 = input.LA(1);
|
|
+ if ( (LA9_0==19) ) {
|
|
+ alt9=1;
|
|
+ }
|
|
+
|
|
+ switch (alt9) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:199:33: '.' a= ID
|
|
+ {
|
|
+ match(input,19,FOLLOW_19_in_groupName228);
|
|
+ a=(Token)match(input,ID,FOLLOW_ID_in_groupName232);
|
|
+ buf.append((a!=null?a.getText():null));
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop9;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return name;
|
|
+ }
|
|
+ // $ANTLR end "groupName"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "delimiters"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:202:1: delimiters : 'delimiters' a= STRING ',' b= STRING ;
|
|
+ public final void delimiters() throws RecognitionException {
|
|
+ Token a=null;
|
|
+ Token b=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:203:5: ( 'delimiters' a= STRING ',' b= STRING )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:203:7: 'delimiters' a= STRING ',' b= STRING
|
|
+ {
|
|
+ match(input,26,FOLLOW_26_in_delimiters250);
|
|
+ a=(Token)match(input,STRING,FOLLOW_STRING_in_delimiters254);
|
|
+ match(input,18,FOLLOW_18_in_delimiters256);
|
|
+ b=(Token)match(input,STRING,FOLLOW_STRING_in_delimiters260);
|
|
+
|
|
+ boolean supported = true;
|
|
+ char startCharacter = a.getText().charAt(1);
|
|
+ if (STGroup.isReservedCharacter(startCharacter)) {
|
|
+ group.errMgr.compileTimeError(ErrorType.UNSUPPORTED_DELIMITER, null, a, String.valueOf(startCharacter));
|
|
+ supported = false;
|
|
+ }
|
|
+
|
|
+ char stopCharacter = b.getText().charAt(1);
|
|
+ if (STGroup.isReservedCharacter(stopCharacter)) {
|
|
+ group.errMgr.compileTimeError(ErrorType.UNSUPPORTED_DELIMITER, null, b, String.valueOf(stopCharacter));
|
|
+ supported = false;
|
|
+ }
|
|
+
|
|
+ if (supported) {
|
|
+ group.delimiterStartChar=a.getText().charAt(1);
|
|
+ group.delimiterStopChar=b.getText().charAt(1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "delimiters"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "def"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:229:1: def[String prefix] : ( templateDef[prefix] | dictDef );
|
|
+ public final void def(String prefix) throws RecognitionException {
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:229:20: ( templateDef[prefix] | dictDef )
|
|
+ int alt10=2;
|
|
+ int LA10_0 = input.LA(1);
|
|
+ if ( (LA10_0==24) ) {
|
|
+ alt10=1;
|
|
+ }
|
|
+ else if ( (LA10_0==ID) ) {
|
|
+ int LA10_2 = input.LA(2);
|
|
+ if ( (LA10_2==16) ) {
|
|
+ alt10=1;
|
|
+ }
|
|
+ else if ( (LA10_2==21) ) {
|
|
+ int LA10_3 = input.LA(3);
|
|
+ if ( (LA10_3==ID) ) {
|
|
+ alt10=1;
|
|
+ }
|
|
+ else if ( (LA10_3==LBRACK) ) {
|
|
+ alt10=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 10, 3, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 10, 2, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 10, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt10) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:229:22: templateDef[prefix]
|
|
+ {
|
|
+ pushFollow(FOLLOW_templateDef_in_def284);
|
|
+ templateDef(prefix);
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:229:44: dictDef
|
|
+ {
|
|
+ pushFollow(FOLLOW_dictDef_in_def289);
|
|
+ dictDef();
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+
|
|
+ // pretend we already saw an error here
|
|
+ state.lastErrorIndex = input.index();
|
|
+ error("garbled template definition starting at '"+input.LT(1).getText()+"'");
|
|
+
|
|
+ }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "def"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "templateDef"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:236:1: templateDef[String prefix] : ( ( '@' enclosing= ID '.' name= ID '(' ')' |name= ID '(' formalArgs ')' ) '::=' ( STRING | BIGSTRING | BIGSTRING_NO_NL |) |alias= ID '::=' target= ID );
|
|
+ public final void templateDef(String prefix) throws RecognitionException {
|
|
+ Token enclosing=null;
|
|
+ Token name=null;
|
|
+ Token alias=null;
|
|
+ Token target=null;
|
|
+ Token STRING2=null;
|
|
+ Token BIGSTRING3=null;
|
|
+ Token BIGSTRING_NO_NL4=null;
|
|
+ List<FormalArgument> formalArgs5 =null;
|
|
+
|
|
+
|
|
+ String template=null;
|
|
+ int n=0; // num char to strip from left, right of template def
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:241:2: ( ( '@' enclosing= ID '.' name= ID '(' ')' |name= ID '(' formalArgs ')' ) '::=' ( STRING | BIGSTRING | BIGSTRING_NO_NL |) |alias= ID '::=' target= ID )
|
|
+ int alt13=2;
|
|
+ int LA13_0 = input.LA(1);
|
|
+ if ( (LA13_0==24) ) {
|
|
+ alt13=1;
|
|
+ }
|
|
+ else if ( (LA13_0==ID) ) {
|
|
+ int LA13_2 = input.LA(2);
|
|
+ if ( (LA13_2==16) ) {
|
|
+ alt13=1;
|
|
+ }
|
|
+ else if ( (LA13_2==21) ) {
|
|
+ alt13=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 13, 2, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 13, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt13) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:241:4: ( '@' enclosing= ID '.' name= ID '(' ')' |name= ID '(' formalArgs ')' ) '::=' ( STRING | BIGSTRING | BIGSTRING_NO_NL |)
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:241:4: ( '@' enclosing= ID '.' name= ID '(' ')' |name= ID '(' formalArgs ')' )
|
|
+ int alt11=2;
|
|
+ int LA11_0 = input.LA(1);
|
|
+ if ( (LA11_0==24) ) {
|
|
+ alt11=1;
|
|
+ }
|
|
+ else if ( (LA11_0==ID) ) {
|
|
+ alt11=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 11, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt11) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:241:6: '@' enclosing= ID '.' name= ID '(' ')'
|
|
+ {
|
|
+ match(input,24,FOLLOW_24_in_templateDef313);
|
|
+ enclosing=(Token)match(input,ID,FOLLOW_ID_in_templateDef317);
|
|
+ match(input,19,FOLLOW_19_in_templateDef319);
|
|
+ name=(Token)match(input,ID,FOLLOW_ID_in_templateDef323);
|
|
+ match(input,16,FOLLOW_16_in_templateDef325);
|
|
+ match(input,17,FOLLOW_17_in_templateDef327);
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:242:5: name= ID '(' formalArgs ')'
|
|
+ {
|
|
+ name=(Token)match(input,ID,FOLLOW_ID_in_templateDef335);
|
|
+ match(input,16,FOLLOW_16_in_templateDef337);
|
|
+ pushFollow(FOLLOW_formalArgs_in_templateDef339);
|
|
+ formalArgs5=formalArgs();
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input,17,FOLLOW_17_in_templateDef341);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ match(input,21,FOLLOW_21_in_templateDef352);
|
|
+ Token templateToken = input.LT(1);
|
|
+ // org/stringtemplate/v4/compiler/Group.g:246:6: ( STRING | BIGSTRING | BIGSTRING_NO_NL |)
|
|
+ int alt12=4;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case STRING:
|
|
+ {
|
|
+ alt12=1;
|
|
+ }
|
|
+ break;
|
|
+ case BIGSTRING:
|
|
+ {
|
|
+ alt12=2;
|
|
+ }
|
|
+ break;
|
|
+ case BIGSTRING_NO_NL:
|
|
+ {
|
|
+ alt12=3;
|
|
+ }
|
|
+ break;
|
|
+ case EOF:
|
|
+ case ID:
|
|
+ case 24:
|
|
+ {
|
|
+ alt12=4;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 12, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt12) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:246:8: STRING
|
|
+ {
|
|
+ STRING2=(Token)match(input,STRING,FOLLOW_STRING_in_templateDef368);
|
|
+ template=(STRING2!=null?STRING2.getText():null); n=1;
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:247:8: BIGSTRING
|
|
+ {
|
|
+ BIGSTRING3=(Token)match(input,BIGSTRING,FOLLOW_BIGSTRING_in_templateDef383);
|
|
+ template=(BIGSTRING3!=null?BIGSTRING3.getText():null); n=2;
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:248:8: BIGSTRING_NO_NL
|
|
+ {
|
|
+ BIGSTRING_NO_NL4=(Token)match(input,BIGSTRING_NO_NL,FOLLOW_BIGSTRING_NO_NL_in_templateDef395);
|
|
+ template=(BIGSTRING_NO_NL4!=null?BIGSTRING_NO_NL4.getText():null); n=2;
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:249:8:
|
|
+ {
|
|
+
|
|
+ template = "";
|
|
+ String msg = "missing template at '"+input.LT(1).getText()+"'";
|
|
+ NoViableAltException e = new NoViableAltException("", 0, 0, input);
|
|
+ group.errMgr.groupSyntaxError(ErrorType.SYNTAX_ERROR, getSourceName(), e, msg);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ if ( (name!=null?name.getTokenIndex():0) >= 0 ) { // if ID missing
|
|
+ template = Misc.strip(template, n);
|
|
+ String templateName = (name!=null?name.getText():null);
|
|
+ if ( prefix.length()>0 ) templateName = prefix+(name!=null?name.getText():null);
|
|
+ String enclosingTemplateName = (enclosing!=null?enclosing.getText():null);
|
|
+ if (enclosingTemplateName != null && enclosingTemplateName.length()>0 && prefix.length()>0) {
|
|
+ enclosingTemplateName = prefix + enclosingTemplateName;
|
|
+ }
|
|
+ group.defineTemplateOrRegion(templateName, enclosingTemplateName, templateToken,
|
|
+ template, name, formalArgs5);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:269:6: alias= ID '::=' target= ID
|
|
+ {
|
|
+ alias=(Token)match(input,ID,FOLLOW_ID_in_templateDef430);
|
|
+ match(input,21,FOLLOW_21_in_templateDef432);
|
|
+ target=(Token)match(input,ID,FOLLOW_ID_in_templateDef436);
|
|
+ group.defineTemplateAlias(alias, target);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "templateDef"
|
|
+
|
|
+
|
|
+ protected static class formalArgs_scope {
|
|
+ boolean hasOptionalParameter;
|
|
+ }
|
|
+ protected Stack<formalArgs_scope> formalArgs_stack = new Stack<formalArgs_scope>();
|
|
+
|
|
+
|
|
+ // $ANTLR start "formalArgs"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:272:1: formalArgs returns [List<FormalArgument> args = new ArrayList<FormalArgument>()] : ( formalArg[$args] ( ',' formalArg[$args] )* |);
|
|
+ public final List<FormalArgument> formalArgs() throws RecognitionException {
|
|
+ formalArgs_stack.push(new formalArgs_scope());
|
|
+ List<FormalArgument> args = new ArrayList<FormalArgument>();
|
|
+
|
|
+
|
|
+ formalArgs_stack.peek().hasOptionalParameter = false;
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:277:2: ( formalArg[$args] ( ',' formalArg[$args] )* |)
|
|
+ int alt15=2;
|
|
+ int LA15_0 = input.LA(1);
|
|
+ if ( (LA15_0==ID) ) {
|
|
+ alt15=1;
|
|
+ }
|
|
+ else if ( (LA15_0==17) ) {
|
|
+ alt15=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 15, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt15) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:277:4: formalArg[$args] ( ',' formalArg[$args] )*
|
|
+ {
|
|
+ pushFollow(FOLLOW_formalArg_in_formalArgs462);
|
|
+ formalArg(args);
|
|
+ state._fsp--;
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:277:21: ( ',' formalArg[$args] )*
|
|
+ loop14:
|
|
+ while (true) {
|
|
+ int alt14=2;
|
|
+ int LA14_0 = input.LA(1);
|
|
+ if ( (LA14_0==18) ) {
|
|
+ alt14=1;
|
|
+ }
|
|
+
|
|
+ switch (alt14) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:277:22: ',' formalArg[$args]
|
|
+ {
|
|
+ match(input,18,FOLLOW_18_in_formalArgs466);
|
|
+ pushFollow(FOLLOW_formalArg_in_formalArgs468);
|
|
+ formalArg(args);
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop14;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:279:2:
|
|
+ {
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ formalArgs_stack.pop();
|
|
+ }
|
|
+ return args;
|
|
+ }
|
|
+ // $ANTLR end "formalArgs"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "formalArg"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:281:1: formalArg[List<FormalArgument> args] : ID ( '=' a= ( STRING | ANONYMOUS_TEMPLATE | 'true' | 'false' ) | '=' a= '[' ']' |) ;
|
|
+ public final void formalArg(List<FormalArgument> args) throws RecognitionException {
|
|
+ Token a=null;
|
|
+ Token ID6=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:282:2: ( ID ( '=' a= ( STRING | ANONYMOUS_TEMPLATE | 'true' | 'false' ) | '=' a= '[' ']' |) )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:282:4: ID ( '=' a= ( STRING | ANONYMOUS_TEMPLATE | 'true' | 'false' ) | '=' a= '[' ']' |)
|
|
+ {
|
|
+ ID6=(Token)match(input,ID,FOLLOW_ID_in_formalArg486);
|
|
+ // org/stringtemplate/v4/compiler/Group.g:283:3: ( '=' a= ( STRING | ANONYMOUS_TEMPLATE | 'true' | 'false' ) | '=' a= '[' ']' |)
|
|
+ int alt16=3;
|
|
+ int LA16_0 = input.LA(1);
|
|
+ if ( (LA16_0==23) ) {
|
|
+ int LA16_1 = input.LA(2);
|
|
+ if ( (LA16_1==ANONYMOUS_TEMPLATE||LA16_1==FALSE||(LA16_1 >= STRING && LA16_1 <= TRUE)) ) {
|
|
+ alt16=1;
|
|
+ }
|
|
+ else if ( (LA16_1==LBRACK) ) {
|
|
+ alt16=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 16, 1, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( ((LA16_0 >= 17 && LA16_0 <= 18)) ) {
|
|
+ alt16=3;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 16, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt16) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:283:5: '=' a= ( STRING | ANONYMOUS_TEMPLATE | 'true' | 'false' )
|
|
+ {
|
|
+ match(input,23,FOLLOW_23_in_formalArg492);
|
|
+ a=input.LT(1);
|
|
+ if ( input.LA(1)==ANONYMOUS_TEMPLATE||input.LA(1)==FALSE||(input.LA(1) >= STRING && input.LA(1) <= TRUE) ) {
|
|
+ input.consume();
|
|
+ state.errorRecovery=false;
|
|
+ }
|
|
+ else {
|
|
+ MismatchedSetException mse = new MismatchedSetException(null,input);
|
|
+ throw mse;
|
|
+ }
|
|
+ formalArgs_stack.peek().hasOptionalParameter = true;
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:284:5: '=' a= '[' ']'
|
|
+ {
|
|
+ match(input,23,FOLLOW_23_in_formalArg512);
|
|
+ a=(Token)match(input,LBRACK,FOLLOW_LBRACK_in_formalArg516);
|
|
+ match(input,RBRACK,FOLLOW_RBRACK_in_formalArg518);
|
|
+ formalArgs_stack.peek().hasOptionalParameter = true;
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:285:5:
|
|
+ {
|
|
+
|
|
+ if (formalArgs_stack.peek().hasOptionalParameter) {
|
|
+ group.errMgr.compileTimeError(ErrorType.REQUIRED_PARAMETER_AFTER_OPTIONAL,
|
|
+ null, ID6);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ addArgument(args, ID6, a);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "formalArg"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "dictDef"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:304:1: dictDef : ID '::=' dict ;
|
|
+ public final void dictDef() throws RecognitionException {
|
|
+ Token ID7=null;
|
|
+ Map<String,Object> dict8 =null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:305:2: ( ID '::=' dict )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:305:4: ID '::=' dict
|
|
+ {
|
|
+ ID7=(Token)match(input,ID,FOLLOW_ID_in_dictDef551);
|
|
+ match(input,21,FOLLOW_21_in_dictDef553);
|
|
+ pushFollow(FOLLOW_dict_in_dictDef555);
|
|
+ dict8=dict();
|
|
+ state._fsp--;
|
|
+
|
|
+
|
|
+ if ( group.rawGetDictionary((ID7!=null?ID7.getText():null))!=null ) {
|
|
+ group.errMgr.compileTimeError(ErrorType.MAP_REDEFINITION, null, ID7);
|
|
+ }
|
|
+ else if ( group.rawGetTemplate((ID7!=null?ID7.getText():null))!=null ) {
|
|
+ group.errMgr.compileTimeError(ErrorType.TEMPLATE_REDEFINITION_AS_MAP, null, ID7);
|
|
+ }
|
|
+ else {
|
|
+ group.defineDictionary((ID7!=null?ID7.getText():null), dict8);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "dictDef"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "dict"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:319:1: dict returns [Map<String,Object> mapping] : '[' dictPairs[mapping] ']' ;
|
|
+ public final Map<String,Object> dict() throws RecognitionException {
|
|
+ Map<String,Object> mapping = null;
|
|
+
|
|
+
|
|
+ mapping=new LinkedHashMap<String,Object>();
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:321:2: ( '[' dictPairs[mapping] ']' )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:321:6: '[' dictPairs[mapping] ']'
|
|
+ {
|
|
+ match(input,LBRACK,FOLLOW_LBRACK_in_dict587);
|
|
+ pushFollow(FOLLOW_dictPairs_in_dict589);
|
|
+ dictPairs(mapping);
|
|
+ state._fsp--;
|
|
+
|
|
+ match(input,RBRACK,FOLLOW_RBRACK_in_dict592);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return mapping;
|
|
+ }
|
|
+ // $ANTLR end "dict"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "dictPairs"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:324:1: dictPairs[Map<String,Object> mapping] : ( keyValuePair[mapping] ( ',' keyValuePair[mapping] )* ( ',' defaultValuePair[mapping] )? | defaultValuePair[mapping] );
|
|
+ public final void dictPairs(Map<String,Object> mapping) throws RecognitionException {
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:325:5: ( keyValuePair[mapping] ( ',' keyValuePair[mapping] )* ( ',' defaultValuePair[mapping] )? | defaultValuePair[mapping] )
|
|
+ int alt19=2;
|
|
+ int LA19_0 = input.LA(1);
|
|
+ if ( (LA19_0==STRING) ) {
|
|
+ alt19=1;
|
|
+ }
|
|
+ else if ( (LA19_0==25) ) {
|
|
+ alt19=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 19, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt19) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:325:7: keyValuePair[mapping] ( ',' keyValuePair[mapping] )* ( ',' defaultValuePair[mapping] )?
|
|
+ {
|
|
+ pushFollow(FOLLOW_keyValuePair_in_dictPairs607);
|
|
+ keyValuePair(mapping);
|
|
+ state._fsp--;
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:326:6: ( ',' keyValuePair[mapping] )*
|
|
+ loop17:
|
|
+ while (true) {
|
|
+ int alt17=2;
|
|
+ int LA17_0 = input.LA(1);
|
|
+ if ( (LA17_0==18) ) {
|
|
+ int LA17_1 = input.LA(2);
|
|
+ if ( (LA17_1==STRING) ) {
|
|
+ alt17=1;
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ switch (alt17) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:326:7: ',' keyValuePair[mapping]
|
|
+ {
|
|
+ match(input,18,FOLLOW_18_in_dictPairs616);
|
|
+ pushFollow(FOLLOW_keyValuePair_in_dictPairs618);
|
|
+ keyValuePair(mapping);
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop17;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/Group.g:326:35: ( ',' defaultValuePair[mapping] )?
|
|
+ int alt18=2;
|
|
+ int LA18_0 = input.LA(1);
|
|
+ if ( (LA18_0==18) ) {
|
|
+ alt18=1;
|
|
+ }
|
|
+ switch (alt18) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:326:36: ',' defaultValuePair[mapping]
|
|
+ {
|
|
+ match(input,18,FOLLOW_18_in_dictPairs624);
|
|
+ pushFollow(FOLLOW_defaultValuePair_in_dictPairs626);
|
|
+ defaultValuePair(mapping);
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:327:7: defaultValuePair[mapping]
|
|
+ {
|
|
+ pushFollow(FOLLOW_defaultValuePair_in_dictPairs637);
|
|
+ defaultValuePair(mapping);
|
|
+ state._fsp--;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+
|
|
+ error("missing dictionary entry at '"+input.LT(1).getText()+"'");
|
|
+
|
|
+ }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "dictPairs"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "defaultValuePair"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:333:1: defaultValuePair[Map<String,Object> mapping] : 'default' ':' keyValue ;
|
|
+ public final void defaultValuePair(Map<String,Object> mapping) throws RecognitionException {
|
|
+ Object keyValue9 =null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:334:2: ( 'default' ':' keyValue )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:334:4: 'default' ':' keyValue
|
|
+ {
|
|
+ match(input,25,FOLLOW_25_in_defaultValuePair660);
|
|
+ match(input,20,FOLLOW_20_in_defaultValuePair662);
|
|
+ pushFollow(FOLLOW_keyValue_in_defaultValuePair664);
|
|
+ keyValue9=keyValue();
|
|
+ state._fsp--;
|
|
+
|
|
+ mapping.put(STGroup.DEFAULT_KEY, keyValue9);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "defaultValuePair"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "keyValuePair"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:337:1: keyValuePair[Map<String,Object> mapping] : STRING ':' keyValue ;
|
|
+ public final void keyValuePair(Map<String,Object> mapping) throws RecognitionException {
|
|
+ Token STRING10=null;
|
|
+ Object keyValue11 =null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:338:2: ( STRING ':' keyValue )
|
|
+ // org/stringtemplate/v4/compiler/Group.g:338:4: STRING ':' keyValue
|
|
+ {
|
|
+ STRING10=(Token)match(input,STRING,FOLLOW_STRING_in_keyValuePair678);
|
|
+ match(input,20,FOLLOW_20_in_keyValuePair680);
|
|
+ pushFollow(FOLLOW_keyValue_in_keyValuePair682);
|
|
+ keyValue11=keyValue();
|
|
+ state._fsp--;
|
|
+
|
|
+ mapping.put(Misc.replaceEscapes(Misc.strip((STRING10!=null?STRING10.getText():null), 1)), keyValue11);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+ reportError(re);
|
|
+ recover(input,re);
|
|
+ }
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ }
|
|
+ // $ANTLR end "keyValuePair"
|
|
+
|
|
+
|
|
+
|
|
+ // $ANTLR start "keyValue"
|
|
+ // org/stringtemplate/v4/compiler/Group.g:341:1: keyValue returns [Object value] : ( BIGSTRING | BIGSTRING_NO_NL | ANONYMOUS_TEMPLATE | STRING | TRUE | FALSE | '[' ']' |{...}? => ID );
|
|
+ public final Object keyValue() throws RecognitionException {
|
|
+ Object value = null;
|
|
+
|
|
+
|
|
+ Token BIGSTRING12=null;
|
|
+ Token BIGSTRING_NO_NL13=null;
|
|
+ Token ANONYMOUS_TEMPLATE14=null;
|
|
+ Token STRING15=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/Group.g:342:2: ( BIGSTRING | BIGSTRING_NO_NL | ANONYMOUS_TEMPLATE | STRING | TRUE | FALSE | '[' ']' |{...}? => ID )
|
|
+ int alt20=8;
|
|
+ int LA20_0 = input.LA(1);
|
|
+ if ( (LA20_0==BIGSTRING) ) {
|
|
+ alt20=1;
|
|
+ }
|
|
+ else if ( (LA20_0==BIGSTRING_NO_NL) ) {
|
|
+ alt20=2;
|
|
+ }
|
|
+ else if ( (LA20_0==ANONYMOUS_TEMPLATE) ) {
|
|
+ alt20=3;
|
|
+ }
|
|
+ else if ( (LA20_0==STRING) ) {
|
|
+ alt20=4;
|
|
+ }
|
|
+ else if ( (LA20_0==TRUE) ) {
|
|
+ alt20=5;
|
|
+ }
|
|
+ else if ( (LA20_0==FALSE) ) {
|
|
+ alt20=6;
|
|
+ }
|
|
+ else if ( (LA20_0==LBRACK) ) {
|
|
+ alt20=7;
|
|
+ }
|
|
+ else if ( (LA20_0==ID) && ((input.LT(1).getText().equals("key")))) {
|
|
+ alt20=8;
|
|
+ }
|
|
+
|
|
+ switch (alt20) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:342:4: BIGSTRING
|
|
+ {
|
|
+ BIGSTRING12=(Token)match(input,BIGSTRING,FOLLOW_BIGSTRING_in_keyValue699);
|
|
+ value = group.createSingleton(BIGSTRING12);
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:343:4: BIGSTRING_NO_NL
|
|
+ {
|
|
+ BIGSTRING_NO_NL13=(Token)match(input,BIGSTRING_NO_NL,FOLLOW_BIGSTRING_NO_NL_in_keyValue708);
|
|
+ value = group.createSingleton(BIGSTRING_NO_NL13);
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:344:4: ANONYMOUS_TEMPLATE
|
|
+ {
|
|
+ ANONYMOUS_TEMPLATE14=(Token)match(input,ANONYMOUS_TEMPLATE,FOLLOW_ANONYMOUS_TEMPLATE_in_keyValue716);
|
|
+ value = group.createSingleton(ANONYMOUS_TEMPLATE14);
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:345:4: STRING
|
|
+ {
|
|
+ STRING15=(Token)match(input,STRING,FOLLOW_STRING_in_keyValue723);
|
|
+ value = Misc.replaceEscapes(Misc.strip((STRING15!=null?STRING15.getText():null), 1));
|
|
+ }
|
|
+ break;
|
|
+ case 5 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:346:4: TRUE
|
|
+ {
|
|
+ match(input,TRUE,FOLLOW_TRUE_in_keyValue733);
|
|
+ value = true;
|
|
+ }
|
|
+ break;
|
|
+ case 6 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:347:4: FALSE
|
|
+ {
|
|
+ match(input,FALSE,FOLLOW_FALSE_in_keyValue743);
|
|
+ value = false;
|
|
+ }
|
|
+ break;
|
|
+ case 7 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:348:4: '[' ']'
|
|
+ {
|
|
+ match(input,LBRACK,FOLLOW_LBRACK_in_keyValue753);
|
|
+ match(input,RBRACK,FOLLOW_RBRACK_in_keyValue755);
|
|
+ value = Collections.emptyList();
|
|
+ }
|
|
+ break;
|
|
+ case 8 :
|
|
+ // org/stringtemplate/v4/compiler/Group.g:349:4: {...}? => ID
|
|
+ {
|
|
+ if ( !((input.LT(1).getText().equals("key"))) ) {
|
|
+ throw new FailedPredicateException(input, "keyValue", "input.LT(1).getText().equals(\"key\")");
|
|
+ }
|
|
+ match(input,ID,FOLLOW_ID_in_keyValue768);
|
|
+ value = STGroup.DICT_KEY;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ }
|
|
+ catch (RecognitionException re) {
|
|
+
|
|
+ error("missing value for key at '"+input.LT(1).getText()+"'");
|
|
+
|
|
+ }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return value;
|
|
+ }
|
|
+ // $ANTLR end "keyValue"
|
|
+
|
|
+ // Delegated rules
|
|
+
|
|
+
|
|
+
|
|
+ public static final BitSet FOLLOW_oldStyleHeader_in_group86 = new BitSet(new long[]{0x0000000025000200L});
|
|
+ public static final BitSet FOLLOW_delimiters_in_group91 = new BitSet(new long[]{0x0000000021000200L});
|
|
+ public static final BitSet FOLLOW_29_in_group101 = new BitSet(new long[]{0x0000000000002000L});
|
|
+ public static final BitSet FOLLOW_STRING_in_group103 = new BitSet(new long[]{0x0000000021000200L});
|
|
+ public static final BitSet FOLLOW_29_in_group111 = new BitSet(new long[]{0x0000000000000200L});
|
|
+ public static final BitSet FOLLOW_ID_in_group122 = new BitSet(new long[]{0x0000000021080200L});
|
|
+ public static final BitSet FOLLOW_19_in_group125 = new BitSet(new long[]{0x0000000000000200L});
|
|
+ public static final BitSet FOLLOW_ID_in_group127 = new BitSet(new long[]{0x0000000021080200L});
|
|
+ public static final BitSet FOLLOW_def_in_group139 = new BitSet(new long[]{0x0000000001000200L});
|
|
+ public static final BitSet FOLLOW_EOF_in_group145 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_27_in_oldStyleHeader162 = new BitSet(new long[]{0x0000000000000200L});
|
|
+ public static final BitSet FOLLOW_ID_in_oldStyleHeader164 = new BitSet(new long[]{0x0000000010500000L});
|
|
+ public static final BitSet FOLLOW_20_in_oldStyleHeader168 = new BitSet(new long[]{0x0000000000000200L});
|
|
+ public static final BitSet FOLLOW_ID_in_oldStyleHeader170 = new BitSet(new long[]{0x0000000010400000L});
|
|
+ public static final BitSet FOLLOW_28_in_oldStyleHeader182 = new BitSet(new long[]{0x0000000000000200L});
|
|
+ public static final BitSet FOLLOW_ID_in_oldStyleHeader184 = new BitSet(new long[]{0x0000000000440000L});
|
|
+ public static final BitSet FOLLOW_18_in_oldStyleHeader187 = new BitSet(new long[]{0x0000000000000200L});
|
|
+ public static final BitSet FOLLOW_ID_in_oldStyleHeader189 = new BitSet(new long[]{0x0000000000440000L});
|
|
+ public static final BitSet FOLLOW_22_in_oldStyleHeader201 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ID_in_groupName223 = new BitSet(new long[]{0x0000000000080002L});
|
|
+ public static final BitSet FOLLOW_19_in_groupName228 = new BitSet(new long[]{0x0000000000000200L});
|
|
+ public static final BitSet FOLLOW_ID_in_groupName232 = new BitSet(new long[]{0x0000000000080002L});
|
|
+ public static final BitSet FOLLOW_26_in_delimiters250 = new BitSet(new long[]{0x0000000000002000L});
|
|
+ public static final BitSet FOLLOW_STRING_in_delimiters254 = new BitSet(new long[]{0x0000000000040000L});
|
|
+ public static final BitSet FOLLOW_18_in_delimiters256 = new BitSet(new long[]{0x0000000000002000L});
|
|
+ public static final BitSet FOLLOW_STRING_in_delimiters260 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_templateDef_in_def284 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_dictDef_in_def289 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_24_in_templateDef313 = new BitSet(new long[]{0x0000000000000200L});
|
|
+ public static final BitSet FOLLOW_ID_in_templateDef317 = new BitSet(new long[]{0x0000000000080000L});
|
|
+ public static final BitSet FOLLOW_19_in_templateDef319 = new BitSet(new long[]{0x0000000000000200L});
|
|
+ public static final BitSet FOLLOW_ID_in_templateDef323 = new BitSet(new long[]{0x0000000000010000L});
|
|
+ public static final BitSet FOLLOW_16_in_templateDef325 = new BitSet(new long[]{0x0000000000020000L});
|
|
+ public static final BitSet FOLLOW_17_in_templateDef327 = new BitSet(new long[]{0x0000000000200000L});
|
|
+ public static final BitSet FOLLOW_ID_in_templateDef335 = new BitSet(new long[]{0x0000000000010000L});
|
|
+ public static final BitSet FOLLOW_16_in_templateDef337 = new BitSet(new long[]{0x0000000000020200L});
|
|
+ public static final BitSet FOLLOW_formalArgs_in_templateDef339 = new BitSet(new long[]{0x0000000000020000L});
|
|
+ public static final BitSet FOLLOW_17_in_templateDef341 = new BitSet(new long[]{0x0000000000200000L});
|
|
+ public static final BitSet FOLLOW_21_in_templateDef352 = new BitSet(new long[]{0x0000000000002062L});
|
|
+ public static final BitSet FOLLOW_STRING_in_templateDef368 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_BIGSTRING_in_templateDef383 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_BIGSTRING_NO_NL_in_templateDef395 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ID_in_templateDef430 = new BitSet(new long[]{0x0000000000200000L});
|
|
+ public static final BitSet FOLLOW_21_in_templateDef432 = new BitSet(new long[]{0x0000000000000200L});
|
|
+ public static final BitSet FOLLOW_ID_in_templateDef436 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_formalArg_in_formalArgs462 = new BitSet(new long[]{0x0000000000040002L});
|
|
+ public static final BitSet FOLLOW_18_in_formalArgs466 = new BitSet(new long[]{0x0000000000000200L});
|
|
+ public static final BitSet FOLLOW_formalArg_in_formalArgs468 = new BitSet(new long[]{0x0000000000040002L});
|
|
+ public static final BitSet FOLLOW_ID_in_formalArg486 = new BitSet(new long[]{0x0000000000800002L});
|
|
+ public static final BitSet FOLLOW_23_in_formalArg492 = new BitSet(new long[]{0x0000000000006110L});
|
|
+ public static final BitSet FOLLOW_set_in_formalArg496 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_23_in_formalArg512 = new BitSet(new long[]{0x0000000000000400L});
|
|
+ public static final BitSet FOLLOW_LBRACK_in_formalArg516 = new BitSet(new long[]{0x0000000000001000L});
|
|
+ public static final BitSet FOLLOW_RBRACK_in_formalArg518 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ID_in_dictDef551 = new BitSet(new long[]{0x0000000000200000L});
|
|
+ public static final BitSet FOLLOW_21_in_dictDef553 = new BitSet(new long[]{0x0000000000000400L});
|
|
+ public static final BitSet FOLLOW_dict_in_dictDef555 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_LBRACK_in_dict587 = new BitSet(new long[]{0x0000000002002000L});
|
|
+ public static final BitSet FOLLOW_dictPairs_in_dict589 = new BitSet(new long[]{0x0000000000001000L});
|
|
+ public static final BitSet FOLLOW_RBRACK_in_dict592 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_keyValuePair_in_dictPairs607 = new BitSet(new long[]{0x0000000000040002L});
|
|
+ public static final BitSet FOLLOW_18_in_dictPairs616 = new BitSet(new long[]{0x0000000000002000L});
|
|
+ public static final BitSet FOLLOW_keyValuePair_in_dictPairs618 = new BitSet(new long[]{0x0000000000040002L});
|
|
+ public static final BitSet FOLLOW_18_in_dictPairs624 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_defaultValuePair_in_dictPairs626 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_defaultValuePair_in_dictPairs637 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_25_in_defaultValuePair660 = new BitSet(new long[]{0x0000000000100000L});
|
|
+ public static final BitSet FOLLOW_20_in_defaultValuePair662 = new BitSet(new long[]{0x0000000000006770L});
|
|
+ public static final BitSet FOLLOW_keyValue_in_defaultValuePair664 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_STRING_in_keyValuePair678 = new BitSet(new long[]{0x0000000000100000L});
|
|
+ public static final BitSet FOLLOW_20_in_keyValuePair680 = new BitSet(new long[]{0x0000000000006770L});
|
|
+ public static final BitSet FOLLOW_keyValue_in_keyValuePair682 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_BIGSTRING_in_keyValue699 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_BIGSTRING_NO_NL_in_keyValue708 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ANONYMOUS_TEMPLATE_in_keyValue716 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_STRING_in_keyValue723 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_TRUE_in_keyValue733 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_FALSE_in_keyValue743 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_LBRACK_in_keyValue753 = new BitSet(new long[]{0x0000000000001000L});
|
|
+ public static final BitSet FOLLOW_RBRACK_in_keyValue755 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ID_in_keyValue768 = new BitSet(new long[]{0x0000000000000002L});
|
|
+}
|
|
diff -urEbwBN src/main/java/org/stringtemplate/v4/compiler/STParser.java src/main/java/org/stringtemplate/v4/compiler/STParser.java
|
|
--- src/main/java/org/stringtemplate/v4/compiler/STParser.java 1970-01-01 01:00:00.000000000 +0100
|
|
+++ src/main/java/org/stringtemplate/v4/compiler/STParser.java 2024-09-21 13:57:52.307857206 +0200
|
|
@@ -0,0 +1,5613 @@
|
|
+// $ANTLR 3.5.3 org/stringtemplate/v4/compiler/STParser.g 2024-09-21 11:54:23
|
|
+
|
|
+package org.stringtemplate.v4.compiler;
|
|
+import org.stringtemplate.v4.misc.ErrorManager;
|
|
+import org.stringtemplate.v4.misc.ErrorType;
|
|
+
|
|
+
|
|
+import org.antlr.runtime.*;
|
|
+import java.util.Stack;
|
|
+import java.util.List;
|
|
+import java.util.ArrayList;
|
|
+
|
|
+import org.antlr.runtime.tree.*;
|
|
+
|
|
+
|
|
+/** Build an AST from a single StringTemplate template */
|
|
+@SuppressWarnings("all")
|
|
+public class STParser extends Parser {
|
|
+ public static final String[] tokenNames = new String[] {
|
|
+ "<invalid>", "<EOR>", "<DOWN>", "<UP>", "IF", "ELSE", "ELSEIF", "ENDIF",
|
|
+ "SUPER", "SEMI", "BANG", "ELLIPSIS", "EQUALS", "COLON", "LPAREN", "RPAREN",
|
|
+ "LBRACK", "RBRACK", "COMMA", "DOT", "LCURLY", "RCURLY", "TEXT", "LDELIM",
|
|
+ "RDELIM", "ID", "STRING", "WS", "PIPE", "OR", "AND", "INDENT", "NEWLINE",
|
|
+ "AT", "END", "TRUE", "FALSE", "COMMENT", "SLASH", "ARGS", "ELEMENTS",
|
|
+ "EXEC_FUNC", "EXPR", "INCLUDE", "INCLUDE_IND", "INCLUDE_REGION", "INCLUDE_SUPER",
|
|
+ "INCLUDE_SUPER_REGION", "INDENTED_EXPR", "LIST", "MAP", "NULL", "OPTIONS",
|
|
+ "PROP", "PROP_IND", "REGION", "SUBTEMPLATE", "TO_STR", "ZIP"
|
|
+ };
|
|
+ public static final int EOF=-1;
|
|
+ public static final int RBRACK=17;
|
|
+ public static final int LBRACK=16;
|
|
+ public static final int ELSE=5;
|
|
+ public static final int ELLIPSIS=11;
|
|
+ public static final int LCURLY=20;
|
|
+ public static final int BANG=10;
|
|
+ public static final int EQUALS=12;
|
|
+ public static final int TEXT=22;
|
|
+ public static final int ID=25;
|
|
+ public static final int SEMI=9;
|
|
+ public static final int LPAREN=14;
|
|
+ public static final int IF=4;
|
|
+ public static final int ELSEIF=6;
|
|
+ public static final int COLON=13;
|
|
+ public static final int RPAREN=15;
|
|
+ public static final int WS=27;
|
|
+ public static final int COMMA=18;
|
|
+ public static final int RCURLY=21;
|
|
+ public static final int ENDIF=7;
|
|
+ public static final int RDELIM=24;
|
|
+ public static final int SUPER=8;
|
|
+ public static final int DOT=19;
|
|
+ public static final int LDELIM=23;
|
|
+ public static final int STRING=26;
|
|
+ public static final int PIPE=28;
|
|
+ public static final int OR=29;
|
|
+ public static final int AND=30;
|
|
+ public static final int INDENT=31;
|
|
+ public static final int NEWLINE=32;
|
|
+ public static final int AT=33;
|
|
+ public static final int END=34;
|
|
+ public static final int TRUE=35;
|
|
+ public static final int FALSE=36;
|
|
+ public static final int COMMENT=37;
|
|
+ public static final int SLASH=38;
|
|
+ public static final int ARGS=39;
|
|
+ public static final int ELEMENTS=40;
|
|
+ public static final int EXEC_FUNC=41;
|
|
+ public static final int EXPR=42;
|
|
+ public static final int INCLUDE=43;
|
|
+ public static final int INCLUDE_IND=44;
|
|
+ public static final int INCLUDE_REGION=45;
|
|
+ public static final int INCLUDE_SUPER=46;
|
|
+ public static final int INCLUDE_SUPER_REGION=47;
|
|
+ public static final int INDENTED_EXPR=48;
|
|
+ public static final int LIST=49;
|
|
+ public static final int MAP=50;
|
|
+ public static final int NULL=51;
|
|
+ public static final int OPTIONS=52;
|
|
+ public static final int PROP=53;
|
|
+ public static final int PROP_IND=54;
|
|
+ public static final int REGION=55;
|
|
+ public static final int SUBTEMPLATE=56;
|
|
+ public static final int TO_STR=57;
|
|
+ public static final int ZIP=58;
|
|
+
|
|
+ // delegates
|
|
+ public Parser[] getDelegates() {
|
|
+ return new Parser[] {};
|
|
+ }
|
|
+
|
|
+ // delegators
|
|
+
|
|
+
|
|
+ public STParser(TokenStream input) {
|
|
+ this(input, new RecognizerSharedState());
|
|
+ }
|
|
+ public STParser(TokenStream input, RecognizerSharedState state) {
|
|
+ super(input, state);
|
|
+ }
|
|
+
|
|
+ protected TreeAdaptor adaptor = new CommonTreeAdaptor();
|
|
+
|
|
+ public void setTreeAdaptor(TreeAdaptor adaptor) {
|
|
+ this.adaptor = adaptor;
|
|
+ }
|
|
+ public TreeAdaptor getTreeAdaptor() {
|
|
+ return adaptor;
|
|
+ }
|
|
+ @Override public String[] getTokenNames() { return STParser.tokenNames; }
|
|
+ @Override public String getGrammarFileName() { return "org/stringtemplate/v4/compiler/STParser.g"; }
|
|
+
|
|
+
|
|
+ ErrorManager errMgr;
|
|
+ Token templateToken;
|
|
+ public STParser(TokenStream input, ErrorManager errMgr, Token templateToken) {
|
|
+ this(input);
|
|
+ this.errMgr = errMgr;
|
|
+ this.templateToken = templateToken;
|
|
+ }
|
|
+ @Override
|
|
+ protected Object recoverFromMismatchedToken(IntStream input, int ttype, BitSet follow)
|
|
+ throws RecognitionException
|
|
+ {
|
|
+ throw new MismatchedTokenException(ttype, input);
|
|
+ }
|
|
+
|
|
+
|
|
+ public static class templateAndEOF_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "templateAndEOF"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:72:1: templateAndEOF : template EOF -> ( template )? ;
|
|
+ public final STParser.templateAndEOF_return templateAndEOF() throws RecognitionException {
|
|
+ STParser.templateAndEOF_return retval = new STParser.templateAndEOF_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken EOF2=null;
|
|
+ ParserRuleReturnScope template1 =null;
|
|
+
|
|
+ CommonTree EOF2_tree=null;
|
|
+ RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF");
|
|
+ RewriteRuleSubtreeStream stream_template=new RewriteRuleSubtreeStream(adaptor,"rule template");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:72:16: ( template EOF -> ( template )? )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:72:18: template EOF
|
|
+ {
|
|
+ pushFollow(FOLLOW_template_in_templateAndEOF139);
|
|
+ template1=template();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_template.add(template1.getTree());
|
|
+ EOF2=(CommonToken)match(input,EOF,FOLLOW_EOF_in_templateAndEOF141);
|
|
+ stream_EOF.add(EOF2);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: template
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 72:31: -> ( template )?
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:72:34: ( template )?
|
|
+ if ( stream_template.hasNext() ) {
|
|
+ adaptor.addChild(root_0, stream_template.nextTree());
|
|
+ }
|
|
+ stream_template.reset();
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "templateAndEOF"
|
|
+
|
|
+
|
|
+ public static class template_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "template"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:74:1: template : ( element )* ;
|
|
+ public final STParser.template_return template() throws RecognitionException {
|
|
+ STParser.template_return retval = new STParser.template_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ ParserRuleReturnScope element3 =null;
|
|
+
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:74:10: ( ( element )* )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:74:12: ( element )*
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:74:12: ( element )*
|
|
+ loop1:
|
|
+ while (true) {
|
|
+ int alt1=2;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case INDENT:
|
|
+ {
|
|
+ int LA1_2 = input.LA(2);
|
|
+ if ( (LA1_2==LDELIM) ) {
|
|
+ int LA1_5 = input.LA(3);
|
|
+ if ( (LA1_5==IF||LA1_5==SUPER||LA1_5==LPAREN||LA1_5==LBRACK||LA1_5==LCURLY||(LA1_5 >= ID && LA1_5 <= STRING)||LA1_5==AT||(LA1_5 >= TRUE && LA1_5 <= FALSE)||LA1_5==SLASH) ) {
|
|
+ alt1=1;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA1_2==TEXT||LA1_2==NEWLINE||LA1_2==COMMENT) ) {
|
|
+ alt1=1;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case LDELIM:
|
|
+ {
|
|
+ int LA1_3 = input.LA(2);
|
|
+ if ( (LA1_3==IF||LA1_3==SUPER||LA1_3==LPAREN||LA1_3==LBRACK||LA1_3==LCURLY||(LA1_3 >= ID && LA1_3 <= STRING)||LA1_3==AT||(LA1_3 >= TRUE && LA1_3 <= FALSE)||LA1_3==SLASH) ) {
|
|
+ alt1=1;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case TEXT:
|
|
+ case NEWLINE:
|
|
+ case COMMENT:
|
|
+ {
|
|
+ alt1=1;
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+ switch (alt1) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:74:12: element
|
|
+ {
|
|
+ pushFollow(FOLLOW_element_in_template155);
|
|
+ element3=element();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, element3.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop1;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "template"
|
|
+
|
|
+
|
|
+ public static class element_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "element"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:76:1: element : ({...}? ( INDENT )? COMMENT NEWLINE ->| INDENT singleElement -> ^( INDENTED_EXPR INDENT ( singleElement )? ) | singleElement | compoundElement );
|
|
+ public final STParser.element_return element() throws RecognitionException {
|
|
+ STParser.element_return retval = new STParser.element_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken INDENT4=null;
|
|
+ CommonToken COMMENT5=null;
|
|
+ CommonToken NEWLINE6=null;
|
|
+ CommonToken INDENT7=null;
|
|
+ ParserRuleReturnScope singleElement8 =null;
|
|
+ ParserRuleReturnScope singleElement9 =null;
|
|
+ ParserRuleReturnScope compoundElement10 =null;
|
|
+
|
|
+ CommonTree INDENT4_tree=null;
|
|
+ CommonTree COMMENT5_tree=null;
|
|
+ CommonTree NEWLINE6_tree=null;
|
|
+ CommonTree INDENT7_tree=null;
|
|
+ RewriteRuleTokenStream stream_INDENT=new RewriteRuleTokenStream(adaptor,"token INDENT");
|
|
+ RewriteRuleTokenStream stream_NEWLINE=new RewriteRuleTokenStream(adaptor,"token NEWLINE");
|
|
+ RewriteRuleTokenStream stream_COMMENT=new RewriteRuleTokenStream(adaptor,"token COMMENT");
|
|
+ RewriteRuleSubtreeStream stream_singleElement=new RewriteRuleSubtreeStream(adaptor,"rule singleElement");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:77:2: ({...}? ( INDENT )? COMMENT NEWLINE ->| INDENT singleElement -> ^( INDENTED_EXPR INDENT ( singleElement )? ) | singleElement | compoundElement )
|
|
+ int alt3=4;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case INDENT:
|
|
+ {
|
|
+ switch ( input.LA(2) ) {
|
|
+ case COMMENT:
|
|
+ {
|
|
+ int LA3_5 = input.LA(3);
|
|
+ if ( (LA3_5==NEWLINE) ) {
|
|
+ int LA3_11 = input.LA(4);
|
|
+ if ( ((input.LT(1).getCharPositionInLine()==0)) ) {
|
|
+ alt3=1;
|
|
+ }
|
|
+ else if ( (true) ) {
|
|
+ alt3=2;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA3_5==EOF||(LA3_5 >= RCURLY && LA3_5 <= LDELIM)||LA3_5==INDENT||LA3_5==COMMENT) ) {
|
|
+ alt3=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 5, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case LDELIM:
|
|
+ {
|
|
+ switch ( input.LA(3) ) {
|
|
+ case IF:
|
|
+ {
|
|
+ alt3=4;
|
|
+ }
|
|
+ break;
|
|
+ case AT:
|
|
+ {
|
|
+ int LA3_12 = input.LA(4);
|
|
+ if ( (LA3_12==ID) ) {
|
|
+ int LA3_15 = input.LA(5);
|
|
+ if ( (LA3_15==RDELIM) ) {
|
|
+ alt3=4;
|
|
+ }
|
|
+ else if ( (LA3_15==LPAREN) ) {
|
|
+ alt3=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 15, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA3_12==SUPER) ) {
|
|
+ alt3=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 12, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case SUPER:
|
|
+ case LPAREN:
|
|
+ case LBRACK:
|
|
+ case LCURLY:
|
|
+ case ID:
|
|
+ case STRING:
|
|
+ case TRUE:
|
|
+ case FALSE:
|
|
+ case SLASH:
|
|
+ {
|
|
+ alt3=2;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 6, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case TEXT:
|
|
+ case NEWLINE:
|
|
+ {
|
|
+ alt3=2;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 1, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case COMMENT:
|
|
+ {
|
|
+ int LA3_2 = input.LA(2);
|
|
+ if ( (LA3_2==NEWLINE) ) {
|
|
+ int LA3_8 = input.LA(3);
|
|
+ if ( ((input.LT(1).getCharPositionInLine()==0)) ) {
|
|
+ alt3=1;
|
|
+ }
|
|
+ else if ( (true) ) {
|
|
+ alt3=3;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA3_2==EOF||(LA3_2 >= RCURLY && LA3_2 <= LDELIM)||LA3_2==INDENT||LA3_2==COMMENT) ) {
|
|
+ alt3=3;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 2, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case LDELIM:
|
|
+ {
|
|
+ switch ( input.LA(2) ) {
|
|
+ case IF:
|
|
+ {
|
|
+ alt3=4;
|
|
+ }
|
|
+ break;
|
|
+ case AT:
|
|
+ {
|
|
+ int LA3_10 = input.LA(3);
|
|
+ if ( (LA3_10==ID) ) {
|
|
+ int LA3_14 = input.LA(4);
|
|
+ if ( (LA3_14==RDELIM) ) {
|
|
+ alt3=4;
|
|
+ }
|
|
+ else if ( (LA3_14==LPAREN) ) {
|
|
+ alt3=3;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 14, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA3_10==SUPER) ) {
|
|
+ alt3=3;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 10, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case SUPER:
|
|
+ case LPAREN:
|
|
+ case LBRACK:
|
|
+ case LCURLY:
|
|
+ case ID:
|
|
+ case STRING:
|
|
+ case TRUE:
|
|
+ case FALSE:
|
|
+ case SLASH:
|
|
+ {
|
|
+ alt3=3;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 3, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case TEXT:
|
|
+ case NEWLINE:
|
|
+ {
|
|
+ alt3=3;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 3, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt3) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:77:4: {...}? ( INDENT )? COMMENT NEWLINE
|
|
+ {
|
|
+ if ( !((input.LT(1).getCharPositionInLine()==0)) ) {
|
|
+ throw new FailedPredicateException(input, "element", "input.LT(1).getCharPositionInLine()==0");
|
|
+ }
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:77:46: ( INDENT )?
|
|
+ int alt2=2;
|
|
+ int LA2_0 = input.LA(1);
|
|
+ if ( (LA2_0==INDENT) ) {
|
|
+ alt2=1;
|
|
+ }
|
|
+ switch (alt2) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:77:46: INDENT
|
|
+ {
|
|
+ INDENT4=(CommonToken)match(input,INDENT,FOLLOW_INDENT_in_element168);
|
|
+ stream_INDENT.add(INDENT4);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ COMMENT5=(CommonToken)match(input,COMMENT,FOLLOW_COMMENT_in_element171);
|
|
+ stream_COMMENT.add(COMMENT5);
|
|
+
|
|
+ NEWLINE6=(CommonToken)match(input,NEWLINE,FOLLOW_NEWLINE_in_element173);
|
|
+ stream_NEWLINE.add(NEWLINE6);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements:
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 77:70: ->
|
|
+ {
|
|
+ root_0 = null;
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:78:4: INDENT singleElement
|
|
+ {
|
|
+ INDENT7=(CommonToken)match(input,INDENT,FOLLOW_INDENT_in_element181);
|
|
+ stream_INDENT.add(INDENT7);
|
|
+
|
|
+ pushFollow(FOLLOW_singleElement_in_element183);
|
|
+ singleElement8=singleElement();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_singleElement.add(singleElement8.getTree());
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: INDENT, singleElement
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 78:25: -> ^( INDENTED_EXPR INDENT ( singleElement )? )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:78:28: ^( INDENTED_EXPR INDENT ( singleElement )? )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INDENTED_EXPR, "INDENTED_EXPR"), root_1);
|
|
+ adaptor.addChild(root_1, stream_INDENT.nextNode());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:78:51: ( singleElement )?
|
|
+ if ( stream_singleElement.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_singleElement.nextTree());
|
|
+ }
|
|
+ stream_singleElement.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:79:4: singleElement
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_singleElement_in_element200);
|
|
+ singleElement9=singleElement();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, singleElement9.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:80:4: compoundElement
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_compoundElement_in_element205);
|
|
+ compoundElement10=compoundElement();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, compoundElement10.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "element"
|
|
+
|
|
+
|
|
+ public static class singleElement_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "singleElement"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:83:1: singleElement : ( exprTag | TEXT | NEWLINE | COMMENT !);
|
|
+ public final STParser.singleElement_return singleElement() throws RecognitionException {
|
|
+ STParser.singleElement_return retval = new STParser.singleElement_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken TEXT12=null;
|
|
+ CommonToken NEWLINE13=null;
|
|
+ CommonToken COMMENT14=null;
|
|
+ ParserRuleReturnScope exprTag11 =null;
|
|
+
|
|
+ CommonTree TEXT12_tree=null;
|
|
+ CommonTree NEWLINE13_tree=null;
|
|
+ CommonTree COMMENT14_tree=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:84:2: ( exprTag | TEXT | NEWLINE | COMMENT !)
|
|
+ int alt4=4;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case LDELIM:
|
|
+ {
|
|
+ alt4=1;
|
|
+ }
|
|
+ break;
|
|
+ case TEXT:
|
|
+ {
|
|
+ alt4=2;
|
|
+ }
|
|
+ break;
|
|
+ case NEWLINE:
|
|
+ {
|
|
+ alt4=3;
|
|
+ }
|
|
+ break;
|
|
+ case COMMENT:
|
|
+ {
|
|
+ alt4=4;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 4, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt4) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:84:4: exprTag
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_exprTag_in_singleElement216);
|
|
+ exprTag11=exprTag();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, exprTag11.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:85:4: TEXT
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ TEXT12=(CommonToken)match(input,TEXT,FOLLOW_TEXT_in_singleElement221);
|
|
+ TEXT12_tree = (CommonTree)adaptor.create(TEXT12);
|
|
+ adaptor.addChild(root_0, TEXT12_tree);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:86:4: NEWLINE
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ NEWLINE13=(CommonToken)match(input,NEWLINE,FOLLOW_NEWLINE_in_singleElement226);
|
|
+ NEWLINE13_tree = (CommonTree)adaptor.create(NEWLINE13);
|
|
+ adaptor.addChild(root_0, NEWLINE13_tree);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:87:4: COMMENT !
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ COMMENT14=(CommonToken)match(input,COMMENT,FOLLOW_COMMENT_in_singleElement231);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "singleElement"
|
|
+
|
|
+
|
|
+ public static class compoundElement_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "compoundElement"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:90:1: compoundElement : ( ifstat | region );
|
|
+ public final STParser.compoundElement_return compoundElement() throws RecognitionException {
|
|
+ STParser.compoundElement_return retval = new STParser.compoundElement_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ ParserRuleReturnScope ifstat15 =null;
|
|
+ ParserRuleReturnScope region16 =null;
|
|
+
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:91:2: ( ifstat | region )
|
|
+ int alt5=2;
|
|
+ int LA5_0 = input.LA(1);
|
|
+ if ( (LA5_0==INDENT) ) {
|
|
+ int LA5_1 = input.LA(2);
|
|
+ if ( (LA5_1==LDELIM) ) {
|
|
+ int LA5_2 = input.LA(3);
|
|
+ if ( (LA5_2==IF) ) {
|
|
+ alt5=1;
|
|
+ }
|
|
+ else if ( (LA5_2==AT) ) {
|
|
+ alt5=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
|
|
+ input.consume();
|
|
+ }
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 5, 2, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 5, 1, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA5_0==LDELIM) ) {
|
|
+ int LA5_2 = input.LA(2);
|
|
+ if ( (LA5_2==IF) ) {
|
|
+ alt5=1;
|
|
+ }
|
|
+ else if ( (LA5_2==AT) ) {
|
|
+ alt5=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 5, 2, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 5, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt5) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:91:4: ifstat
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_ifstat_in_compoundElement244);
|
|
+ ifstat15=ifstat();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, ifstat15.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:92:4: region
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_region_in_compoundElement249);
|
|
+ region16=region();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, region16.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "compoundElement"
|
|
+
|
|
+
|
|
+ public static class exprTag_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "exprTag"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:95:1: exprTag : LDELIM expr ( ';' exprOptions )? RDELIM -> ^( EXPR[$LDELIM,\"EXPR\"] expr ( exprOptions )? ) ;
|
|
+ public final STParser.exprTag_return exprTag() throws RecognitionException {
|
|
+ STParser.exprTag_return retval = new STParser.exprTag_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken LDELIM17=null;
|
|
+ CommonToken char_literal19=null;
|
|
+ CommonToken RDELIM21=null;
|
|
+ ParserRuleReturnScope expr18 =null;
|
|
+ ParserRuleReturnScope exprOptions20 =null;
|
|
+
|
|
+ CommonTree LDELIM17_tree=null;
|
|
+ CommonTree char_literal19_tree=null;
|
|
+ CommonTree RDELIM21_tree=null;
|
|
+ RewriteRuleTokenStream stream_RDELIM=new RewriteRuleTokenStream(adaptor,"token RDELIM");
|
|
+ RewriteRuleTokenStream stream_SEMI=new RewriteRuleTokenStream(adaptor,"token SEMI");
|
|
+ RewriteRuleTokenStream stream_LDELIM=new RewriteRuleTokenStream(adaptor,"token LDELIM");
|
|
+ RewriteRuleSubtreeStream stream_exprOptions=new RewriteRuleSubtreeStream(adaptor,"rule exprOptions");
|
|
+ RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:96:2: ( LDELIM expr ( ';' exprOptions )? RDELIM -> ^( EXPR[$LDELIM,\"EXPR\"] expr ( exprOptions )? ) )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:96:4: LDELIM expr ( ';' exprOptions )? RDELIM
|
|
+ {
|
|
+ LDELIM17=(CommonToken)match(input,LDELIM,FOLLOW_LDELIM_in_exprTag260);
|
|
+ stream_LDELIM.add(LDELIM17);
|
|
+
|
|
+ pushFollow(FOLLOW_expr_in_exprTag262);
|
|
+ expr18=expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_expr.add(expr18.getTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:96:16: ( ';' exprOptions )?
|
|
+ int alt6=2;
|
|
+ int LA6_0 = input.LA(1);
|
|
+ if ( (LA6_0==SEMI) ) {
|
|
+ alt6=1;
|
|
+ }
|
|
+ switch (alt6) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:96:18: ';' exprOptions
|
|
+ {
|
|
+ char_literal19=(CommonToken)match(input,SEMI,FOLLOW_SEMI_in_exprTag266);
|
|
+ stream_SEMI.add(char_literal19);
|
|
+
|
|
+ pushFollow(FOLLOW_exprOptions_in_exprTag268);
|
|
+ exprOptions20=exprOptions();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_exprOptions.add(exprOptions20.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ RDELIM21=(CommonToken)match(input,RDELIM,FOLLOW_RDELIM_in_exprTag273);
|
|
+ stream_RDELIM.add(RDELIM21);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: expr, exprOptions
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 97:3: -> ^( EXPR[$LDELIM,\"EXPR\"] expr ( exprOptions )? )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:97:6: ^( EXPR[$LDELIM,\"EXPR\"] expr ( exprOptions )? )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(EXPR, LDELIM17, "EXPR"), root_1);
|
|
+ adaptor.addChild(root_1, stream_expr.nextTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:97:34: ( exprOptions )?
|
|
+ if ( stream_exprOptions.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_exprOptions.nextTree());
|
|
+ }
|
|
+ stream_exprOptions.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "exprTag"
|
|
+
|
|
+
|
|
+ public static class region_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "region"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:100:1: region : (i= INDENT )? x= LDELIM '@' ID RDELIM template ( INDENT )? LDELIM '@end' RDELIM ({...}? => NEWLINE )? -> {indent!=null}? ^( INDENTED_EXPR $i ^( REGION[$x] ID ( template )? ) ) -> ^( REGION[$x] ID ( template )? ) ;
|
|
+ public final STParser.region_return region() throws RecognitionException {
|
|
+ STParser.region_return retval = new STParser.region_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken i=null;
|
|
+ CommonToken x=null;
|
|
+ CommonToken char_literal22=null;
|
|
+ CommonToken ID23=null;
|
|
+ CommonToken RDELIM24=null;
|
|
+ CommonToken INDENT26=null;
|
|
+ CommonToken LDELIM27=null;
|
|
+ CommonToken string_literal28=null;
|
|
+ CommonToken RDELIM29=null;
|
|
+ CommonToken NEWLINE30=null;
|
|
+ ParserRuleReturnScope template25 =null;
|
|
+
|
|
+ CommonTree i_tree=null;
|
|
+ CommonTree x_tree=null;
|
|
+ CommonTree char_literal22_tree=null;
|
|
+ CommonTree ID23_tree=null;
|
|
+ CommonTree RDELIM24_tree=null;
|
|
+ CommonTree INDENT26_tree=null;
|
|
+ CommonTree LDELIM27_tree=null;
|
|
+ CommonTree string_literal28_tree=null;
|
|
+ CommonTree RDELIM29_tree=null;
|
|
+ CommonTree NEWLINE30_tree=null;
|
|
+ RewriteRuleTokenStream stream_INDENT=new RewriteRuleTokenStream(adaptor,"token INDENT");
|
|
+ RewriteRuleTokenStream stream_RDELIM=new RewriteRuleTokenStream(adaptor,"token RDELIM");
|
|
+ RewriteRuleTokenStream stream_AT=new RewriteRuleTokenStream(adaptor,"token AT");
|
|
+ RewriteRuleTokenStream stream_NEWLINE=new RewriteRuleTokenStream(adaptor,"token NEWLINE");
|
|
+ RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
|
|
+ RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
|
|
+ RewriteRuleTokenStream stream_LDELIM=new RewriteRuleTokenStream(adaptor,"token LDELIM");
|
|
+ RewriteRuleSubtreeStream stream_template=new RewriteRuleSubtreeStream(adaptor,"rule template");
|
|
+
|
|
+ Token indent=null;
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:102:2: ( (i= INDENT )? x= LDELIM '@' ID RDELIM template ( INDENT )? LDELIM '@end' RDELIM ({...}? => NEWLINE )? -> {indent!=null}? ^( INDENTED_EXPR $i ^( REGION[$x] ID ( template )? ) ) -> ^( REGION[$x] ID ( template )? ) )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:102:4: (i= INDENT )? x= LDELIM '@' ID RDELIM template ( INDENT )? LDELIM '@end' RDELIM ({...}? => NEWLINE )?
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:102:5: (i= INDENT )?
|
|
+ int alt7=2;
|
|
+ int LA7_0 = input.LA(1);
|
|
+ if ( (LA7_0==INDENT) ) {
|
|
+ alt7=1;
|
|
+ }
|
|
+ switch (alt7) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:102:5: i= INDENT
|
|
+ {
|
|
+ i=(CommonToken)match(input,INDENT,FOLLOW_INDENT_in_region305);
|
|
+ stream_INDENT.add(i);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ x=(CommonToken)match(input,LDELIM,FOLLOW_LDELIM_in_region310);
|
|
+ stream_LDELIM.add(x);
|
|
+
|
|
+ char_literal22=(CommonToken)match(input,AT,FOLLOW_AT_in_region312);
|
|
+ stream_AT.add(char_literal22);
|
|
+
|
|
+ ID23=(CommonToken)match(input,ID,FOLLOW_ID_in_region314);
|
|
+ stream_ID.add(ID23);
|
|
+
|
|
+ RDELIM24=(CommonToken)match(input,RDELIM,FOLLOW_RDELIM_in_region316);
|
|
+ stream_RDELIM.add(RDELIM24);
|
|
+
|
|
+ if (input.LA(1)!=NEWLINE) indent=i;
|
|
+ pushFollow(FOLLOW_template_in_region322);
|
|
+ template25=template();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_template.add(template25.getTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:104:3: ( INDENT )?
|
|
+ int alt8=2;
|
|
+ int LA8_0 = input.LA(1);
|
|
+ if ( (LA8_0==INDENT) ) {
|
|
+ alt8=1;
|
|
+ }
|
|
+ switch (alt8) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:104:3: INDENT
|
|
+ {
|
|
+ INDENT26=(CommonToken)match(input,INDENT,FOLLOW_INDENT_in_region326);
|
|
+ stream_INDENT.add(INDENT26);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ LDELIM27=(CommonToken)match(input,LDELIM,FOLLOW_LDELIM_in_region329);
|
|
+ stream_LDELIM.add(LDELIM27);
|
|
+
|
|
+ string_literal28=(CommonToken)match(input,END,FOLLOW_END_in_region331);
|
|
+ stream_END.add(string_literal28);
|
|
+
|
|
+ RDELIM29=(CommonToken)match(input,RDELIM,FOLLOW_RDELIM_in_region333);
|
|
+ stream_RDELIM.add(RDELIM29);
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:106:3: ({...}? => NEWLINE )?
|
|
+ int alt9=2;
|
|
+ int LA9_0 = input.LA(1);
|
|
+ if ( (LA9_0==NEWLINE) ) {
|
|
+ int LA9_1 = input.LA(2);
|
|
+ if ( ((((CommonToken)retval.start).getLine()!=input.LT(1).getLine())) ) {
|
|
+ alt9=1;
|
|
+ }
|
|
+ }
|
|
+ switch (alt9) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:106:4: {...}? => NEWLINE
|
|
+ {
|
|
+ if ( !((((CommonToken)retval.start).getLine()!=input.LT(1).getLine())) ) {
|
|
+ throw new FailedPredicateException(input, "region", "$region.start.getLine()!=input.LT(1).getLine()");
|
|
+ }
|
|
+ NEWLINE30=(CommonToken)match(input,NEWLINE,FOLLOW_NEWLINE_in_region344);
|
|
+ stream_NEWLINE.add(NEWLINE30);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ID, ID, i, template, template
|
|
+ // token labels: i
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleTokenStream stream_i=new RewriteRuleTokenStream(adaptor,"token i",i);
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 107:3: -> {indent!=null}? ^( INDENTED_EXPR $i ^( REGION[$x] ID ( template )? ) )
|
|
+ if (indent!=null) {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:108:6: ^( INDENTED_EXPR $i ^( REGION[$x] ID ( template )? ) )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INDENTED_EXPR, "INDENTED_EXPR"), root_1);
|
|
+ adaptor.addChild(root_1, stream_i.nextNode());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:108:25: ^( REGION[$x] ID ( template )? )
|
|
+ {
|
|
+ CommonTree root_2 = (CommonTree)adaptor.nil();
|
|
+ root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(REGION, x), root_2);
|
|
+ adaptor.addChild(root_2, stream_ID.nextNode());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:108:41: ( template )?
|
|
+ if ( stream_template.hasNext() ) {
|
|
+ adaptor.addChild(root_2, stream_template.nextTree());
|
|
+ }
|
|
+ stream_template.reset();
|
|
+
|
|
+ adaptor.addChild(root_1, root_2);
|
|
+ }
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else // 109:3: -> ^( REGION[$x] ID ( template )? )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:109:25: ^( REGION[$x] ID ( template )? )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(REGION, x), root_1);
|
|
+ adaptor.addChild(root_1, stream_ID.nextNode());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:109:41: ( template )?
|
|
+ if ( stream_template.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_template.nextTree());
|
|
+ }
|
|
+ stream_template.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "region"
|
|
+
|
|
+
|
|
+ public static class subtemplate_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "subtemplate"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:112:1: subtemplate : lc= '{' (ids+= ID ( ',' ids+= ID )* '|' )? template ( INDENT )? '}' -> ^( SUBTEMPLATE[$lc,\"SUBTEMPLATE\"] ( ^( ARGS $ids) )* ( template )? ) ;
|
|
+ public final STParser.subtemplate_return subtemplate() throws RecognitionException {
|
|
+ STParser.subtemplate_return retval = new STParser.subtemplate_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken lc=null;
|
|
+ CommonToken char_literal31=null;
|
|
+ CommonToken char_literal32=null;
|
|
+ CommonToken INDENT34=null;
|
|
+ CommonToken char_literal35=null;
|
|
+ CommonToken ids=null;
|
|
+ List<Object> list_ids=null;
|
|
+ ParserRuleReturnScope template33 =null;
|
|
+
|
|
+ CommonTree lc_tree=null;
|
|
+ CommonTree char_literal31_tree=null;
|
|
+ CommonTree char_literal32_tree=null;
|
|
+ CommonTree INDENT34_tree=null;
|
|
+ CommonTree char_literal35_tree=null;
|
|
+ CommonTree ids_tree=null;
|
|
+ RewriteRuleTokenStream stream_INDENT=new RewriteRuleTokenStream(adaptor,"token INDENT");
|
|
+ RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
|
|
+ RewriteRuleTokenStream stream_LCURLY=new RewriteRuleTokenStream(adaptor,"token LCURLY");
|
|
+ RewriteRuleTokenStream stream_PIPE=new RewriteRuleTokenStream(adaptor,"token PIPE");
|
|
+ RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
|
|
+ RewriteRuleTokenStream stream_RCURLY=new RewriteRuleTokenStream(adaptor,"token RCURLY");
|
|
+ RewriteRuleSubtreeStream stream_template=new RewriteRuleSubtreeStream(adaptor,"rule template");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:113:2: (lc= '{' (ids+= ID ( ',' ids+= ID )* '|' )? template ( INDENT )? '}' -> ^( SUBTEMPLATE[$lc,\"SUBTEMPLATE\"] ( ^( ARGS $ids) )* ( template )? ) )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:113:4: lc= '{' (ids+= ID ( ',' ids+= ID )* '|' )? template ( INDENT )? '}'
|
|
+ {
|
|
+ lc=(CommonToken)match(input,LCURLY,FOLLOW_LCURLY_in_subtemplate420);
|
|
+ stream_LCURLY.add(lc);
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:113:11: (ids+= ID ( ',' ids+= ID )* '|' )?
|
|
+ int alt11=2;
|
|
+ int LA11_0 = input.LA(1);
|
|
+ if ( (LA11_0==ID) ) {
|
|
+ alt11=1;
|
|
+ }
|
|
+ switch (alt11) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:113:12: ids+= ID ( ',' ids+= ID )* '|'
|
|
+ {
|
|
+ ids=(CommonToken)match(input,ID,FOLLOW_ID_in_subtemplate426);
|
|
+ stream_ID.add(ids);
|
|
+
|
|
+ if (list_ids==null) list_ids=new ArrayList<Object>();
|
|
+ list_ids.add(ids);
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:113:21: ( ',' ids+= ID )*
|
|
+ loop10:
|
|
+ while (true) {
|
|
+ int alt10=2;
|
|
+ int LA10_0 = input.LA(1);
|
|
+ if ( (LA10_0==COMMA) ) {
|
|
+ alt10=1;
|
|
+ }
|
|
+
|
|
+ switch (alt10) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:113:23: ',' ids+= ID
|
|
+ {
|
|
+ char_literal31=(CommonToken)match(input,COMMA,FOLLOW_COMMA_in_subtemplate430);
|
|
+ stream_COMMA.add(char_literal31);
|
|
+
|
|
+ ids=(CommonToken)match(input,ID,FOLLOW_ID_in_subtemplate435);
|
|
+ stream_ID.add(ids);
|
|
+
|
|
+ if (list_ids==null) list_ids=new ArrayList<Object>();
|
|
+ list_ids.add(ids);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop10;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ char_literal32=(CommonToken)match(input,PIPE,FOLLOW_PIPE_in_subtemplate440);
|
|
+ stream_PIPE.add(char_literal32);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ pushFollow(FOLLOW_template_in_subtemplate445);
|
|
+ template33=template();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_template.add(template33.getTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:113:55: ( INDENT )?
|
|
+ int alt12=2;
|
|
+ int LA12_0 = input.LA(1);
|
|
+ if ( (LA12_0==INDENT) ) {
|
|
+ alt12=1;
|
|
+ }
|
|
+ switch (alt12) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:113:55: INDENT
|
|
+ {
|
|
+ INDENT34=(CommonToken)match(input,INDENT,FOLLOW_INDENT_in_subtemplate447);
|
|
+ stream_INDENT.add(INDENT34);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ char_literal35=(CommonToken)match(input,RCURLY,FOLLOW_RCURLY_in_subtemplate450);
|
|
+ stream_RCURLY.add(char_literal35);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ids, template
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels: ids
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleTokenStream stream_ids=new RewriteRuleTokenStream(adaptor,"token ids", list_ids);
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 115:3: -> ^( SUBTEMPLATE[$lc,\"SUBTEMPLATE\"] ( ^( ARGS $ids) )* ( template )? )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:115:6: ^( SUBTEMPLATE[$lc,\"SUBTEMPLATE\"] ( ^( ARGS $ids) )* ( template )? )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(SUBTEMPLATE, lc, "SUBTEMPLATE"), root_1);
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:115:39: ( ^( ARGS $ids) )*
|
|
+ while ( stream_ids.hasNext() ) {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:115:39: ^( ARGS $ids)
|
|
+ {
|
|
+ CommonTree root_2 = (CommonTree)adaptor.nil();
|
|
+ root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ARGS, "ARGS"), root_2);
|
|
+ adaptor.addChild(root_2, stream_ids.nextNode());
|
|
+ adaptor.addChild(root_1, root_2);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ stream_ids.reset();
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:115:53: ( template )?
|
|
+ if ( stream_template.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_template.nextTree());
|
|
+ }
|
|
+ stream_template.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "subtemplate"
|
|
+
|
|
+
|
|
+ public static class ifstat_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "ifstat"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:118:1: ifstat : (i= INDENT )? LDELIM 'if' '(' c1= conditional ')' RDELIM t1= template ( ( INDENT )? LDELIM 'elseif' '(' c2+= conditional ')' RDELIM t2+= template )* ( ( INDENT )? LDELIM 'else' RDELIM t3= template )? ( INDENT )? endif= LDELIM 'endif' RDELIM ({...}? => NEWLINE )? -> {indent!=null}? ^( INDENTED_EXPR $i ^( 'if' $c1 ( $t1)? ( ^( 'elseif' $c2 $t2) )* ( ^( 'else' ( $t3)? ) )? ) ) -> ^( 'if' $c1 ( $t1)? ( ^( 'elseif' $c2 $t2) )* ( ^( 'else' ( $t3)? ) )? ) ;
|
|
+ public final STParser.ifstat_return ifstat() throws RecognitionException {
|
|
+ STParser.ifstat_return retval = new STParser.ifstat_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken i=null;
|
|
+ CommonToken endif=null;
|
|
+ CommonToken LDELIM36=null;
|
|
+ CommonToken string_literal37=null;
|
|
+ CommonToken char_literal38=null;
|
|
+ CommonToken char_literal39=null;
|
|
+ CommonToken RDELIM40=null;
|
|
+ CommonToken INDENT41=null;
|
|
+ CommonToken LDELIM42=null;
|
|
+ CommonToken string_literal43=null;
|
|
+ CommonToken char_literal44=null;
|
|
+ CommonToken char_literal45=null;
|
|
+ CommonToken RDELIM46=null;
|
|
+ CommonToken INDENT47=null;
|
|
+ CommonToken LDELIM48=null;
|
|
+ CommonToken string_literal49=null;
|
|
+ CommonToken RDELIM50=null;
|
|
+ CommonToken INDENT51=null;
|
|
+ CommonToken string_literal52=null;
|
|
+ CommonToken RDELIM53=null;
|
|
+ CommonToken NEWLINE54=null;
|
|
+ List<Object> list_c2=null;
|
|
+ List<Object> list_t2=null;
|
|
+ ParserRuleReturnScope c1 =null;
|
|
+ ParserRuleReturnScope t1 =null;
|
|
+ ParserRuleReturnScope t3 =null;
|
|
+ RuleReturnScope c2 = null;
|
|
+ RuleReturnScope t2 = null;
|
|
+ CommonTree i_tree=null;
|
|
+ CommonTree endif_tree=null;
|
|
+ CommonTree LDELIM36_tree=null;
|
|
+ CommonTree string_literal37_tree=null;
|
|
+ CommonTree char_literal38_tree=null;
|
|
+ CommonTree char_literal39_tree=null;
|
|
+ CommonTree RDELIM40_tree=null;
|
|
+ CommonTree INDENT41_tree=null;
|
|
+ CommonTree LDELIM42_tree=null;
|
|
+ CommonTree string_literal43_tree=null;
|
|
+ CommonTree char_literal44_tree=null;
|
|
+ CommonTree char_literal45_tree=null;
|
|
+ CommonTree RDELIM46_tree=null;
|
|
+ CommonTree INDENT47_tree=null;
|
|
+ CommonTree LDELIM48_tree=null;
|
|
+ CommonTree string_literal49_tree=null;
|
|
+ CommonTree RDELIM50_tree=null;
|
|
+ CommonTree INDENT51_tree=null;
|
|
+ CommonTree string_literal52_tree=null;
|
|
+ CommonTree RDELIM53_tree=null;
|
|
+ CommonTree NEWLINE54_tree=null;
|
|
+ RewriteRuleTokenStream stream_INDENT=new RewriteRuleTokenStream(adaptor,"token INDENT");
|
|
+ RewriteRuleTokenStream stream_RDELIM=new RewriteRuleTokenStream(adaptor,"token RDELIM");
|
|
+ RewriteRuleTokenStream stream_ELSEIF=new RewriteRuleTokenStream(adaptor,"token ELSEIF");
|
|
+ RewriteRuleTokenStream stream_NEWLINE=new RewriteRuleTokenStream(adaptor,"token NEWLINE");
|
|
+ RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
|
|
+ RewriteRuleTokenStream stream_ENDIF=new RewriteRuleTokenStream(adaptor,"token ENDIF");
|
|
+ RewriteRuleTokenStream stream_ELSE=new RewriteRuleTokenStream(adaptor,"token ELSE");
|
|
+ RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
|
|
+ RewriteRuleTokenStream stream_LDELIM=new RewriteRuleTokenStream(adaptor,"token LDELIM");
|
|
+ RewriteRuleTokenStream stream_IF=new RewriteRuleTokenStream(adaptor,"token IF");
|
|
+ RewriteRuleSubtreeStream stream_template=new RewriteRuleSubtreeStream(adaptor,"rule template");
|
|
+ RewriteRuleSubtreeStream stream_conditional=new RewriteRuleSubtreeStream(adaptor,"rule conditional");
|
|
+
|
|
+ Token indent=null;
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:120:2: ( (i= INDENT )? LDELIM 'if' '(' c1= conditional ')' RDELIM t1= template ( ( INDENT )? LDELIM 'elseif' '(' c2+= conditional ')' RDELIM t2+= template )* ( ( INDENT )? LDELIM 'else' RDELIM t3= template )? ( INDENT )? endif= LDELIM 'endif' RDELIM ({...}? => NEWLINE )? -> {indent!=null}? ^( INDENTED_EXPR $i ^( 'if' $c1 ( $t1)? ( ^( 'elseif' $c2 $t2) )* ( ^( 'else' ( $t3)? ) )? ) ) -> ^( 'if' $c1 ( $t1)? ( ^( 'elseif' $c2 $t2) )* ( ^( 'else' ( $t3)? ) )? ) )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:120:4: (i= INDENT )? LDELIM 'if' '(' c1= conditional ')' RDELIM t1= template ( ( INDENT )? LDELIM 'elseif' '(' c2+= conditional ')' RDELIM t2+= template )* ( ( INDENT )? LDELIM 'else' RDELIM t3= template )? ( INDENT )? endif= LDELIM 'endif' RDELIM ({...}? => NEWLINE )?
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:120:5: (i= INDENT )?
|
|
+ int alt13=2;
|
|
+ int LA13_0 = input.LA(1);
|
|
+ if ( (LA13_0==INDENT) ) {
|
|
+ alt13=1;
|
|
+ }
|
|
+ switch (alt13) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:120:5: i= INDENT
|
|
+ {
|
|
+ i=(CommonToken)match(input,INDENT,FOLLOW_INDENT_in_ifstat491);
|
|
+ stream_INDENT.add(i);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ LDELIM36=(CommonToken)match(input,LDELIM,FOLLOW_LDELIM_in_ifstat494);
|
|
+ stream_LDELIM.add(LDELIM36);
|
|
+
|
|
+ string_literal37=(CommonToken)match(input,IF,FOLLOW_IF_in_ifstat496);
|
|
+ stream_IF.add(string_literal37);
|
|
+
|
|
+ char_literal38=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_ifstat498);
|
|
+ stream_LPAREN.add(char_literal38);
|
|
+
|
|
+ pushFollow(FOLLOW_conditional_in_ifstat502);
|
|
+ c1=conditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_conditional.add(c1.getTree());
|
|
+ char_literal39=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_ifstat504);
|
|
+ stream_RPAREN.add(char_literal39);
|
|
+
|
|
+ RDELIM40=(CommonToken)match(input,RDELIM,FOLLOW_RDELIM_in_ifstat506);
|
|
+ stream_RDELIM.add(RDELIM40);
|
|
+
|
|
+ if (input.LA(1)!=NEWLINE) indent=i;
|
|
+ pushFollow(FOLLOW_template_in_ifstat515);
|
|
+ t1=template();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_template.add(t1.getTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:122:4: ( ( INDENT )? LDELIM 'elseif' '(' c2+= conditional ')' RDELIM t2+= template )*
|
|
+ loop15:
|
|
+ while (true) {
|
|
+ int alt15=2;
|
|
+ int LA15_0 = input.LA(1);
|
|
+ if ( (LA15_0==INDENT) ) {
|
|
+ int LA15_1 = input.LA(2);
|
|
+ if ( (LA15_1==LDELIM) ) {
|
|
+ int LA15_2 = input.LA(3);
|
|
+ if ( (LA15_2==ELSEIF) ) {
|
|
+ alt15=1;
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA15_0==LDELIM) ) {
|
|
+ int LA15_2 = input.LA(2);
|
|
+ if ( (LA15_2==ELSEIF) ) {
|
|
+ alt15=1;
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ switch (alt15) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:122:6: ( INDENT )? LDELIM 'elseif' '(' c2+= conditional ')' RDELIM t2+= template
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:122:6: ( INDENT )?
|
|
+ int alt14=2;
|
|
+ int LA14_0 = input.LA(1);
|
|
+ if ( (LA14_0==INDENT) ) {
|
|
+ alt14=1;
|
|
+ }
|
|
+ switch (alt14) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:122:6: INDENT
|
|
+ {
|
|
+ INDENT41=(CommonToken)match(input,INDENT,FOLLOW_INDENT_in_ifstat522);
|
|
+ stream_INDENT.add(INDENT41);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ LDELIM42=(CommonToken)match(input,LDELIM,FOLLOW_LDELIM_in_ifstat525);
|
|
+ stream_LDELIM.add(LDELIM42);
|
|
+
|
|
+ string_literal43=(CommonToken)match(input,ELSEIF,FOLLOW_ELSEIF_in_ifstat527);
|
|
+ stream_ELSEIF.add(string_literal43);
|
|
+
|
|
+ char_literal44=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_ifstat529);
|
|
+ stream_LPAREN.add(char_literal44);
|
|
+
|
|
+ pushFollow(FOLLOW_conditional_in_ifstat533);
|
|
+ c2=conditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_conditional.add(c2.getTree());
|
|
+ if (list_c2==null) list_c2=new ArrayList<Object>();
|
|
+ list_c2.add(c2.getTree());
|
|
+ char_literal45=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_ifstat535);
|
|
+ stream_RPAREN.add(char_literal45);
|
|
+
|
|
+ RDELIM46=(CommonToken)match(input,RDELIM,FOLLOW_RDELIM_in_ifstat537);
|
|
+ stream_RDELIM.add(RDELIM46);
|
|
+
|
|
+ pushFollow(FOLLOW_template_in_ifstat541);
|
|
+ t2=template();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_template.add(t2.getTree());
|
|
+ if (list_t2==null) list_t2=new ArrayList<Object>();
|
|
+ list_t2.add(t2.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop15;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:123:4: ( ( INDENT )? LDELIM 'else' RDELIM t3= template )?
|
|
+ int alt17=2;
|
|
+ int LA17_0 = input.LA(1);
|
|
+ if ( (LA17_0==INDENT) ) {
|
|
+ int LA17_1 = input.LA(2);
|
|
+ if ( (LA17_1==LDELIM) ) {
|
|
+ int LA17_2 = input.LA(3);
|
|
+ if ( (LA17_2==ELSE) ) {
|
|
+ alt17=1;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ else if ( (LA17_0==LDELIM) ) {
|
|
+ int LA17_2 = input.LA(2);
|
|
+ if ( (LA17_2==ELSE) ) {
|
|
+ alt17=1;
|
|
+ }
|
|
+ }
|
|
+ switch (alt17) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:123:6: ( INDENT )? LDELIM 'else' RDELIM t3= template
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:123:6: ( INDENT )?
|
|
+ int alt16=2;
|
|
+ int LA16_0 = input.LA(1);
|
|
+ if ( (LA16_0==INDENT) ) {
|
|
+ alt16=1;
|
|
+ }
|
|
+ switch (alt16) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:123:6: INDENT
|
|
+ {
|
|
+ INDENT47=(CommonToken)match(input,INDENT,FOLLOW_INDENT_in_ifstat551);
|
|
+ stream_INDENT.add(INDENT47);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ LDELIM48=(CommonToken)match(input,LDELIM,FOLLOW_LDELIM_in_ifstat554);
|
|
+ stream_LDELIM.add(LDELIM48);
|
|
+
|
|
+ string_literal49=(CommonToken)match(input,ELSE,FOLLOW_ELSE_in_ifstat556);
|
|
+ stream_ELSE.add(string_literal49);
|
|
+
|
|
+ RDELIM50=(CommonToken)match(input,RDELIM,FOLLOW_RDELIM_in_ifstat558);
|
|
+ stream_RDELIM.add(RDELIM50);
|
|
+
|
|
+ pushFollow(FOLLOW_template_in_ifstat562);
|
|
+ t3=template();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_template.add(t3.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:124:4: ( INDENT )?
|
|
+ int alt18=2;
|
|
+ int LA18_0 = input.LA(1);
|
|
+ if ( (LA18_0==INDENT) ) {
|
|
+ alt18=1;
|
|
+ }
|
|
+ switch (alt18) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:124:4: INDENT
|
|
+ {
|
|
+ INDENT51=(CommonToken)match(input,INDENT,FOLLOW_INDENT_in_ifstat570);
|
|
+ stream_INDENT.add(INDENT51);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ endif=(CommonToken)match(input,LDELIM,FOLLOW_LDELIM_in_ifstat576);
|
|
+ stream_LDELIM.add(endif);
|
|
+
|
|
+ string_literal52=(CommonToken)match(input,ENDIF,FOLLOW_ENDIF_in_ifstat578);
|
|
+ stream_ENDIF.add(string_literal52);
|
|
+
|
|
+ RDELIM53=(CommonToken)match(input,RDELIM,FOLLOW_RDELIM_in_ifstat582);
|
|
+ stream_RDELIM.add(RDELIM53);
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:127:3: ({...}? => NEWLINE )?
|
|
+ int alt19=2;
|
|
+ int LA19_0 = input.LA(1);
|
|
+ if ( (LA19_0==NEWLINE) ) {
|
|
+ int LA19_1 = input.LA(2);
|
|
+ if ( ((((CommonToken)retval.start).getLine()!=input.LT(1).getLine())) ) {
|
|
+ alt19=1;
|
|
+ }
|
|
+ }
|
|
+ switch (alt19) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:127:4: {...}? => NEWLINE
|
|
+ {
|
|
+ if ( !((((CommonToken)retval.start).getLine()!=input.LT(1).getLine())) ) {
|
|
+ throw new FailedPredicateException(input, "ifstat", "$ifstat.start.getLine()!=input.LT(1).getLine()");
|
|
+ }
|
|
+ NEWLINE54=(CommonToken)match(input,NEWLINE,FOLLOW_NEWLINE_in_ifstat593);
|
|
+ stream_NEWLINE.add(NEWLINE54);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ELSE, ELSE, ELSEIF, ELSEIF, IF, IF, c1, c1, c2, c2, i, t1, t1, t2, t2, t3, t3
|
|
+ // token labels: i
|
|
+ // rule labels: c1, retval, t1, t3
|
|
+ // token list labels:
|
|
+ // rule list labels: c2, t2
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleTokenStream stream_i=new RewriteRuleTokenStream(adaptor,"token i",i);
|
|
+ RewriteRuleSubtreeStream stream_c1=new RewriteRuleSubtreeStream(adaptor,"rule c1",c1!=null?c1.getTree():null);
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+ RewriteRuleSubtreeStream stream_t1=new RewriteRuleSubtreeStream(adaptor,"rule t1",t1!=null?t1.getTree():null);
|
|
+ RewriteRuleSubtreeStream stream_t3=new RewriteRuleSubtreeStream(adaptor,"rule t3",t3!=null?t3.getTree():null);
|
|
+ RewriteRuleSubtreeStream stream_c2=new RewriteRuleSubtreeStream(adaptor,"token c2",list_c2);
|
|
+ RewriteRuleSubtreeStream stream_t2=new RewriteRuleSubtreeStream(adaptor,"token t2",list_t2);
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 128:3: -> {indent!=null}? ^( INDENTED_EXPR $i ^( 'if' $c1 ( $t1)? ( ^( 'elseif' $c2 $t2) )* ( ^( 'else' ( $t3)? ) )? ) )
|
|
+ if (indent!=null) {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:129:6: ^( INDENTED_EXPR $i ^( 'if' $c1 ( $t1)? ( ^( 'elseif' $c2 $t2) )* ( ^( 'else' ( $t3)? ) )? ) )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INDENTED_EXPR, "INDENTED_EXPR"), root_1);
|
|
+ adaptor.addChild(root_1, stream_i.nextNode());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:129:25: ^( 'if' $c1 ( $t1)? ( ^( 'elseif' $c2 $t2) )* ( ^( 'else' ( $t3)? ) )? )
|
|
+ {
|
|
+ CommonTree root_2 = (CommonTree)adaptor.nil();
|
|
+ root_2 = (CommonTree)adaptor.becomeRoot(stream_IF.nextNode(), root_2);
|
|
+ adaptor.addChild(root_2, stream_c1.nextTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:129:37: ( $t1)?
|
|
+ if ( stream_t1.hasNext() ) {
|
|
+ adaptor.addChild(root_2, stream_t1.nextTree());
|
|
+ }
|
|
+ stream_t1.reset();
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:129:41: ( ^( 'elseif' $c2 $t2) )*
|
|
+ while ( stream_ELSEIF.hasNext()||stream_c2.hasNext()||stream_t2.hasNext() ) {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:129:41: ^( 'elseif' $c2 $t2)
|
|
+ {
|
|
+ CommonTree root_3 = (CommonTree)adaptor.nil();
|
|
+ root_3 = (CommonTree)adaptor.becomeRoot(stream_ELSEIF.nextNode(), root_3);
|
|
+ adaptor.addChild(root_3, stream_c2.nextTree());
|
|
+ adaptor.addChild(root_3, stream_t2.nextTree());
|
|
+ adaptor.addChild(root_2, root_3);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ stream_ELSEIF.reset();
|
|
+ stream_c2.reset();
|
|
+ stream_t2.reset();
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:129:62: ( ^( 'else' ( $t3)? ) )?
|
|
+ if ( stream_ELSE.hasNext()||stream_t3.hasNext() ) {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:129:62: ^( 'else' ( $t3)? )
|
|
+ {
|
|
+ CommonTree root_3 = (CommonTree)adaptor.nil();
|
|
+ root_3 = (CommonTree)adaptor.becomeRoot(stream_ELSE.nextNode(), root_3);
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:129:72: ( $t3)?
|
|
+ if ( stream_t3.hasNext() ) {
|
|
+ adaptor.addChild(root_3, stream_t3.nextTree());
|
|
+ }
|
|
+ stream_t3.reset();
|
|
+
|
|
+ adaptor.addChild(root_2, root_3);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ stream_ELSE.reset();
|
|
+ stream_t3.reset();
|
|
+
|
|
+ adaptor.addChild(root_1, root_2);
|
|
+ }
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else // 130:3: -> ^( 'if' $c1 ( $t1)? ( ^( 'elseif' $c2 $t2) )* ( ^( 'else' ( $t3)? ) )? )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:130:25: ^( 'if' $c1 ( $t1)? ( ^( 'elseif' $c2 $t2) )* ( ^( 'else' ( $t3)? ) )? )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot(stream_IF.nextNode(), root_1);
|
|
+ adaptor.addChild(root_1, stream_c1.nextTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:130:37: ( $t1)?
|
|
+ if ( stream_t1.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_t1.nextTree());
|
|
+ }
|
|
+ stream_t1.reset();
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:130:41: ( ^( 'elseif' $c2 $t2) )*
|
|
+ while ( stream_ELSEIF.hasNext()||stream_c2.hasNext()||stream_t2.hasNext() ) {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:130:41: ^( 'elseif' $c2 $t2)
|
|
+ {
|
|
+ CommonTree root_2 = (CommonTree)adaptor.nil();
|
|
+ root_2 = (CommonTree)adaptor.becomeRoot(stream_ELSEIF.nextNode(), root_2);
|
|
+ adaptor.addChild(root_2, stream_c2.nextTree());
|
|
+ adaptor.addChild(root_2, stream_t2.nextTree());
|
|
+ adaptor.addChild(root_1, root_2);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ stream_ELSEIF.reset();
|
|
+ stream_c2.reset();
|
|
+ stream_t2.reset();
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:130:62: ( ^( 'else' ( $t3)? ) )?
|
|
+ if ( stream_ELSE.hasNext()||stream_t3.hasNext() ) {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:130:62: ^( 'else' ( $t3)? )
|
|
+ {
|
|
+ CommonTree root_2 = (CommonTree)adaptor.nil();
|
|
+ root_2 = (CommonTree)adaptor.becomeRoot(stream_ELSE.nextNode(), root_2);
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:130:72: ( $t3)?
|
|
+ if ( stream_t3.hasNext() ) {
|
|
+ adaptor.addChild(root_2, stream_t3.nextTree());
|
|
+ }
|
|
+ stream_t3.reset();
|
|
+
|
|
+ adaptor.addChild(root_1, root_2);
|
|
+ }
|
|
+
|
|
+ }
|
|
+ stream_ELSE.reset();
|
|
+ stream_t3.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "ifstat"
|
|
+
|
|
+
|
|
+ protected static class conditional_scope {
|
|
+ boolean inside;
|
|
+ }
|
|
+ protected Stack<conditional_scope> conditional_stack = new Stack<conditional_scope>();
|
|
+
|
|
+ public static class conditional_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "conditional"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:133:1: conditional : andConditional ( '||' ^ andConditional )* ;
|
|
+ public final STParser.conditional_return conditional() throws RecognitionException {
|
|
+ conditional_stack.push(new conditional_scope());
|
|
+ STParser.conditional_return retval = new STParser.conditional_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken string_literal56=null;
|
|
+ ParserRuleReturnScope andConditional55 =null;
|
|
+ ParserRuleReturnScope andConditional57 =null;
|
|
+
|
|
+ CommonTree string_literal56_tree=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:137:2: ( andConditional ( '||' ^ andConditional )* )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:137:4: andConditional ( '||' ^ andConditional )*
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_andConditional_in_conditional713);
|
|
+ andConditional55=andConditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, andConditional55.getTree());
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:137:19: ( '||' ^ andConditional )*
|
|
+ loop20:
|
|
+ while (true) {
|
|
+ int alt20=2;
|
|
+ int LA20_0 = input.LA(1);
|
|
+ if ( (LA20_0==OR) ) {
|
|
+ alt20=1;
|
|
+ }
|
|
+
|
|
+ switch (alt20) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:137:21: '||' ^ andConditional
|
|
+ {
|
|
+ string_literal56=(CommonToken)match(input,OR,FOLLOW_OR_in_conditional717);
|
|
+ string_literal56_tree = (CommonTree)adaptor.create(string_literal56);
|
|
+ root_0 = (CommonTree)adaptor.becomeRoot(string_literal56_tree, root_0);
|
|
+
|
|
+ pushFollow(FOLLOW_andConditional_in_conditional720);
|
|
+ andConditional57=andConditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, andConditional57.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop20;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ conditional_stack.pop();
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "conditional"
|
|
+
|
|
+
|
|
+ public static class andConditional_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "andConditional"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:140:1: andConditional : notConditional ( '&&' ^ notConditional )* ;
|
|
+ public final STParser.andConditional_return andConditional() throws RecognitionException {
|
|
+ STParser.andConditional_return retval = new STParser.andConditional_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken string_literal59=null;
|
|
+ ParserRuleReturnScope notConditional58 =null;
|
|
+ ParserRuleReturnScope notConditional60 =null;
|
|
+
|
|
+ CommonTree string_literal59_tree=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:140:16: ( notConditional ( '&&' ^ notConditional )* )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:140:18: notConditional ( '&&' ^ notConditional )*
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_notConditional_in_andConditional733);
|
|
+ notConditional58=notConditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, notConditional58.getTree());
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:140:33: ( '&&' ^ notConditional )*
|
|
+ loop21:
|
|
+ while (true) {
|
|
+ int alt21=2;
|
|
+ int LA21_0 = input.LA(1);
|
|
+ if ( (LA21_0==AND) ) {
|
|
+ alt21=1;
|
|
+ }
|
|
+
|
|
+ switch (alt21) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:140:35: '&&' ^ notConditional
|
|
+ {
|
|
+ string_literal59=(CommonToken)match(input,AND,FOLLOW_AND_in_andConditional737);
|
|
+ string_literal59_tree = (CommonTree)adaptor.create(string_literal59);
|
|
+ root_0 = (CommonTree)adaptor.becomeRoot(string_literal59_tree, root_0);
|
|
+
|
|
+ pushFollow(FOLLOW_notConditional_in_andConditional740);
|
|
+ notConditional60=notConditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, notConditional60.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop21;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "andConditional"
|
|
+
|
|
+
|
|
+ public static class notConditional_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "notConditional"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:142:1: notConditional : ( '!' ^ notConditional | memberExpr );
|
|
+ public final STParser.notConditional_return notConditional() throws RecognitionException {
|
|
+ STParser.notConditional_return retval = new STParser.notConditional_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken char_literal61=null;
|
|
+ ParserRuleReturnScope notConditional62 =null;
|
|
+ ParserRuleReturnScope memberExpr63 =null;
|
|
+
|
|
+ CommonTree char_literal61_tree=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:143:2: ( '!' ^ notConditional | memberExpr )
|
|
+ int alt22=2;
|
|
+ int LA22_0 = input.LA(1);
|
|
+ if ( (LA22_0==BANG) ) {
|
|
+ alt22=1;
|
|
+ }
|
|
+ else if ( (LA22_0==SUPER||LA22_0==LBRACK||LA22_0==LCURLY||(LA22_0 >= ID && LA22_0 <= STRING)||LA22_0==AT||(LA22_0 >= TRUE && LA22_0 <= FALSE)||LA22_0==SLASH) ) {
|
|
+ alt22=2;
|
|
+ }
|
|
+ else if ( (LA22_0==LPAREN) && (((conditional_stack.size()>0)||(conditional_stack.size()==0)))) {
|
|
+ alt22=2;
|
|
+ }
|
|
+
|
|
+ switch (alt22) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:143:4: '!' ^ notConditional
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ char_literal61=(CommonToken)match(input,BANG,FOLLOW_BANG_in_notConditional753);
|
|
+ char_literal61_tree = (CommonTree)adaptor.create(char_literal61);
|
|
+ root_0 = (CommonTree)adaptor.becomeRoot(char_literal61_tree, root_0);
|
|
+
|
|
+ pushFollow(FOLLOW_notConditional_in_notConditional756);
|
|
+ notConditional62=notConditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, notConditional62.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:144:4: memberExpr
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_memberExpr_in_notConditional761);
|
|
+ memberExpr63=memberExpr();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, memberExpr63.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "notConditional"
|
|
+
|
|
+
|
|
+ public static class notConditionalExpr_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "notConditionalExpr"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:147:1: notConditionalExpr : ( ID -> ID ) (p= '.' prop= ID -> ^( PROP[$p,\"PROP\"] $notConditionalExpr $prop) |p= '.' '(' mapExpr ')' -> ^( PROP_IND[$p,\"PROP_IND\"] $notConditionalExpr mapExpr ) )* ;
|
|
+ public final STParser.notConditionalExpr_return notConditionalExpr() throws RecognitionException {
|
|
+ STParser.notConditionalExpr_return retval = new STParser.notConditionalExpr_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken p=null;
|
|
+ CommonToken prop=null;
|
|
+ CommonToken ID64=null;
|
|
+ CommonToken char_literal65=null;
|
|
+ CommonToken char_literal67=null;
|
|
+ ParserRuleReturnScope mapExpr66 =null;
|
|
+
|
|
+ CommonTree p_tree=null;
|
|
+ CommonTree prop_tree=null;
|
|
+ CommonTree ID64_tree=null;
|
|
+ CommonTree char_literal65_tree=null;
|
|
+ CommonTree char_literal67_tree=null;
|
|
+ RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
|
|
+ RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
|
|
+ RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
|
|
+ RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
|
|
+ RewriteRuleSubtreeStream stream_mapExpr=new RewriteRuleSubtreeStream(adaptor,"rule mapExpr");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:148:2: ( ( ID -> ID ) (p= '.' prop= ID -> ^( PROP[$p,\"PROP\"] $notConditionalExpr $prop) |p= '.' '(' mapExpr ')' -> ^( PROP_IND[$p,\"PROP_IND\"] $notConditionalExpr mapExpr ) )* )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:148:4: ( ID -> ID ) (p= '.' prop= ID -> ^( PROP[$p,\"PROP\"] $notConditionalExpr $prop) |p= '.' '(' mapExpr ')' -> ^( PROP_IND[$p,\"PROP_IND\"] $notConditionalExpr mapExpr ) )*
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:148:4: ( ID -> ID )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:148:5: ID
|
|
+ {
|
|
+ ID64=(CommonToken)match(input,ID,FOLLOW_ID_in_notConditionalExpr773);
|
|
+ stream_ID.add(ID64);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ID
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 148:7: -> ID
|
|
+ {
|
|
+ adaptor.addChild(root_0, stream_ID.nextNode());
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:149:3: (p= '.' prop= ID -> ^( PROP[$p,\"PROP\"] $notConditionalExpr $prop) |p= '.' '(' mapExpr ')' -> ^( PROP_IND[$p,\"PROP_IND\"] $notConditionalExpr mapExpr ) )*
|
|
+ loop23:
|
|
+ while (true) {
|
|
+ int alt23=3;
|
|
+ int LA23_0 = input.LA(1);
|
|
+ if ( (LA23_0==DOT) ) {
|
|
+ int LA23_2 = input.LA(2);
|
|
+ if ( (LA23_2==ID) ) {
|
|
+ alt23=1;
|
|
+ }
|
|
+ else if ( (LA23_2==LPAREN) ) {
|
|
+ alt23=2;
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ switch (alt23) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:149:5: p= '.' prop= ID
|
|
+ {
|
|
+ p=(CommonToken)match(input,DOT,FOLLOW_DOT_in_notConditionalExpr784);
|
|
+ stream_DOT.add(p);
|
|
+
|
|
+ prop=(CommonToken)match(input,ID,FOLLOW_ID_in_notConditionalExpr788);
|
|
+ stream_ID.add(prop);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: notConditionalExpr, prop
|
|
+ // token labels: prop
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleTokenStream stream_prop=new RewriteRuleTokenStream(adaptor,"token prop",prop);
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 149:24: -> ^( PROP[$p,\"PROP\"] $notConditionalExpr $prop)
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:149:27: ^( PROP[$p,\"PROP\"] $notConditionalExpr $prop)
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(PROP, p, "PROP"), root_1);
|
|
+ adaptor.addChild(root_1, stream_retval.nextTree());
|
|
+ adaptor.addChild(root_1, stream_prop.nextNode());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:150:5: p= '.' '(' mapExpr ')'
|
|
+ {
|
|
+ p=(CommonToken)match(input,DOT,FOLLOW_DOT_in_notConditionalExpr814);
|
|
+ stream_DOT.add(p);
|
|
+
|
|
+ char_literal65=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_notConditionalExpr816);
|
|
+ stream_LPAREN.add(char_literal65);
|
|
+
|
|
+ pushFollow(FOLLOW_mapExpr_in_notConditionalExpr818);
|
|
+ mapExpr66=mapExpr();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_mapExpr.add(mapExpr66.getTree());
|
|
+ char_literal67=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_notConditionalExpr820);
|
|
+ stream_RPAREN.add(char_literal67);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: mapExpr, notConditionalExpr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 150:30: -> ^( PROP_IND[$p,\"PROP_IND\"] $notConditionalExpr mapExpr )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:150:33: ^( PROP_IND[$p,\"PROP_IND\"] $notConditionalExpr mapExpr )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(PROP_IND, p, "PROP_IND"), root_1);
|
|
+ adaptor.addChild(root_1, stream_retval.nextTree());
|
|
+ adaptor.addChild(root_1, stream_mapExpr.nextTree());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop23;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "notConditionalExpr"
|
|
+
|
|
+
|
|
+ public static class exprOptions_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "exprOptions"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:154:1: exprOptions : option ( ',' option )* -> ^( OPTIONS ( option )* ) ;
|
|
+ public final STParser.exprOptions_return exprOptions() throws RecognitionException {
|
|
+ STParser.exprOptions_return retval = new STParser.exprOptions_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken char_literal69=null;
|
|
+ ParserRuleReturnScope option68 =null;
|
|
+ ParserRuleReturnScope option70 =null;
|
|
+
|
|
+ CommonTree char_literal69_tree=null;
|
|
+ RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
|
|
+ RewriteRuleSubtreeStream stream_option=new RewriteRuleSubtreeStream(adaptor,"rule option");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:154:13: ( option ( ',' option )* -> ^( OPTIONS ( option )* ) )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:154:15: option ( ',' option )*
|
|
+ {
|
|
+ pushFollow(FOLLOW_option_in_exprOptions850);
|
|
+ option68=option();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_option.add(option68.getTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:154:22: ( ',' option )*
|
|
+ loop24:
|
|
+ while (true) {
|
|
+ int alt24=2;
|
|
+ int LA24_0 = input.LA(1);
|
|
+ if ( (LA24_0==COMMA) ) {
|
|
+ alt24=1;
|
|
+ }
|
|
+
|
|
+ switch (alt24) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:154:24: ',' option
|
|
+ {
|
|
+ char_literal69=(CommonToken)match(input,COMMA,FOLLOW_COMMA_in_exprOptions854);
|
|
+ stream_COMMA.add(char_literal69);
|
|
+
|
|
+ pushFollow(FOLLOW_option_in_exprOptions856);
|
|
+ option70=option();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_option.add(option70.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop24;
|
|
+ }
|
|
+ }
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: option
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 154:38: -> ^( OPTIONS ( option )* )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:154:41: ^( OPTIONS ( option )* )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(OPTIONS, "OPTIONS"), root_1);
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:154:51: ( option )*
|
|
+ while ( stream_option.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_option.nextTree());
|
|
+ }
|
|
+ stream_option.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "exprOptions"
|
|
+
|
|
+
|
|
+ public static class option_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "option"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:156:1: option : ID ( '=' exprNoComma -> {validOption}? ^( '=' ID exprNoComma ) ->| -> {validOption&&defVal!=null}? ^( EQUALS[\"=\"] ID STRING[$ID,'\"'+defVal+'\"'] ) ->) ;
|
|
+ public final STParser.option_return option() throws RecognitionException {
|
|
+ STParser.option_return retval = new STParser.option_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken ID71=null;
|
|
+ CommonToken char_literal72=null;
|
|
+ ParserRuleReturnScope exprNoComma73 =null;
|
|
+
|
|
+ CommonTree ID71_tree=null;
|
|
+ CommonTree char_literal72_tree=null;
|
|
+ RewriteRuleTokenStream stream_EQUALS=new RewriteRuleTokenStream(adaptor,"token EQUALS");
|
|
+ RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
|
|
+ RewriteRuleSubtreeStream stream_exprNoComma=new RewriteRuleSubtreeStream(adaptor,"rule exprNoComma");
|
|
+
|
|
+
|
|
+ String id = input.LT(1).getText();
|
|
+ String defVal = Compiler.defaultOptionValues.get(id);
|
|
+ boolean validOption = Compiler.supportedOptions.get(id)!=null;
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:162:2: ( ID ( '=' exprNoComma -> {validOption}? ^( '=' ID exprNoComma ) ->| -> {validOption&&defVal!=null}? ^( EQUALS[\"=\"] ID STRING[$ID,'\"'+defVal+'\"'] ) ->) )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:162:4: ID ( '=' exprNoComma -> {validOption}? ^( '=' ID exprNoComma ) ->| -> {validOption&&defVal!=null}? ^( EQUALS[\"=\"] ID STRING[$ID,'\"'+defVal+'\"'] ) ->)
|
|
+ {
|
|
+ ID71=(CommonToken)match(input,ID,FOLLOW_ID_in_option883);
|
|
+ stream_ID.add(ID71);
|
|
+
|
|
+
|
|
+ if ( !validOption ) {
|
|
+ errMgr.compileTimeError(ErrorType.NO_SUCH_OPTION, templateToken, ID71, (ID71!=null?ID71.getText():null));
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:168:3: ( '=' exprNoComma -> {validOption}? ^( '=' ID exprNoComma ) ->| -> {validOption&&defVal!=null}? ^( EQUALS[\"=\"] ID STRING[$ID,'\"'+defVal+'\"'] ) ->)
|
|
+ int alt25=2;
|
|
+ int LA25_0 = input.LA(1);
|
|
+ if ( (LA25_0==EQUALS) ) {
|
|
+ alt25=1;
|
|
+ }
|
|
+ else if ( (LA25_0==COMMA||LA25_0==RDELIM) ) {
|
|
+ alt25=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 25, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt25) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:168:5: '=' exprNoComma
|
|
+ {
|
|
+ char_literal72=(CommonToken)match(input,EQUALS,FOLLOW_EQUALS_in_option893);
|
|
+ stream_EQUALS.add(char_literal72);
|
|
+
|
|
+ pushFollow(FOLLOW_exprNoComma_in_option895);
|
|
+ exprNoComma73=exprNoComma();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_exprNoComma.add(exprNoComma73.getTree());
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: EQUALS, ID, exprNoComma
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 168:26: -> {validOption}? ^( '=' ID exprNoComma )
|
|
+ if (validOption) {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:168:44: ^( '=' ID exprNoComma )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot(stream_EQUALS.nextNode(), root_1);
|
|
+ adaptor.addChild(root_1, stream_ID.nextNode());
|
|
+ adaptor.addChild(root_1, stream_exprNoComma.nextTree());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else // 169:13: ->
|
|
+ {
|
|
+ root_0 = null;
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:170:5:
|
|
+ {
|
|
+
|
|
+ if ( defVal==null ) {
|
|
+ errMgr.compileTimeError(ErrorType.NO_DEFAULT_VALUE, templateToken, ID71);
|
|
+ }
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ID
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 175:13: -> {validOption&&defVal!=null}? ^( EQUALS[\"=\"] ID STRING[$ID,'\"'+defVal+'\"'] )
|
|
+ if (validOption&&defVal!=null) {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:176:16: ^( EQUALS[\"=\"] ID STRING[$ID,'\"'+defVal+'\"'] )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(EQUALS, "="), root_1);
|
|
+ adaptor.addChild(root_1, stream_ID.nextNode());
|
|
+ adaptor.addChild(root_1, (CommonTree)adaptor.create(STRING, ID71, '"'+defVal+'"'));
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else // 177:13: ->
|
|
+ {
|
|
+ root_0 = null;
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "option"
|
|
+
|
|
+
|
|
+ public static class exprNoComma_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "exprNoComma"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:181:1: exprNoComma : memberExpr ( ':' mapTemplateRef -> ^( MAP memberExpr mapTemplateRef ) | -> memberExpr ) ;
|
|
+ public final STParser.exprNoComma_return exprNoComma() throws RecognitionException {
|
|
+ STParser.exprNoComma_return retval = new STParser.exprNoComma_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken char_literal75=null;
|
|
+ ParserRuleReturnScope memberExpr74 =null;
|
|
+ ParserRuleReturnScope mapTemplateRef76 =null;
|
|
+
|
|
+ CommonTree char_literal75_tree=null;
|
|
+ RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
|
|
+ RewriteRuleSubtreeStream stream_memberExpr=new RewriteRuleSubtreeStream(adaptor,"rule memberExpr");
|
|
+ RewriteRuleSubtreeStream stream_mapTemplateRef=new RewriteRuleSubtreeStream(adaptor,"rule mapTemplateRef");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:182:2: ( memberExpr ( ':' mapTemplateRef -> ^( MAP memberExpr mapTemplateRef ) | -> memberExpr ) )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:182:4: memberExpr ( ':' mapTemplateRef -> ^( MAP memberExpr mapTemplateRef ) | -> memberExpr )
|
|
+ {
|
|
+ pushFollow(FOLLOW_memberExpr_in_exprNoComma1002);
|
|
+ memberExpr74=memberExpr();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_memberExpr.add(memberExpr74.getTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:183:3: ( ':' mapTemplateRef -> ^( MAP memberExpr mapTemplateRef ) | -> memberExpr )
|
|
+ int alt26=2;
|
|
+ int LA26_0 = input.LA(1);
|
|
+ if ( (LA26_0==COLON) ) {
|
|
+ alt26=1;
|
|
+ }
|
|
+ else if ( (LA26_0==RPAREN||(LA26_0 >= RBRACK && LA26_0 <= COMMA)||LA26_0==RDELIM) ) {
|
|
+ alt26=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 26, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt26) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:183:5: ':' mapTemplateRef
|
|
+ {
|
|
+ char_literal75=(CommonToken)match(input,COLON,FOLLOW_COLON_in_exprNoComma1008);
|
|
+ stream_COLON.add(char_literal75);
|
|
+
|
|
+ pushFollow(FOLLOW_mapTemplateRef_in_exprNoComma1010);
|
|
+ mapTemplateRef76=mapTemplateRef();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_mapTemplateRef.add(mapTemplateRef76.getTree());
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: mapTemplateRef, memberExpr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 183:28: -> ^( MAP memberExpr mapTemplateRef )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:183:31: ^( MAP memberExpr mapTemplateRef )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(MAP, "MAP"), root_1);
|
|
+ adaptor.addChild(root_1, stream_memberExpr.nextTree());
|
|
+ adaptor.addChild(root_1, stream_mapTemplateRef.nextTree());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:184:14:
|
|
+ {
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: memberExpr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 184:14: -> memberExpr
|
|
+ {
|
|
+ adaptor.addChild(root_0, stream_memberExpr.nextTree());
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "exprNoComma"
|
|
+
|
|
+
|
|
+ public static class expr_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "expr"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:188:1: expr : mapExpr ;
|
|
+ public final STParser.expr_return expr() throws RecognitionException {
|
|
+ STParser.expr_return retval = new STParser.expr_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ ParserRuleReturnScope mapExpr77 =null;
|
|
+
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:188:6: ( mapExpr )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:188:8: mapExpr
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_mapExpr_in_expr1055);
|
|
+ mapExpr77=mapExpr();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, mapExpr77.getTree());
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "expr"
|
|
+
|
|
+
|
|
+ public static class mapExpr_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "mapExpr"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:192:1: mapExpr : memberExpr ( (c= ',' memberExpr )+ col= ':' mapTemplateRef -> ^( ZIP[$col] ^( ELEMENTS ( memberExpr )+ ) mapTemplateRef ) | -> memberExpr ) (col= ':' x+= mapTemplateRef ({...}? => ',' x+= mapTemplateRef )* -> ^( MAP[$col] $mapExpr ( $x)+ ) )* ;
|
|
+ public final STParser.mapExpr_return mapExpr() throws RecognitionException {
|
|
+ STParser.mapExpr_return retval = new STParser.mapExpr_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken c=null;
|
|
+ CommonToken col=null;
|
|
+ CommonToken char_literal81=null;
|
|
+ List<Object> list_x=null;
|
|
+ ParserRuleReturnScope memberExpr78 =null;
|
|
+ ParserRuleReturnScope memberExpr79 =null;
|
|
+ ParserRuleReturnScope mapTemplateRef80 =null;
|
|
+ RuleReturnScope x = null;
|
|
+ CommonTree c_tree=null;
|
|
+ CommonTree col_tree=null;
|
|
+ CommonTree char_literal81_tree=null;
|
|
+ RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
|
|
+ RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
|
|
+ RewriteRuleSubtreeStream stream_memberExpr=new RewriteRuleSubtreeStream(adaptor,"rule memberExpr");
|
|
+ RewriteRuleSubtreeStream stream_mapTemplateRef=new RewriteRuleSubtreeStream(adaptor,"rule mapTemplateRef");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:193:2: ( memberExpr ( (c= ',' memberExpr )+ col= ':' mapTemplateRef -> ^( ZIP[$col] ^( ELEMENTS ( memberExpr )+ ) mapTemplateRef ) | -> memberExpr ) (col= ':' x+= mapTemplateRef ({...}? => ',' x+= mapTemplateRef )* -> ^( MAP[$col] $mapExpr ( $x)+ ) )* )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:193:4: memberExpr ( (c= ',' memberExpr )+ col= ':' mapTemplateRef -> ^( ZIP[$col] ^( ELEMENTS ( memberExpr )+ ) mapTemplateRef ) | -> memberExpr ) (col= ':' x+= mapTemplateRef ({...}? => ',' x+= mapTemplateRef )* -> ^( MAP[$col] $mapExpr ( $x)+ ) )*
|
|
+ {
|
|
+ pushFollow(FOLLOW_memberExpr_in_mapExpr1067);
|
|
+ memberExpr78=memberExpr();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_memberExpr.add(memberExpr78.getTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:194:3: ( (c= ',' memberExpr )+ col= ':' mapTemplateRef -> ^( ZIP[$col] ^( ELEMENTS ( memberExpr )+ ) mapTemplateRef ) | -> memberExpr )
|
|
+ int alt28=2;
|
|
+ int LA28_0 = input.LA(1);
|
|
+ if ( (LA28_0==COMMA) ) {
|
|
+ alt28=1;
|
|
+ }
|
|
+ else if ( (LA28_0==SEMI||LA28_0==COLON||LA28_0==RPAREN||LA28_0==RDELIM) ) {
|
|
+ alt28=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 28, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt28) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:194:5: (c= ',' memberExpr )+ col= ':' mapTemplateRef
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:194:5: (c= ',' memberExpr )+
|
|
+ int cnt27=0;
|
|
+ loop27:
|
|
+ while (true) {
|
|
+ int alt27=2;
|
|
+ int LA27_0 = input.LA(1);
|
|
+ if ( (LA27_0==COMMA) ) {
|
|
+ alt27=1;
|
|
+ }
|
|
+
|
|
+ switch (alt27) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:194:6: c= ',' memberExpr
|
|
+ {
|
|
+ c=(CommonToken)match(input,COMMA,FOLLOW_COMMA_in_mapExpr1076);
|
|
+ stream_COMMA.add(c);
|
|
+
|
|
+ pushFollow(FOLLOW_memberExpr_in_mapExpr1078);
|
|
+ memberExpr79=memberExpr();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_memberExpr.add(memberExpr79.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ if ( cnt27 >= 1 ) break loop27;
|
|
+ EarlyExitException eee = new EarlyExitException(27, input);
|
|
+ throw eee;
|
|
+ }
|
|
+ cnt27++;
|
|
+ }
|
|
+
|
|
+ col=(CommonToken)match(input,COLON,FOLLOW_COLON_in_mapExpr1084);
|
|
+ stream_COLON.add(col);
|
|
+
|
|
+ pushFollow(FOLLOW_mapTemplateRef_in_mapExpr1086);
|
|
+ mapTemplateRef80=mapTemplateRef();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_mapTemplateRef.add(mapTemplateRef80.getTree());
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: mapTemplateRef, memberExpr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 195:13: -> ^( ZIP[$col] ^( ELEMENTS ( memberExpr )+ ) mapTemplateRef )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:195:16: ^( ZIP[$col] ^( ELEMENTS ( memberExpr )+ ) mapTemplateRef )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ZIP, col), root_1);
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:195:28: ^( ELEMENTS ( memberExpr )+ )
|
|
+ {
|
|
+ CommonTree root_2 = (CommonTree)adaptor.nil();
|
|
+ root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ELEMENTS, "ELEMENTS"), root_2);
|
|
+ if ( !(stream_memberExpr.hasNext()) ) {
|
|
+ throw new RewriteEarlyExitException();
|
|
+ }
|
|
+ while ( stream_memberExpr.hasNext() ) {
|
|
+ adaptor.addChild(root_2, stream_memberExpr.nextTree());
|
|
+ }
|
|
+ stream_memberExpr.reset();
|
|
+
|
|
+ adaptor.addChild(root_1, root_2);
|
|
+ }
|
|
+
|
|
+ adaptor.addChild(root_1, stream_mapTemplateRef.nextTree());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:196:14:
|
|
+ {
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: memberExpr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 196:14: -> memberExpr
|
|
+ {
|
|
+ adaptor.addChild(root_0, stream_memberExpr.nextTree());
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:198:3: (col= ':' x+= mapTemplateRef ({...}? => ',' x+= mapTemplateRef )* -> ^( MAP[$col] $mapExpr ( $x)+ ) )*
|
|
+ loop30:
|
|
+ while (true) {
|
|
+ int alt30=2;
|
|
+ int LA30_0 = input.LA(1);
|
|
+ if ( (LA30_0==COLON) ) {
|
|
+ alt30=1;
|
|
+ }
|
|
+
|
|
+ switch (alt30) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:198:5: col= ':' x+= mapTemplateRef ({...}? => ',' x+= mapTemplateRef )*
|
|
+ {
|
|
+ if (list_x!=null) list_x.clear();
|
|
+ col=(CommonToken)match(input,COLON,FOLLOW_COLON_in_mapExpr1149);
|
|
+ stream_COLON.add(col);
|
|
+
|
|
+ pushFollow(FOLLOW_mapTemplateRef_in_mapExpr1153);
|
|
+ x=mapTemplateRef();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_mapTemplateRef.add(x.getTree());
|
|
+ if (list_x==null) list_x=new ArrayList<Object>();
|
|
+ list_x.add(x.getTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:199:30: ({...}? => ',' x+= mapTemplateRef )*
|
|
+ loop29:
|
|
+ while (true) {
|
|
+ int alt29=2;
|
|
+ int LA29_0 = input.LA(1);
|
|
+ if ( (LA29_0==COMMA) && ((c==null))) {
|
|
+ alt29=1;
|
|
+ }
|
|
+
|
|
+ switch (alt29) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:199:31: {...}? => ',' x+= mapTemplateRef
|
|
+ {
|
|
+ if ( !((c==null)) ) {
|
|
+ throw new FailedPredicateException(input, "mapExpr", "$c==null");
|
|
+ }
|
|
+ char_literal81=(CommonToken)match(input,COMMA,FOLLOW_COMMA_in_mapExpr1159);
|
|
+ stream_COMMA.add(char_literal81);
|
|
+
|
|
+ pushFollow(FOLLOW_mapTemplateRef_in_mapExpr1163);
|
|
+ x=mapTemplateRef();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_mapTemplateRef.add(x.getTree());
|
|
+ if (list_x==null) list_x=new ArrayList<Object>();
|
|
+ list_x.add(x.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop29;
|
|
+ }
|
|
+ }
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: mapExpr, x
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels: x
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+ RewriteRuleSubtreeStream stream_x=new RewriteRuleSubtreeStream(adaptor,"token x",list_x);
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 200:13: -> ^( MAP[$col] $mapExpr ( $x)+ )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:200:16: ^( MAP[$col] $mapExpr ( $x)+ )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(MAP, col), root_1);
|
|
+ adaptor.addChild(root_1, stream_retval.nextTree());
|
|
+ if ( !(stream_x.hasNext()) ) {
|
|
+ throw new RewriteEarlyExitException();
|
|
+ }
|
|
+ while ( stream_x.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_x.nextTree());
|
|
+ }
|
|
+ stream_x.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop30;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "mapExpr"
|
|
+
|
|
+
|
|
+ public static class mapTemplateRef_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "mapTemplateRef"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:209:1: mapTemplateRef : ( qualifiedId '(' args ')' -> ^( INCLUDE qualifiedId ( args )? ) | subtemplate |lp= '(' mapExpr rp= ')' '(' ( argExprList )? ')' -> ^( INCLUDE_IND mapExpr ( argExprList )? ) );
|
|
+ public final STParser.mapTemplateRef_return mapTemplateRef() throws RecognitionException {
|
|
+ STParser.mapTemplateRef_return retval = new STParser.mapTemplateRef_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken lp=null;
|
|
+ CommonToken rp=null;
|
|
+ CommonToken char_literal83=null;
|
|
+ CommonToken char_literal85=null;
|
|
+ CommonToken char_literal88=null;
|
|
+ CommonToken char_literal90=null;
|
|
+ ParserRuleReturnScope qualifiedId82 =null;
|
|
+ ParserRuleReturnScope args84 =null;
|
|
+ ParserRuleReturnScope subtemplate86 =null;
|
|
+ ParserRuleReturnScope mapExpr87 =null;
|
|
+ ParserRuleReturnScope argExprList89 =null;
|
|
+
|
|
+ CommonTree lp_tree=null;
|
|
+ CommonTree rp_tree=null;
|
|
+ CommonTree char_literal83_tree=null;
|
|
+ CommonTree char_literal85_tree=null;
|
|
+ CommonTree char_literal88_tree=null;
|
|
+ CommonTree char_literal90_tree=null;
|
|
+ RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
|
|
+ RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
|
|
+ RewriteRuleSubtreeStream stream_args=new RewriteRuleSubtreeStream(adaptor,"rule args");
|
|
+ RewriteRuleSubtreeStream stream_argExprList=new RewriteRuleSubtreeStream(adaptor,"rule argExprList");
|
|
+ RewriteRuleSubtreeStream stream_qualifiedId=new RewriteRuleSubtreeStream(adaptor,"rule qualifiedId");
|
|
+ RewriteRuleSubtreeStream stream_mapExpr=new RewriteRuleSubtreeStream(adaptor,"rule mapExpr");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:210:2: ( qualifiedId '(' args ')' -> ^( INCLUDE qualifiedId ( args )? ) | subtemplate |lp= '(' mapExpr rp= ')' '(' ( argExprList )? ')' -> ^( INCLUDE_IND mapExpr ( argExprList )? ) )
|
|
+ int alt32=3;
|
|
+ switch ( input.LA(1) ) {
|
|
+ case ID:
|
|
+ case SLASH:
|
|
+ {
|
|
+ alt32=1;
|
|
+ }
|
|
+ break;
|
|
+ case LCURLY:
|
|
+ {
|
|
+ alt32=2;
|
|
+ }
|
|
+ break;
|
|
+ case LPAREN:
|
|
+ {
|
|
+ alt32=3;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 32, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+ switch (alt32) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:210:4: qualifiedId '(' args ')'
|
|
+ {
|
|
+ pushFollow(FOLLOW_qualifiedId_in_mapTemplateRef1210);
|
|
+ qualifiedId82=qualifiedId();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_qualifiedId.add(qualifiedId82.getTree());
|
|
+ char_literal83=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_mapTemplateRef1212);
|
|
+ stream_LPAREN.add(char_literal83);
|
|
+
|
|
+ pushFollow(FOLLOW_args_in_mapTemplateRef1214);
|
|
+ args84=args();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_args.add(args84.getTree());
|
|
+ char_literal85=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_mapTemplateRef1216);
|
|
+ stream_RPAREN.add(char_literal85);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: args, qualifiedId
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 210:35: -> ^( INCLUDE qualifiedId ( args )? )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:210:38: ^( INCLUDE qualifiedId ( args )? )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INCLUDE, "INCLUDE"), root_1);
|
|
+ adaptor.addChild(root_1, stream_qualifiedId.nextTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:210:60: ( args )?
|
|
+ if ( stream_args.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_args.nextTree());
|
|
+ }
|
|
+ stream_args.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:211:4: subtemplate
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_subtemplate_in_mapTemplateRef1238);
|
|
+ subtemplate86=subtemplate();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, subtemplate86.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:212:4: lp= '(' mapExpr rp= ')' '(' ( argExprList )? ')'
|
|
+ {
|
|
+ lp=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_mapTemplateRef1245);
|
|
+ stream_LPAREN.add(lp);
|
|
+
|
|
+ pushFollow(FOLLOW_mapExpr_in_mapTemplateRef1247);
|
|
+ mapExpr87=mapExpr();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_mapExpr.add(mapExpr87.getTree());
|
|
+ rp=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_mapTemplateRef1251);
|
|
+ stream_RPAREN.add(rp);
|
|
+
|
|
+ char_literal88=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_mapTemplateRef1253);
|
|
+ stream_LPAREN.add(char_literal88);
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:212:30: ( argExprList )?
|
|
+ int alt31=2;
|
|
+ int LA31_0 = input.LA(1);
|
|
+ if ( (LA31_0==SUPER||LA31_0==LBRACK||LA31_0==LCURLY||(LA31_0 >= ID && LA31_0 <= STRING)||LA31_0==AT||(LA31_0 >= TRUE && LA31_0 <= FALSE)||LA31_0==SLASH) ) {
|
|
+ alt31=1;
|
|
+ }
|
|
+ else if ( (LA31_0==LPAREN) && (((conditional_stack.size()>0)||(conditional_stack.size()==0)))) {
|
|
+ alt31=1;
|
|
+ }
|
|
+ switch (alt31) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:212:30: argExprList
|
|
+ {
|
|
+ pushFollow(FOLLOW_argExprList_in_mapTemplateRef1255);
|
|
+ argExprList89=argExprList();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_argExprList.add(argExprList89.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ char_literal90=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_mapTemplateRef1258);
|
|
+ stream_RPAREN.add(char_literal90);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: argExprList, mapExpr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 212:47: -> ^( INCLUDE_IND mapExpr ( argExprList )? )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:212:50: ^( INCLUDE_IND mapExpr ( argExprList )? )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INCLUDE_IND, "INCLUDE_IND"), root_1);
|
|
+ adaptor.addChild(root_1, stream_mapExpr.nextTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:212:72: ( argExprList )?
|
|
+ if ( stream_argExprList.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_argExprList.nextTree());
|
|
+ }
|
|
+ stream_argExprList.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "mapTemplateRef"
|
|
+
|
|
+
|
|
+ public static class memberExpr_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "memberExpr"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:215:1: memberExpr : ( includeExpr -> includeExpr ) (p= '.' ID -> ^( PROP[$p,\"PROP\"] $memberExpr ID ) |p= '.' '(' mapExpr ')' -> ^( PROP_IND[$p,\"PROP_IND\"] $memberExpr mapExpr ) )* ;
|
|
+ public final STParser.memberExpr_return memberExpr() throws RecognitionException {
|
|
+ STParser.memberExpr_return retval = new STParser.memberExpr_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken p=null;
|
|
+ CommonToken ID92=null;
|
|
+ CommonToken char_literal93=null;
|
|
+ CommonToken char_literal95=null;
|
|
+ ParserRuleReturnScope includeExpr91 =null;
|
|
+ ParserRuleReturnScope mapExpr94 =null;
|
|
+
|
|
+ CommonTree p_tree=null;
|
|
+ CommonTree ID92_tree=null;
|
|
+ CommonTree char_literal93_tree=null;
|
|
+ CommonTree char_literal95_tree=null;
|
|
+ RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
|
|
+ RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
|
|
+ RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
|
|
+ RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
|
|
+ RewriteRuleSubtreeStream stream_includeExpr=new RewriteRuleSubtreeStream(adaptor,"rule includeExpr");
|
|
+ RewriteRuleSubtreeStream stream_mapExpr=new RewriteRuleSubtreeStream(adaptor,"rule mapExpr");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:216:2: ( ( includeExpr -> includeExpr ) (p= '.' ID -> ^( PROP[$p,\"PROP\"] $memberExpr ID ) |p= '.' '(' mapExpr ')' -> ^( PROP_IND[$p,\"PROP_IND\"] $memberExpr mapExpr ) )* )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:216:4: ( includeExpr -> includeExpr ) (p= '.' ID -> ^( PROP[$p,\"PROP\"] $memberExpr ID ) |p= '.' '(' mapExpr ')' -> ^( PROP_IND[$p,\"PROP_IND\"] $memberExpr mapExpr ) )*
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:216:4: ( includeExpr -> includeExpr )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:216:5: includeExpr
|
|
+ {
|
|
+ pushFollow(FOLLOW_includeExpr_in_memberExpr1281);
|
|
+ includeExpr91=includeExpr();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_includeExpr.add(includeExpr91.getTree());
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: includeExpr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 216:16: -> includeExpr
|
|
+ {
|
|
+ adaptor.addChild(root_0, stream_includeExpr.nextTree());
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:217:3: (p= '.' ID -> ^( PROP[$p,\"PROP\"] $memberExpr ID ) |p= '.' '(' mapExpr ')' -> ^( PROP_IND[$p,\"PROP_IND\"] $memberExpr mapExpr ) )*
|
|
+ loop33:
|
|
+ while (true) {
|
|
+ int alt33=3;
|
|
+ int LA33_0 = input.LA(1);
|
|
+ if ( (LA33_0==DOT) ) {
|
|
+ int LA33_2 = input.LA(2);
|
|
+ if ( (LA33_2==ID) ) {
|
|
+ alt33=1;
|
|
+ }
|
|
+ else if ( (LA33_2==LPAREN) ) {
|
|
+ alt33=2;
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ switch (alt33) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:217:5: p= '.' ID
|
|
+ {
|
|
+ p=(CommonToken)match(input,DOT,FOLLOW_DOT_in_memberExpr1292);
|
|
+ stream_DOT.add(p);
|
|
+
|
|
+ ID92=(CommonToken)match(input,ID,FOLLOW_ID_in_memberExpr1294);
|
|
+ stream_ID.add(ID92);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ID, memberExpr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 217:20: -> ^( PROP[$p,\"PROP\"] $memberExpr ID )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:217:23: ^( PROP[$p,\"PROP\"] $memberExpr ID )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(PROP, p, "PROP"), root_1);
|
|
+ adaptor.addChild(root_1, stream_retval.nextTree());
|
|
+ adaptor.addChild(root_1, stream_ID.nextNode());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:218:5: p= '.' '(' mapExpr ')'
|
|
+ {
|
|
+ p=(CommonToken)match(input,DOT,FOLLOW_DOT_in_memberExpr1320);
|
|
+ stream_DOT.add(p);
|
|
+
|
|
+ char_literal93=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_memberExpr1322);
|
|
+ stream_LPAREN.add(char_literal93);
|
|
+
|
|
+ pushFollow(FOLLOW_mapExpr_in_memberExpr1324);
|
|
+ mapExpr94=mapExpr();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_mapExpr.add(mapExpr94.getTree());
|
|
+ char_literal95=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_memberExpr1326);
|
|
+ stream_RPAREN.add(char_literal95);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: mapExpr, memberExpr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 218:30: -> ^( PROP_IND[$p,\"PROP_IND\"] $memberExpr mapExpr )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:218:33: ^( PROP_IND[$p,\"PROP_IND\"] $memberExpr mapExpr )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(PROP_IND, p, "PROP_IND"), root_1);
|
|
+ adaptor.addChild(root_1, stream_retval.nextTree());
|
|
+ adaptor.addChild(root_1, stream_mapExpr.nextTree());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop33;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "memberExpr"
|
|
+
|
|
+
|
|
+ public static class includeExpr_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "includeExpr"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:222:1: includeExpr options {k=2; } : ({...}? ID '(' ( expr )? ')' -> ^( EXEC_FUNC ID ( expr )? ) | 'super' '.' ID '(' args ')' -> ^( INCLUDE_SUPER ID ( args )? ) | qualifiedId '(' args ')' -> ^( INCLUDE qualifiedId ( args )? ) | '@' 'super' '.' ID '(' rp= ')' -> ^( INCLUDE_SUPER_REGION ID ) | '@' ID '(' rp= ')' -> ^( INCLUDE_REGION ID ) | primary );
|
|
+ public final STParser.includeExpr_return includeExpr() throws RecognitionException {
|
|
+ STParser.includeExpr_return retval = new STParser.includeExpr_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken rp=null;
|
|
+ CommonToken ID96=null;
|
|
+ CommonToken char_literal97=null;
|
|
+ CommonToken char_literal99=null;
|
|
+ CommonToken string_literal100=null;
|
|
+ CommonToken char_literal101=null;
|
|
+ CommonToken ID102=null;
|
|
+ CommonToken char_literal103=null;
|
|
+ CommonToken char_literal105=null;
|
|
+ CommonToken char_literal107=null;
|
|
+ CommonToken char_literal109=null;
|
|
+ CommonToken char_literal110=null;
|
|
+ CommonToken string_literal111=null;
|
|
+ CommonToken char_literal112=null;
|
|
+ CommonToken ID113=null;
|
|
+ CommonToken char_literal114=null;
|
|
+ CommonToken char_literal115=null;
|
|
+ CommonToken ID116=null;
|
|
+ CommonToken char_literal117=null;
|
|
+ ParserRuleReturnScope expr98 =null;
|
|
+ ParserRuleReturnScope args104 =null;
|
|
+ ParserRuleReturnScope qualifiedId106 =null;
|
|
+ ParserRuleReturnScope args108 =null;
|
|
+ ParserRuleReturnScope primary118 =null;
|
|
+
|
|
+ CommonTree rp_tree=null;
|
|
+ CommonTree ID96_tree=null;
|
|
+ CommonTree char_literal97_tree=null;
|
|
+ CommonTree char_literal99_tree=null;
|
|
+ CommonTree string_literal100_tree=null;
|
|
+ CommonTree char_literal101_tree=null;
|
|
+ CommonTree ID102_tree=null;
|
|
+ CommonTree char_literal103_tree=null;
|
|
+ CommonTree char_literal105_tree=null;
|
|
+ CommonTree char_literal107_tree=null;
|
|
+ CommonTree char_literal109_tree=null;
|
|
+ CommonTree char_literal110_tree=null;
|
|
+ CommonTree string_literal111_tree=null;
|
|
+ CommonTree char_literal112_tree=null;
|
|
+ CommonTree ID113_tree=null;
|
|
+ CommonTree char_literal114_tree=null;
|
|
+ CommonTree char_literal115_tree=null;
|
|
+ CommonTree ID116_tree=null;
|
|
+ CommonTree char_literal117_tree=null;
|
|
+ RewriteRuleTokenStream stream_SUPER=new RewriteRuleTokenStream(adaptor,"token SUPER");
|
|
+ RewriteRuleTokenStream stream_AT=new RewriteRuleTokenStream(adaptor,"token AT");
|
|
+ RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
|
|
+ RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
|
|
+ RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
|
|
+ RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
|
|
+ RewriteRuleSubtreeStream stream_args=new RewriteRuleSubtreeStream(adaptor,"rule args");
|
|
+ RewriteRuleSubtreeStream stream_qualifiedId=new RewriteRuleSubtreeStream(adaptor,"rule qualifiedId");
|
|
+ RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:224:2: ({...}? ID '(' ( expr )? ')' -> ^( EXEC_FUNC ID ( expr )? ) | 'super' '.' ID '(' args ')' -> ^( INCLUDE_SUPER ID ( args )? ) | qualifiedId '(' args ')' -> ^( INCLUDE qualifiedId ( args )? ) | '@' 'super' '.' ID '(' rp= ')' -> ^( INCLUDE_SUPER_REGION ID ) | '@' ID '(' rp= ')' -> ^( INCLUDE_REGION ID ) | primary )
|
|
+ int alt35=6;
|
|
+ int LA35_0 = input.LA(1);
|
|
+ if ( (LA35_0==ID) ) {
|
|
+ switch ( input.LA(2) ) {
|
|
+ case LPAREN:
|
|
+ {
|
|
+ int LA35_11 = input.LA(3);
|
|
+ if ( ((Compiler.funcs.containsKey(input.LT(1).getText()))) ) {
|
|
+ alt35=1;
|
|
+ }
|
|
+ else if ( (true) ) {
|
|
+ alt35=3;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case SLASH:
|
|
+ {
|
|
+ alt35=3;
|
|
+ }
|
|
+ break;
|
|
+ case SEMI:
|
|
+ case COLON:
|
|
+ case RPAREN:
|
|
+ case RBRACK:
|
|
+ case COMMA:
|
|
+ case DOT:
|
|
+ case RDELIM:
|
|
+ case OR:
|
|
+ case AND:
|
|
+ {
|
|
+ alt35=6;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 35, 1, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ else if ( (LA35_0==SUPER) ) {
|
|
+ alt35=2;
|
|
+ }
|
|
+ else if ( (LA35_0==SLASH) ) {
|
|
+ alt35=3;
|
|
+ }
|
|
+ else if ( (LA35_0==AT) ) {
|
|
+ int LA35_4 = input.LA(2);
|
|
+ if ( (LA35_4==SUPER) ) {
|
|
+ alt35=4;
|
|
+ }
|
|
+ else if ( (LA35_4==ID) ) {
|
|
+ alt35=5;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 35, 4, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA35_0==LBRACK||LA35_0==LCURLY||LA35_0==STRING||(LA35_0 >= TRUE && LA35_0 <= FALSE)) ) {
|
|
+ alt35=6;
|
|
+ }
|
|
+ else if ( (LA35_0==LPAREN) && (((conditional_stack.size()>0)||(conditional_stack.size()==0)))) {
|
|
+ alt35=6;
|
|
+ }
|
|
+
|
|
+ switch (alt35) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:224:4: {...}? ID '(' ( expr )? ')'
|
|
+ {
|
|
+ if ( !((Compiler.funcs.containsKey(input.LT(1).getText()))) ) {
|
|
+ throw new FailedPredicateException(input, "includeExpr", "Compiler.funcs.containsKey(input.LT(1).getText())");
|
|
+ }
|
|
+ ID96=(CommonToken)match(input,ID,FOLLOW_ID_in_includeExpr1370);
|
|
+ stream_ID.add(ID96);
|
|
+
|
|
+ char_literal97=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_includeExpr1372);
|
|
+ stream_LPAREN.add(char_literal97);
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:225:10: ( expr )?
|
|
+ int alt34=2;
|
|
+ int LA34_0 = input.LA(1);
|
|
+ if ( (LA34_0==SUPER||LA34_0==LBRACK||LA34_0==LCURLY||(LA34_0 >= ID && LA34_0 <= STRING)||LA34_0==AT||(LA34_0 >= TRUE && LA34_0 <= FALSE)||LA34_0==SLASH) ) {
|
|
+ alt34=1;
|
|
+ }
|
|
+ else if ( (LA34_0==LPAREN) && (((conditional_stack.size()>0)||(conditional_stack.size()==0)))) {
|
|
+ alt34=1;
|
|
+ }
|
|
+ switch (alt34) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:225:10: expr
|
|
+ {
|
|
+ pushFollow(FOLLOW_expr_in_includeExpr1374);
|
|
+ expr98=expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_expr.add(expr98.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ char_literal99=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_includeExpr1377);
|
|
+ stream_RPAREN.add(char_literal99);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ID, expr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 225:25: -> ^( EXEC_FUNC ID ( expr )? )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:225:28: ^( EXEC_FUNC ID ( expr )? )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(EXEC_FUNC, "EXEC_FUNC"), root_1);
|
|
+ adaptor.addChild(root_1, stream_ID.nextNode());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:225:43: ( expr )?
|
|
+ if ( stream_expr.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_expr.nextTree());
|
|
+ }
|
|
+ stream_expr.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:226:4: 'super' '.' ID '(' args ')'
|
|
+ {
|
|
+ string_literal100=(CommonToken)match(input,SUPER,FOLLOW_SUPER_in_includeExpr1398);
|
|
+ stream_SUPER.add(string_literal100);
|
|
+
|
|
+ char_literal101=(CommonToken)match(input,DOT,FOLLOW_DOT_in_includeExpr1400);
|
|
+ stream_DOT.add(char_literal101);
|
|
+
|
|
+ ID102=(CommonToken)match(input,ID,FOLLOW_ID_in_includeExpr1402);
|
|
+ stream_ID.add(ID102);
|
|
+
|
|
+ char_literal103=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_includeExpr1404);
|
|
+ stream_LPAREN.add(char_literal103);
|
|
+
|
|
+ pushFollow(FOLLOW_args_in_includeExpr1406);
|
|
+ args104=args();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_args.add(args104.getTree());
|
|
+ char_literal105=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_includeExpr1408);
|
|
+ stream_RPAREN.add(char_literal105);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ID, args
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 226:35: -> ^( INCLUDE_SUPER ID ( args )? )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:226:38: ^( INCLUDE_SUPER ID ( args )? )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INCLUDE_SUPER, "INCLUDE_SUPER"), root_1);
|
|
+ adaptor.addChild(root_1, stream_ID.nextNode());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:226:57: ( args )?
|
|
+ if ( stream_args.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_args.nextTree());
|
|
+ }
|
|
+ stream_args.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:227:4: qualifiedId '(' args ')'
|
|
+ {
|
|
+ pushFollow(FOLLOW_qualifiedId_in_includeExpr1427);
|
|
+ qualifiedId106=qualifiedId();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_qualifiedId.add(qualifiedId106.getTree());
|
|
+ char_literal107=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_includeExpr1429);
|
|
+ stream_LPAREN.add(char_literal107);
|
|
+
|
|
+ pushFollow(FOLLOW_args_in_includeExpr1431);
|
|
+ args108=args();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_args.add(args108.getTree());
|
|
+ char_literal109=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_includeExpr1433);
|
|
+ stream_RPAREN.add(char_literal109);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: args, qualifiedId
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 227:32: -> ^( INCLUDE qualifiedId ( args )? )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:227:35: ^( INCLUDE qualifiedId ( args )? )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INCLUDE, "INCLUDE"), root_1);
|
|
+ adaptor.addChild(root_1, stream_qualifiedId.nextTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:227:57: ( args )?
|
|
+ if ( stream_args.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_args.nextTree());
|
|
+ }
|
|
+ stream_args.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:228:4: '@' 'super' '.' ID '(' rp= ')'
|
|
+ {
|
|
+ char_literal110=(CommonToken)match(input,AT,FOLLOW_AT_in_includeExpr1452);
|
|
+ stream_AT.add(char_literal110);
|
|
+
|
|
+ string_literal111=(CommonToken)match(input,SUPER,FOLLOW_SUPER_in_includeExpr1454);
|
|
+ stream_SUPER.add(string_literal111);
|
|
+
|
|
+ char_literal112=(CommonToken)match(input,DOT,FOLLOW_DOT_in_includeExpr1456);
|
|
+ stream_DOT.add(char_literal112);
|
|
+
|
|
+ ID113=(CommonToken)match(input,ID,FOLLOW_ID_in_includeExpr1458);
|
|
+ stream_ID.add(ID113);
|
|
+
|
|
+ char_literal114=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_includeExpr1460);
|
|
+ stream_LPAREN.add(char_literal114);
|
|
+
|
|
+ rp=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_includeExpr1464);
|
|
+ stream_RPAREN.add(rp);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ID
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 228:36: -> ^( INCLUDE_SUPER_REGION ID )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:228:39: ^( INCLUDE_SUPER_REGION ID )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INCLUDE_SUPER_REGION, "INCLUDE_SUPER_REGION"), root_1);
|
|
+ adaptor.addChild(root_1, stream_ID.nextNode());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 5 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:229:4: '@' ID '(' rp= ')'
|
|
+ {
|
|
+ char_literal115=(CommonToken)match(input,AT,FOLLOW_AT_in_includeExpr1479);
|
|
+ stream_AT.add(char_literal115);
|
|
+
|
|
+ ID116=(CommonToken)match(input,ID,FOLLOW_ID_in_includeExpr1481);
|
|
+ stream_ID.add(ID116);
|
|
+
|
|
+ char_literal117=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_includeExpr1483);
|
|
+ stream_LPAREN.add(char_literal117);
|
|
+
|
|
+ rp=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_includeExpr1487);
|
|
+ stream_RPAREN.add(rp);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ID
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 229:27: -> ^( INCLUDE_REGION ID )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:229:30: ^( INCLUDE_REGION ID )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INCLUDE_REGION, "INCLUDE_REGION"), root_1);
|
|
+ adaptor.addChild(root_1, stream_ID.nextNode());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 6 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:230:4: primary
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_primary_in_includeExpr1505);
|
|
+ primary118=primary();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, primary118.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "includeExpr"
|
|
+
|
|
+
|
|
+ public static class primary_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "primary"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:233:1: primary : ( ID | STRING | TRUE | FALSE | subtemplate | list |{...}? => '(' ! conditional ')' !|{...}? =>lp= '(' expr ')' ( '(' ( argExprList )? ')' -> ^( INCLUDE_IND[$lp] expr ( argExprList )? ) | -> ^( TO_STR[$lp] expr ) ) );
|
|
+ public final STParser.primary_return primary() throws RecognitionException {
|
|
+ STParser.primary_return retval = new STParser.primary_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken lp=null;
|
|
+ CommonToken ID119=null;
|
|
+ CommonToken STRING120=null;
|
|
+ CommonToken TRUE121=null;
|
|
+ CommonToken FALSE122=null;
|
|
+ CommonToken char_literal125=null;
|
|
+ CommonToken char_literal127=null;
|
|
+ CommonToken char_literal129=null;
|
|
+ CommonToken char_literal130=null;
|
|
+ CommonToken char_literal132=null;
|
|
+ ParserRuleReturnScope subtemplate123 =null;
|
|
+ ParserRuleReturnScope list124 =null;
|
|
+ ParserRuleReturnScope conditional126 =null;
|
|
+ ParserRuleReturnScope expr128 =null;
|
|
+ ParserRuleReturnScope argExprList131 =null;
|
|
+
|
|
+ CommonTree lp_tree=null;
|
|
+ CommonTree ID119_tree=null;
|
|
+ CommonTree STRING120_tree=null;
|
|
+ CommonTree TRUE121_tree=null;
|
|
+ CommonTree FALSE122_tree=null;
|
|
+ CommonTree char_literal125_tree=null;
|
|
+ CommonTree char_literal127_tree=null;
|
|
+ CommonTree char_literal129_tree=null;
|
|
+ CommonTree char_literal130_tree=null;
|
|
+ CommonTree char_literal132_tree=null;
|
|
+ RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
|
|
+ RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
|
|
+ RewriteRuleSubtreeStream stream_argExprList=new RewriteRuleSubtreeStream(adaptor,"rule argExprList");
|
|
+ RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:234:2: ( ID | STRING | TRUE | FALSE | subtemplate | list |{...}? => '(' ! conditional ')' !|{...}? =>lp= '(' expr ')' ( '(' ( argExprList )? ')' -> ^( INCLUDE_IND[$lp] expr ( argExprList )? ) | -> ^( TO_STR[$lp] expr ) ) )
|
|
+ int alt38=8;
|
|
+ int LA38_0 = input.LA(1);
|
|
+ if ( (LA38_0==ID) ) {
|
|
+ alt38=1;
|
|
+ }
|
|
+ else if ( (LA38_0==STRING) ) {
|
|
+ alt38=2;
|
|
+ }
|
|
+ else if ( (LA38_0==TRUE) ) {
|
|
+ alt38=3;
|
|
+ }
|
|
+ else if ( (LA38_0==FALSE) ) {
|
|
+ alt38=4;
|
|
+ }
|
|
+ else if ( (LA38_0==LCURLY) ) {
|
|
+ alt38=5;
|
|
+ }
|
|
+ else if ( (LA38_0==LBRACK) ) {
|
|
+ alt38=6;
|
|
+ }
|
|
+ else if ( (LA38_0==LPAREN) && (((conditional_stack.size()>0)||(conditional_stack.size()==0)))) {
|
|
+ int LA38_7 = input.LA(2);
|
|
+ if ( ((conditional_stack.size()>0)) ) {
|
|
+ alt38=7;
|
|
+ }
|
|
+ else if ( ((conditional_stack.size()==0)) ) {
|
|
+ alt38=8;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 38, 7, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ switch (alt38) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:234:4: ID
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ ID119=(CommonToken)match(input,ID,FOLLOW_ID_in_primary1516);
|
|
+ ID119_tree = (CommonTree)adaptor.create(ID119);
|
|
+ adaptor.addChild(root_0, ID119_tree);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:235:4: STRING
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ STRING120=(CommonToken)match(input,STRING,FOLLOW_STRING_in_primary1521);
|
|
+ STRING120_tree = (CommonTree)adaptor.create(STRING120);
|
|
+ adaptor.addChild(root_0, STRING120_tree);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:236:4: TRUE
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ TRUE121=(CommonToken)match(input,TRUE,FOLLOW_TRUE_in_primary1526);
|
|
+ TRUE121_tree = (CommonTree)adaptor.create(TRUE121);
|
|
+ adaptor.addChild(root_0, TRUE121_tree);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:237:4: FALSE
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ FALSE122=(CommonToken)match(input,FALSE,FOLLOW_FALSE_in_primary1531);
|
|
+ FALSE122_tree = (CommonTree)adaptor.create(FALSE122);
|
|
+ adaptor.addChild(root_0, FALSE122_tree);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 5 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:238:4: subtemplate
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_subtemplate_in_primary1536);
|
|
+ subtemplate123=subtemplate();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, subtemplate123.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 6 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:239:4: list
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_list_in_primary1541);
|
|
+ list124=list();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, list124.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 7 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:240:4: {...}? => '(' ! conditional ')' !
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ if ( !((conditional_stack.size()>0)) ) {
|
|
+ throw new FailedPredicateException(input, "primary", "$conditional.size()>0");
|
|
+ }
|
|
+ char_literal125=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_primary1550);
|
|
+ pushFollow(FOLLOW_conditional_in_primary1553);
|
|
+ conditional126=conditional();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, conditional126.getTree());
|
|
+
|
|
+ char_literal127=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_primary1555);
|
|
+ }
|
|
+ break;
|
|
+ case 8 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:241:4: {...}? =>lp= '(' expr ')' ( '(' ( argExprList )? ')' -> ^( INCLUDE_IND[$lp] expr ( argExprList )? ) | -> ^( TO_STR[$lp] expr ) )
|
|
+ {
|
|
+ if ( !((conditional_stack.size()==0)) ) {
|
|
+ throw new FailedPredicateException(input, "primary", "$conditional.size()==0");
|
|
+ }
|
|
+ lp=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_primary1566);
|
|
+ stream_LPAREN.add(lp);
|
|
+
|
|
+ pushFollow(FOLLOW_expr_in_primary1568);
|
|
+ expr128=expr();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_expr.add(expr128.getTree());
|
|
+ char_literal129=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_primary1570);
|
|
+ stream_RPAREN.add(char_literal129);
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:242:3: ( '(' ( argExprList )? ')' -> ^( INCLUDE_IND[$lp] expr ( argExprList )? ) | -> ^( TO_STR[$lp] expr ) )
|
|
+ int alt37=2;
|
|
+ int LA37_0 = input.LA(1);
|
|
+ if ( (LA37_0==LPAREN) ) {
|
|
+ alt37=1;
|
|
+ }
|
|
+ else if ( (LA37_0==SEMI||LA37_0==COLON||LA37_0==RPAREN||(LA37_0 >= RBRACK && LA37_0 <= DOT)||LA37_0==RDELIM||(LA37_0 >= OR && LA37_0 <= AND)) ) {
|
|
+ alt37=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 37, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt37) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:242:5: '(' ( argExprList )? ')'
|
|
+ {
|
|
+ char_literal130=(CommonToken)match(input,LPAREN,FOLLOW_LPAREN_in_primary1576);
|
|
+ stream_LPAREN.add(char_literal130);
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:242:9: ( argExprList )?
|
|
+ int alt36=2;
|
|
+ int LA36_0 = input.LA(1);
|
|
+ if ( (LA36_0==SUPER||LA36_0==LBRACK||LA36_0==LCURLY||(LA36_0 >= ID && LA36_0 <= STRING)||LA36_0==AT||(LA36_0 >= TRUE && LA36_0 <= FALSE)||LA36_0==SLASH) ) {
|
|
+ alt36=1;
|
|
+ }
|
|
+ else if ( (LA36_0==LPAREN) && (((conditional_stack.size()>0)||(conditional_stack.size()==0)))) {
|
|
+ alt36=1;
|
|
+ }
|
|
+ switch (alt36) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:242:9: argExprList
|
|
+ {
|
|
+ pushFollow(FOLLOW_argExprList_in_primary1578);
|
|
+ argExprList131=argExprList();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_argExprList.add(argExprList131.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ char_literal132=(CommonToken)match(input,RPAREN,FOLLOW_RPAREN_in_primary1581);
|
|
+ stream_RPAREN.add(char_literal132);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: argExprList, expr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 242:35: -> ^( INCLUDE_IND[$lp] expr ( argExprList )? )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:242:38: ^( INCLUDE_IND[$lp] expr ( argExprList )? )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INCLUDE_IND, lp), root_1);
|
|
+ adaptor.addChild(root_1, stream_expr.nextTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:242:62: ( argExprList )?
|
|
+ if ( stream_argExprList.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_argExprList.nextTree());
|
|
+ }
|
|
+ stream_argExprList.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:243:14:
|
|
+ {
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: expr
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 243:14: -> ^( TO_STR[$lp] expr )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:243:17: ^( TO_STR[$lp] expr )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TO_STR, lp), root_1);
|
|
+ adaptor.addChild(root_1, stream_expr.nextTree());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "primary"
|
|
+
|
|
+
|
|
+ public static class qualifiedId_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "qualifiedId"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:247:1: qualifiedId : ( ID -> ID | '/' ID -> ^( '/' ID ) ) ( '/' r= ID -> ^( '/' $qualifiedId $r) )* ;
|
|
+ public final STParser.qualifiedId_return qualifiedId() throws RecognitionException {
|
|
+ STParser.qualifiedId_return retval = new STParser.qualifiedId_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken r=null;
|
|
+ CommonToken ID133=null;
|
|
+ CommonToken char_literal134=null;
|
|
+ CommonToken ID135=null;
|
|
+ CommonToken char_literal136=null;
|
|
+
|
|
+ CommonTree r_tree=null;
|
|
+ CommonTree ID133_tree=null;
|
|
+ CommonTree char_literal134_tree=null;
|
|
+ CommonTree ID135_tree=null;
|
|
+ CommonTree char_literal136_tree=null;
|
|
+ RewriteRuleTokenStream stream_SLASH=new RewriteRuleTokenStream(adaptor,"token SLASH");
|
|
+ RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:248:2: ( ( ID -> ID | '/' ID -> ^( '/' ID ) ) ( '/' r= ID -> ^( '/' $qualifiedId $r) )* )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:248:4: ( ID -> ID | '/' ID -> ^( '/' ID ) ) ( '/' r= ID -> ^( '/' $qualifiedId $r) )*
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:248:4: ( ID -> ID | '/' ID -> ^( '/' ID ) )
|
|
+ int alt39=2;
|
|
+ int LA39_0 = input.LA(1);
|
|
+ if ( (LA39_0==ID) ) {
|
|
+ alt39=1;
|
|
+ }
|
|
+ else if ( (LA39_0==SLASH) ) {
|
|
+ alt39=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 39, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt39) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:248:6: ID
|
|
+ {
|
|
+ ID133=(CommonToken)match(input,ID,FOLLOW_ID_in_qualifiedId1641);
|
|
+ stream_ID.add(ID133);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ID
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 248:17: -> ID
|
|
+ {
|
|
+ adaptor.addChild(root_0, stream_ID.nextNode());
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:249:5: '/' ID
|
|
+ {
|
|
+ char_literal134=(CommonToken)match(input,SLASH,FOLLOW_SLASH_in_qualifiedId1659);
|
|
+ stream_SLASH.add(char_literal134);
|
|
+
|
|
+ ID135=(CommonToken)match(input,ID,FOLLOW_ID_in_qualifiedId1661);
|
|
+ stream_ID.add(ID135);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ID, SLASH
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 249:19: -> ^( '/' ID )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:249:22: ^( '/' ID )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot(stream_SLASH.nextNode(), root_1);
|
|
+ adaptor.addChild(root_1, stream_ID.nextNode());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:251:3: ( '/' r= ID -> ^( '/' $qualifiedId $r) )*
|
|
+ loop40:
|
|
+ while (true) {
|
|
+ int alt40=2;
|
|
+ int LA40_0 = input.LA(1);
|
|
+ if ( (LA40_0==SLASH) ) {
|
|
+ alt40=1;
|
|
+ }
|
|
+
|
|
+ switch (alt40) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:251:5: '/' r= ID
|
|
+ {
|
|
+ char_literal136=(CommonToken)match(input,SLASH,FOLLOW_SLASH_in_qualifiedId1686);
|
|
+ stream_SLASH.add(char_literal136);
|
|
+
|
|
+ r=(CommonToken)match(input,ID,FOLLOW_ID_in_qualifiedId1690);
|
|
+ stream_ID.add(r);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: SLASH, qualifiedId, r
|
|
+ // token labels: r
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleTokenStream stream_r=new RewriteRuleTokenStream(adaptor,"token r",r);
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 251:20: -> ^( '/' $qualifiedId $r)
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:251:23: ^( '/' $qualifiedId $r)
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot(stream_SLASH.nextNode(), root_1);
|
|
+ adaptor.addChild(root_1, stream_retval.nextTree());
|
|
+ adaptor.addChild(root_1, stream_r.nextNode());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop40;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "qualifiedId"
|
|
+
|
|
+
|
|
+ public static class args_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "args"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:255:1: args : ( argExprList | namedArg ( ',' namedArg )* ( ',' '...' )? -> ( namedArg )+ ( '...' )? | '...' |);
|
|
+ public final STParser.args_return args() throws RecognitionException {
|
|
+ STParser.args_return retval = new STParser.args_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken char_literal139=null;
|
|
+ CommonToken char_literal141=null;
|
|
+ CommonToken string_literal142=null;
|
|
+ CommonToken string_literal143=null;
|
|
+ ParserRuleReturnScope argExprList137 =null;
|
|
+ ParserRuleReturnScope namedArg138 =null;
|
|
+ ParserRuleReturnScope namedArg140 =null;
|
|
+
|
|
+ CommonTree char_literal139_tree=null;
|
|
+ CommonTree char_literal141_tree=null;
|
|
+ CommonTree string_literal142_tree=null;
|
|
+ CommonTree string_literal143_tree=null;
|
|
+ RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
|
|
+ RewriteRuleTokenStream stream_ELLIPSIS=new RewriteRuleTokenStream(adaptor,"token ELLIPSIS");
|
|
+ RewriteRuleSubtreeStream stream_namedArg=new RewriteRuleSubtreeStream(adaptor,"rule namedArg");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:255:5: ( argExprList | namedArg ( ',' namedArg )* ( ',' '...' )? -> ( namedArg )+ ( '...' )? | '...' |)
|
|
+ int alt43=4;
|
|
+ int LA43_0 = input.LA(1);
|
|
+ if ( (LA43_0==ID) ) {
|
|
+ int LA43_1 = input.LA(2);
|
|
+ if ( ((LA43_1 >= COLON && LA43_1 <= RPAREN)||(LA43_1 >= COMMA && LA43_1 <= DOT)||LA43_1==SLASH) ) {
|
|
+ alt43=1;
|
|
+ }
|
|
+ else if ( (LA43_1==EQUALS) ) {
|
|
+ alt43=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 43, 1, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA43_0==SUPER||LA43_0==LBRACK||LA43_0==LCURLY||LA43_0==STRING||LA43_0==AT||(LA43_0 >= TRUE && LA43_0 <= FALSE)||LA43_0==SLASH) ) {
|
|
+ alt43=1;
|
|
+ }
|
|
+ else if ( (LA43_0==LPAREN) && (((conditional_stack.size()>0)||(conditional_stack.size()==0)))) {
|
|
+ alt43=1;
|
|
+ }
|
|
+ else if ( (LA43_0==ELLIPSIS) ) {
|
|
+ alt43=3;
|
|
+ }
|
|
+ else if ( (LA43_0==RPAREN) ) {
|
|
+ alt43=4;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 43, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt43) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:255:7: argExprList
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_argExprList_in_args1722);
|
|
+ argExprList137=argExprList();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, argExprList137.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:256:4: namedArg ( ',' namedArg )* ( ',' '...' )?
|
|
+ {
|
|
+ pushFollow(FOLLOW_namedArg_in_args1727);
|
|
+ namedArg138=namedArg();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_namedArg.add(namedArg138.getTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:256:13: ( ',' namedArg )*
|
|
+ loop41:
|
|
+ while (true) {
|
|
+ int alt41=2;
|
|
+ int LA41_0 = input.LA(1);
|
|
+ if ( (LA41_0==COMMA) ) {
|
|
+ int LA41_1 = input.LA(2);
|
|
+ if ( (LA41_1==ID) ) {
|
|
+ alt41=1;
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ switch (alt41) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:256:15: ',' namedArg
|
|
+ {
|
|
+ char_literal139=(CommonToken)match(input,COMMA,FOLLOW_COMMA_in_args1731);
|
|
+ stream_COMMA.add(char_literal139);
|
|
+
|
|
+ pushFollow(FOLLOW_namedArg_in_args1733);
|
|
+ namedArg140=namedArg();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_namedArg.add(namedArg140.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop41;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:256:31: ( ',' '...' )?
|
|
+ int alt42=2;
|
|
+ int LA42_0 = input.LA(1);
|
|
+ if ( (LA42_0==COMMA) ) {
|
|
+ alt42=1;
|
|
+ }
|
|
+ switch (alt42) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:256:32: ',' '...'
|
|
+ {
|
|
+ char_literal141=(CommonToken)match(input,COMMA,FOLLOW_COMMA_in_args1739);
|
|
+ stream_COMMA.add(char_literal141);
|
|
+
|
|
+ string_literal142=(CommonToken)match(input,ELLIPSIS,FOLLOW_ELLIPSIS_in_args1741);
|
|
+ stream_ELLIPSIS.add(string_literal142);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: ELLIPSIS, namedArg
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 256:44: -> ( namedArg )+ ( '...' )?
|
|
+ {
|
|
+ if ( !(stream_namedArg.hasNext()) ) {
|
|
+ throw new RewriteEarlyExitException();
|
|
+ }
|
|
+ while ( stream_namedArg.hasNext() ) {
|
|
+ adaptor.addChild(root_0, stream_namedArg.nextTree());
|
|
+ }
|
|
+ stream_namedArg.reset();
|
|
+
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:256:57: ( '...' )?
|
|
+ if ( stream_ELLIPSIS.hasNext() ) {
|
|
+ adaptor.addChild(root_0, stream_ELLIPSIS.nextNode());
|
|
+ }
|
|
+ stream_ELLIPSIS.reset();
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 3 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:257:9: '...'
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ string_literal143=(CommonToken)match(input,ELLIPSIS,FOLLOW_ELLIPSIS_in_args1761);
|
|
+ string_literal143_tree = (CommonTree)adaptor.create(string_literal143);
|
|
+ adaptor.addChild(root_0, string_literal143_tree);
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 4 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:259:2:
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "args"
|
|
+
|
|
+
|
|
+ public static class argExprList_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "argExprList"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:261:1: argExprList : arg ( ',' arg )* -> ( arg )+ ;
|
|
+ public final STParser.argExprList_return argExprList() throws RecognitionException {
|
|
+ STParser.argExprList_return retval = new STParser.argExprList_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken char_literal145=null;
|
|
+ ParserRuleReturnScope arg144 =null;
|
|
+ ParserRuleReturnScope arg146 =null;
|
|
+
|
|
+ CommonTree char_literal145_tree=null;
|
|
+ RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
|
|
+ RewriteRuleSubtreeStream stream_arg=new RewriteRuleSubtreeStream(adaptor,"rule arg");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:261:13: ( arg ( ',' arg )* -> ( arg )+ )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:261:15: arg ( ',' arg )*
|
|
+ {
|
|
+ pushFollow(FOLLOW_arg_in_argExprList1774);
|
|
+ arg144=arg();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_arg.add(arg144.getTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:261:19: ( ',' arg )*
|
|
+ loop44:
|
|
+ while (true) {
|
|
+ int alt44=2;
|
|
+ int LA44_0 = input.LA(1);
|
|
+ if ( (LA44_0==COMMA) ) {
|
|
+ alt44=1;
|
|
+ }
|
|
+
|
|
+ switch (alt44) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:261:21: ',' arg
|
|
+ {
|
|
+ char_literal145=(CommonToken)match(input,COMMA,FOLLOW_COMMA_in_argExprList1778);
|
|
+ stream_COMMA.add(char_literal145);
|
|
+
|
|
+ pushFollow(FOLLOW_arg_in_argExprList1780);
|
|
+ arg146=arg();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_arg.add(arg146.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop44;
|
|
+ }
|
|
+ }
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: arg
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 261:32: -> ( arg )+
|
|
+ {
|
|
+ if ( !(stream_arg.hasNext()) ) {
|
|
+ throw new RewriteEarlyExitException();
|
|
+ }
|
|
+ while ( stream_arg.hasNext() ) {
|
|
+ adaptor.addChild(root_0, stream_arg.nextTree());
|
|
+ }
|
|
+ stream_arg.reset();
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "argExprList"
|
|
+
|
|
+
|
|
+ public static class arg_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "arg"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:263:1: arg : exprNoComma ;
|
|
+ public final STParser.arg_return arg() throws RecognitionException {
|
|
+ STParser.arg_return retval = new STParser.arg_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ ParserRuleReturnScope exprNoComma147 =null;
|
|
+
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:263:5: ( exprNoComma )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:263:7: exprNoComma
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_exprNoComma_in_arg1797);
|
|
+ exprNoComma147=exprNoComma();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, exprNoComma147.getTree());
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "arg"
|
|
+
|
|
+
|
|
+ public static class namedArg_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "namedArg"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:265:1: namedArg : ID '=' arg -> ^( '=' ID arg ) ;
|
|
+ public final STParser.namedArg_return namedArg() throws RecognitionException {
|
|
+ STParser.namedArg_return retval = new STParser.namedArg_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken ID148=null;
|
|
+ CommonToken char_literal149=null;
|
|
+ ParserRuleReturnScope arg150 =null;
|
|
+
|
|
+ CommonTree ID148_tree=null;
|
|
+ CommonTree char_literal149_tree=null;
|
|
+ RewriteRuleTokenStream stream_EQUALS=new RewriteRuleTokenStream(adaptor,"token EQUALS");
|
|
+ RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
|
|
+ RewriteRuleSubtreeStream stream_arg=new RewriteRuleSubtreeStream(adaptor,"rule arg");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:265:10: ( ID '=' arg -> ^( '=' ID arg ) )
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:265:12: ID '=' arg
|
|
+ {
|
|
+ ID148=(CommonToken)match(input,ID,FOLLOW_ID_in_namedArg1806);
|
|
+ stream_ID.add(ID148);
|
|
+
|
|
+ char_literal149=(CommonToken)match(input,EQUALS,FOLLOW_EQUALS_in_namedArg1808);
|
|
+ stream_EQUALS.add(char_literal149);
|
|
+
|
|
+ pushFollow(FOLLOW_arg_in_namedArg1810);
|
|
+ arg150=arg();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_arg.add(arg150.getTree());
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: EQUALS, ID, arg
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 265:23: -> ^( '=' ID arg )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:265:26: ^( '=' ID arg )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot(stream_EQUALS.nextNode(), root_1);
|
|
+ adaptor.addChild(root_1, stream_ID.nextNode());
|
|
+ adaptor.addChild(root_1, stream_arg.nextTree());
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "namedArg"
|
|
+
|
|
+
|
|
+ public static class list_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "list"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:267:1: list : ({...}?lb= '[' ']' -> LIST[$lb] |lb= '[' listElement ( ',' listElement )* ']' -> ^( LIST[$lb] ( listElement )* ) );
|
|
+ public final STParser.list_return list() throws RecognitionException {
|
|
+ STParser.list_return retval = new STParser.list_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ CommonToken lb=null;
|
|
+ CommonToken char_literal151=null;
|
|
+ CommonToken char_literal153=null;
|
|
+ CommonToken char_literal155=null;
|
|
+ ParserRuleReturnScope listElement152 =null;
|
|
+ ParserRuleReturnScope listElement154 =null;
|
|
+
|
|
+ CommonTree lb_tree=null;
|
|
+ CommonTree char_literal151_tree=null;
|
|
+ CommonTree char_literal153_tree=null;
|
|
+ CommonTree char_literal155_tree=null;
|
|
+ RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
|
|
+ RewriteRuleTokenStream stream_RBRACK=new RewriteRuleTokenStream(adaptor,"token RBRACK");
|
|
+ RewriteRuleTokenStream stream_LBRACK=new RewriteRuleTokenStream(adaptor,"token LBRACK");
|
|
+ RewriteRuleSubtreeStream stream_listElement=new RewriteRuleSubtreeStream(adaptor,"rule listElement");
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:267:5: ({...}?lb= '[' ']' -> LIST[$lb] |lb= '[' listElement ( ',' listElement )* ']' -> ^( LIST[$lb] ( listElement )* ) )
|
|
+ int alt46=2;
|
|
+ int LA46_0 = input.LA(1);
|
|
+ if ( (LA46_0==LBRACK) ) {
|
|
+ int LA46_1 = input.LA(2);
|
|
+ if ( (LA46_1==RBRACK) ) {
|
|
+ int LA46_2 = input.LA(3);
|
|
+ if ( ((input.LA(2)==RBRACK)) ) {
|
|
+ alt46=1;
|
|
+ }
|
|
+ else if ( (true) ) {
|
|
+ alt46=2;
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else if ( (LA46_1==SUPER||LA46_1==LPAREN||LA46_1==LBRACK||LA46_1==COMMA||LA46_1==LCURLY||(LA46_1 >= ID && LA46_1 <= STRING)||LA46_1==AT||(LA46_1 >= TRUE && LA46_1 <= FALSE)||LA46_1==SLASH) ) {
|
|
+ alt46=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ int nvaeMark = input.mark();
|
|
+ try {
|
|
+ input.consume();
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 46, 1, input);
|
|
+ throw nvae;
|
|
+ } finally {
|
|
+ input.rewind(nvaeMark);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 46, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt46) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:267:7: {...}?lb= '[' ']'
|
|
+ {
|
|
+ if ( !((input.LA(2)==RBRACK)) ) {
|
|
+ throw new FailedPredicateException(input, "list", "input.LA(2)==RBRACK");
|
|
+ }
|
|
+ lb=(CommonToken)match(input,LBRACK,FOLLOW_LBRACK_in_list1835);
|
|
+ stream_LBRACK.add(lb);
|
|
+
|
|
+ char_literal151=(CommonToken)match(input,RBRACK,FOLLOW_RBRACK_in_list1837);
|
|
+ stream_RBRACK.add(char_literal151);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements:
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 268:14: -> LIST[$lb]
|
|
+ {
|
|
+ adaptor.addChild(root_0, (CommonTree)adaptor.create(LIST, lb));
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:269:4: lb= '[' listElement ( ',' listElement )* ']'
|
|
+ {
|
|
+ lb=(CommonToken)match(input,LBRACK,FOLLOW_LBRACK_in_list1849);
|
|
+ stream_LBRACK.add(lb);
|
|
+
|
|
+ pushFollow(FOLLOW_listElement_in_list1851);
|
|
+ listElement152=listElement();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_listElement.add(listElement152.getTree());
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:269:23: ( ',' listElement )*
|
|
+ loop45:
|
|
+ while (true) {
|
|
+ int alt45=2;
|
|
+ int LA45_0 = input.LA(1);
|
|
+ if ( (LA45_0==COMMA) ) {
|
|
+ alt45=1;
|
|
+ }
|
|
+
|
|
+ switch (alt45) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:269:25: ',' listElement
|
|
+ {
|
|
+ char_literal153=(CommonToken)match(input,COMMA,FOLLOW_COMMA_in_list1855);
|
|
+ stream_COMMA.add(char_literal153);
|
|
+
|
|
+ pushFollow(FOLLOW_listElement_in_list1857);
|
|
+ listElement154=listElement();
|
|
+ state._fsp--;
|
|
+
|
|
+ stream_listElement.add(listElement154.getTree());
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ break loop45;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ char_literal155=(CommonToken)match(input,RBRACK,FOLLOW_RBRACK_in_list1862);
|
|
+ stream_RBRACK.add(char_literal155);
|
|
+
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements: listElement
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 269:48: -> ^( LIST[$lb] ( listElement )* )
|
|
+ {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:269:51: ^( LIST[$lb] ( listElement )* )
|
|
+ {
|
|
+ CommonTree root_1 = (CommonTree)adaptor.nil();
|
|
+ root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(LIST, lb), root_1);
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:269:63: ( listElement )*
|
|
+ while ( stream_listElement.hasNext() ) {
|
|
+ adaptor.addChild(root_1, stream_listElement.nextTree());
|
|
+ }
|
|
+ stream_listElement.reset();
|
|
+
|
|
+ adaptor.addChild(root_0, root_1);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "list"
|
|
+
|
|
+
|
|
+ public static class listElement_return extends ParserRuleReturnScope {
|
|
+ CommonTree tree;
|
|
+ @Override
|
|
+ public CommonTree getTree() { return tree; }
|
|
+ };
|
|
+
|
|
+
|
|
+ // $ANTLR start "listElement"
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:272:1: listElement : ( exprNoComma | -> NULL );
|
|
+ public final STParser.listElement_return listElement() throws RecognitionException {
|
|
+ STParser.listElement_return retval = new STParser.listElement_return();
|
|
+ retval.start = input.LT(1);
|
|
+
|
|
+ CommonTree root_0 = null;
|
|
+
|
|
+ ParserRuleReturnScope exprNoComma156 =null;
|
|
+
|
|
+
|
|
+ try {
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:272:13: ( exprNoComma | -> NULL )
|
|
+ int alt47=2;
|
|
+ int LA47_0 = input.LA(1);
|
|
+ if ( (LA47_0==SUPER||LA47_0==LBRACK||LA47_0==LCURLY||(LA47_0 >= ID && LA47_0 <= STRING)||LA47_0==AT||(LA47_0 >= TRUE && LA47_0 <= FALSE)||LA47_0==SLASH) ) {
|
|
+ alt47=1;
|
|
+ }
|
|
+ else if ( (LA47_0==LPAREN) && (((conditional_stack.size()>0)||(conditional_stack.size()==0)))) {
|
|
+ alt47=1;
|
|
+ }
|
|
+ else if ( ((LA47_0 >= RBRACK && LA47_0 <= COMMA)) ) {
|
|
+ alt47=2;
|
|
+ }
|
|
+
|
|
+ else {
|
|
+ NoViableAltException nvae =
|
|
+ new NoViableAltException("", 47, 0, input);
|
|
+ throw nvae;
|
|
+ }
|
|
+
|
|
+ switch (alt47) {
|
|
+ case 1 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:272:15: exprNoComma
|
|
+ {
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+
|
|
+
|
|
+ pushFollow(FOLLOW_exprNoComma_in_listElement1882);
|
|
+ exprNoComma156=exprNoComma();
|
|
+ state._fsp--;
|
|
+
|
|
+ adaptor.addChild(root_0, exprNoComma156.getTree());
|
|
+
|
|
+ }
|
|
+ break;
|
|
+ case 2 :
|
|
+ // org/stringtemplate/v4/compiler/STParser.g:272:29:
|
|
+ {
|
|
+
|
|
+ // AST REWRITE
|
|
+ // elements:
|
|
+ // token labels:
|
|
+ // rule labels: retval
|
|
+ // token list labels:
|
|
+ // rule list labels:
|
|
+ // wildcard labels:
|
|
+ retval.tree = root_0;
|
|
+ RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
|
|
+
|
|
+ root_0 = (CommonTree)adaptor.nil();
|
|
+ // 272:29: -> NULL
|
|
+ {
|
|
+ adaptor.addChild(root_0, (CommonTree)adaptor.create(NULL, "NULL"));
|
|
+ }
|
|
+
|
|
+
|
|
+ retval.tree = root_0;
|
|
+
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ }
|
|
+ retval.stop = input.LT(-1);
|
|
+
|
|
+ retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
|
|
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
|
|
+
|
|
+ }
|
|
+
|
|
+ catch (RecognitionException re) { throw re; }
|
|
+
|
|
+ finally {
|
|
+ // do for sure before leaving
|
|
+ }
|
|
+ return retval;
|
|
+ }
|
|
+ // $ANTLR end "listElement"
|
|
+
|
|
+ // Delegated rules
|
|
+
|
|
+
|
|
+
|
|
+ public static final BitSet FOLLOW_template_in_templateAndEOF139 = new BitSet(new long[]{0x0000000000000000L});
|
|
+ public static final BitSet FOLLOW_EOF_in_templateAndEOF141 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_element_in_template155 = new BitSet(new long[]{0x0000002180C00002L});
|
|
+ public static final BitSet FOLLOW_INDENT_in_element168 = new BitSet(new long[]{0x0000002000000000L});
|
|
+ public static final BitSet FOLLOW_COMMENT_in_element171 = new BitSet(new long[]{0x0000000100000000L});
|
|
+ public static final BitSet FOLLOW_NEWLINE_in_element173 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_INDENT_in_element181 = new BitSet(new long[]{0x0000002100C00000L});
|
|
+ public static final BitSet FOLLOW_singleElement_in_element183 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_singleElement_in_element200 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_compoundElement_in_element205 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_exprTag_in_singleElement216 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_TEXT_in_singleElement221 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_NEWLINE_in_singleElement226 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_COMMENT_in_singleElement231 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ifstat_in_compoundElement244 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_region_in_compoundElement249 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_LDELIM_in_exprTag260 = new BitSet(new long[]{0x0000005A06114100L});
|
|
+ public static final BitSet FOLLOW_expr_in_exprTag262 = new BitSet(new long[]{0x0000000001000200L});
|
|
+ public static final BitSet FOLLOW_SEMI_in_exprTag266 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_exprOptions_in_exprTag268 = new BitSet(new long[]{0x0000000001000000L});
|
|
+ public static final BitSet FOLLOW_RDELIM_in_exprTag273 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_INDENT_in_region305 = new BitSet(new long[]{0x0000000000800000L});
|
|
+ public static final BitSet FOLLOW_LDELIM_in_region310 = new BitSet(new long[]{0x0000000200000000L});
|
|
+ public static final BitSet FOLLOW_AT_in_region312 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_ID_in_region314 = new BitSet(new long[]{0x0000000001000000L});
|
|
+ public static final BitSet FOLLOW_RDELIM_in_region316 = new BitSet(new long[]{0x0000002180C00000L});
|
|
+ public static final BitSet FOLLOW_template_in_region322 = new BitSet(new long[]{0x0000000080800000L});
|
|
+ public static final BitSet FOLLOW_INDENT_in_region326 = new BitSet(new long[]{0x0000000000800000L});
|
|
+ public static final BitSet FOLLOW_LDELIM_in_region329 = new BitSet(new long[]{0x0000000400000000L});
|
|
+ public static final BitSet FOLLOW_END_in_region331 = new BitSet(new long[]{0x0000000001000000L});
|
|
+ public static final BitSet FOLLOW_RDELIM_in_region333 = new BitSet(new long[]{0x0000000100000002L});
|
|
+ public static final BitSet FOLLOW_NEWLINE_in_region344 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_LCURLY_in_subtemplate420 = new BitSet(new long[]{0x0000002182E00000L});
|
|
+ public static final BitSet FOLLOW_ID_in_subtemplate426 = new BitSet(new long[]{0x0000000010040000L});
|
|
+ public static final BitSet FOLLOW_COMMA_in_subtemplate430 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_ID_in_subtemplate435 = new BitSet(new long[]{0x0000000010040000L});
|
|
+ public static final BitSet FOLLOW_PIPE_in_subtemplate440 = new BitSet(new long[]{0x0000002180E00000L});
|
|
+ public static final BitSet FOLLOW_template_in_subtemplate445 = new BitSet(new long[]{0x0000000080200000L});
|
|
+ public static final BitSet FOLLOW_INDENT_in_subtemplate447 = new BitSet(new long[]{0x0000000000200000L});
|
|
+ public static final BitSet FOLLOW_RCURLY_in_subtemplate450 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_INDENT_in_ifstat491 = new BitSet(new long[]{0x0000000000800000L});
|
|
+ public static final BitSet FOLLOW_LDELIM_in_ifstat494 = new BitSet(new long[]{0x0000000000000010L});
|
|
+ public static final BitSet FOLLOW_IF_in_ifstat496 = new BitSet(new long[]{0x0000000000004000L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_ifstat498 = new BitSet(new long[]{0x0000005A06114500L});
|
|
+ public static final BitSet FOLLOW_conditional_in_ifstat502 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_ifstat504 = new BitSet(new long[]{0x0000000001000000L});
|
|
+ public static final BitSet FOLLOW_RDELIM_in_ifstat506 = new BitSet(new long[]{0x0000002180C00000L});
|
|
+ public static final BitSet FOLLOW_template_in_ifstat515 = new BitSet(new long[]{0x0000000080800000L});
|
|
+ public static final BitSet FOLLOW_INDENT_in_ifstat522 = new BitSet(new long[]{0x0000000000800000L});
|
|
+ public static final BitSet FOLLOW_LDELIM_in_ifstat525 = new BitSet(new long[]{0x0000000000000040L});
|
|
+ public static final BitSet FOLLOW_ELSEIF_in_ifstat527 = new BitSet(new long[]{0x0000000000004000L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_ifstat529 = new BitSet(new long[]{0x0000005A06114500L});
|
|
+ public static final BitSet FOLLOW_conditional_in_ifstat533 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_ifstat535 = new BitSet(new long[]{0x0000000001000000L});
|
|
+ public static final BitSet FOLLOW_RDELIM_in_ifstat537 = new BitSet(new long[]{0x0000002180C00000L});
|
|
+ public static final BitSet FOLLOW_template_in_ifstat541 = new BitSet(new long[]{0x0000000080800000L});
|
|
+ public static final BitSet FOLLOW_INDENT_in_ifstat551 = new BitSet(new long[]{0x0000000000800000L});
|
|
+ public static final BitSet FOLLOW_LDELIM_in_ifstat554 = new BitSet(new long[]{0x0000000000000020L});
|
|
+ public static final BitSet FOLLOW_ELSE_in_ifstat556 = new BitSet(new long[]{0x0000000001000000L});
|
|
+ public static final BitSet FOLLOW_RDELIM_in_ifstat558 = new BitSet(new long[]{0x0000002180C00000L});
|
|
+ public static final BitSet FOLLOW_template_in_ifstat562 = new BitSet(new long[]{0x0000000080800000L});
|
|
+ public static final BitSet FOLLOW_INDENT_in_ifstat570 = new BitSet(new long[]{0x0000000000800000L});
|
|
+ public static final BitSet FOLLOW_LDELIM_in_ifstat576 = new BitSet(new long[]{0x0000000000000080L});
|
|
+ public static final BitSet FOLLOW_ENDIF_in_ifstat578 = new BitSet(new long[]{0x0000000001000000L});
|
|
+ public static final BitSet FOLLOW_RDELIM_in_ifstat582 = new BitSet(new long[]{0x0000000100000002L});
|
|
+ public static final BitSet FOLLOW_NEWLINE_in_ifstat593 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_andConditional_in_conditional713 = new BitSet(new long[]{0x0000000020000002L});
|
|
+ public static final BitSet FOLLOW_OR_in_conditional717 = new BitSet(new long[]{0x0000005A06114500L});
|
|
+ public static final BitSet FOLLOW_andConditional_in_conditional720 = new BitSet(new long[]{0x0000000020000002L});
|
|
+ public static final BitSet FOLLOW_notConditional_in_andConditional733 = new BitSet(new long[]{0x0000000040000002L});
|
|
+ public static final BitSet FOLLOW_AND_in_andConditional737 = new BitSet(new long[]{0x0000005A06114500L});
|
|
+ public static final BitSet FOLLOW_notConditional_in_andConditional740 = new BitSet(new long[]{0x0000000040000002L});
|
|
+ public static final BitSet FOLLOW_BANG_in_notConditional753 = new BitSet(new long[]{0x0000005A06114500L});
|
|
+ public static final BitSet FOLLOW_notConditional_in_notConditional756 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_memberExpr_in_notConditional761 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ID_in_notConditionalExpr773 = new BitSet(new long[]{0x0000000000080002L});
|
|
+ public static final BitSet FOLLOW_DOT_in_notConditionalExpr784 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_ID_in_notConditionalExpr788 = new BitSet(new long[]{0x0000000000080002L});
|
|
+ public static final BitSet FOLLOW_DOT_in_notConditionalExpr814 = new BitSet(new long[]{0x0000000000004000L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_notConditionalExpr816 = new BitSet(new long[]{0x0000005A06114100L});
|
|
+ public static final BitSet FOLLOW_mapExpr_in_notConditionalExpr818 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_notConditionalExpr820 = new BitSet(new long[]{0x0000000000080002L});
|
|
+ public static final BitSet FOLLOW_option_in_exprOptions850 = new BitSet(new long[]{0x0000000000040002L});
|
|
+ public static final BitSet FOLLOW_COMMA_in_exprOptions854 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_option_in_exprOptions856 = new BitSet(new long[]{0x0000000000040002L});
|
|
+ public static final BitSet FOLLOW_ID_in_option883 = new BitSet(new long[]{0x0000000000001002L});
|
|
+ public static final BitSet FOLLOW_EQUALS_in_option893 = new BitSet(new long[]{0x0000005A06114100L});
|
|
+ public static final BitSet FOLLOW_exprNoComma_in_option895 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_memberExpr_in_exprNoComma1002 = new BitSet(new long[]{0x0000000000002002L});
|
|
+ public static final BitSet FOLLOW_COLON_in_exprNoComma1008 = new BitSet(new long[]{0x0000004002104000L});
|
|
+ public static final BitSet FOLLOW_mapTemplateRef_in_exprNoComma1010 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_mapExpr_in_expr1055 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_memberExpr_in_mapExpr1067 = new BitSet(new long[]{0x0000000000042002L});
|
|
+ public static final BitSet FOLLOW_COMMA_in_mapExpr1076 = new BitSet(new long[]{0x0000005A06114100L});
|
|
+ public static final BitSet FOLLOW_memberExpr_in_mapExpr1078 = new BitSet(new long[]{0x0000000000042000L});
|
|
+ public static final BitSet FOLLOW_COLON_in_mapExpr1084 = new BitSet(new long[]{0x0000004002104000L});
|
|
+ public static final BitSet FOLLOW_mapTemplateRef_in_mapExpr1086 = new BitSet(new long[]{0x0000000000002002L});
|
|
+ public static final BitSet FOLLOW_COLON_in_mapExpr1149 = new BitSet(new long[]{0x0000004002104000L});
|
|
+ public static final BitSet FOLLOW_mapTemplateRef_in_mapExpr1153 = new BitSet(new long[]{0x0000000000042002L});
|
|
+ public static final BitSet FOLLOW_COMMA_in_mapExpr1159 = new BitSet(new long[]{0x0000004002104000L});
|
|
+ public static final BitSet FOLLOW_mapTemplateRef_in_mapExpr1163 = new BitSet(new long[]{0x0000000000042002L});
|
|
+ public static final BitSet FOLLOW_qualifiedId_in_mapTemplateRef1210 = new BitSet(new long[]{0x0000000000004000L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_mapTemplateRef1212 = new BitSet(new long[]{0x0000005A0611C900L});
|
|
+ public static final BitSet FOLLOW_args_in_mapTemplateRef1214 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_mapTemplateRef1216 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_subtemplate_in_mapTemplateRef1238 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_mapTemplateRef1245 = new BitSet(new long[]{0x0000005A06114100L});
|
|
+ public static final BitSet FOLLOW_mapExpr_in_mapTemplateRef1247 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_mapTemplateRef1251 = new BitSet(new long[]{0x0000000000004000L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_mapTemplateRef1253 = new BitSet(new long[]{0x0000005A0611C100L});
|
|
+ public static final BitSet FOLLOW_argExprList_in_mapTemplateRef1255 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_mapTemplateRef1258 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_includeExpr_in_memberExpr1281 = new BitSet(new long[]{0x0000000000080002L});
|
|
+ public static final BitSet FOLLOW_DOT_in_memberExpr1292 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_ID_in_memberExpr1294 = new BitSet(new long[]{0x0000000000080002L});
|
|
+ public static final BitSet FOLLOW_DOT_in_memberExpr1320 = new BitSet(new long[]{0x0000000000004000L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_memberExpr1322 = new BitSet(new long[]{0x0000005A06114100L});
|
|
+ public static final BitSet FOLLOW_mapExpr_in_memberExpr1324 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_memberExpr1326 = new BitSet(new long[]{0x0000000000080002L});
|
|
+ public static final BitSet FOLLOW_ID_in_includeExpr1370 = new BitSet(new long[]{0x0000000000004000L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_includeExpr1372 = new BitSet(new long[]{0x0000005A0611C100L});
|
|
+ public static final BitSet FOLLOW_expr_in_includeExpr1374 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_includeExpr1377 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_SUPER_in_includeExpr1398 = new BitSet(new long[]{0x0000000000080000L});
|
|
+ public static final BitSet FOLLOW_DOT_in_includeExpr1400 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_ID_in_includeExpr1402 = new BitSet(new long[]{0x0000000000004000L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_includeExpr1404 = new BitSet(new long[]{0x0000005A0611C900L});
|
|
+ public static final BitSet FOLLOW_args_in_includeExpr1406 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_includeExpr1408 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_qualifiedId_in_includeExpr1427 = new BitSet(new long[]{0x0000000000004000L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_includeExpr1429 = new BitSet(new long[]{0x0000005A0611C900L});
|
|
+ public static final BitSet FOLLOW_args_in_includeExpr1431 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_includeExpr1433 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_AT_in_includeExpr1452 = new BitSet(new long[]{0x0000000000000100L});
|
|
+ public static final BitSet FOLLOW_SUPER_in_includeExpr1454 = new BitSet(new long[]{0x0000000000080000L});
|
|
+ public static final BitSet FOLLOW_DOT_in_includeExpr1456 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_ID_in_includeExpr1458 = new BitSet(new long[]{0x0000000000004000L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_includeExpr1460 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_includeExpr1464 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_AT_in_includeExpr1479 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_ID_in_includeExpr1481 = new BitSet(new long[]{0x0000000000004000L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_includeExpr1483 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_includeExpr1487 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_primary_in_includeExpr1505 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ID_in_primary1516 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_STRING_in_primary1521 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_TRUE_in_primary1526 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_FALSE_in_primary1531 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_subtemplate_in_primary1536 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_list_in_primary1541 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_primary1550 = new BitSet(new long[]{0x0000005A06114500L});
|
|
+ public static final BitSet FOLLOW_conditional_in_primary1553 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_primary1555 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_primary1566 = new BitSet(new long[]{0x0000005A06114100L});
|
|
+ public static final BitSet FOLLOW_expr_in_primary1568 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_primary1570 = new BitSet(new long[]{0x0000000000004002L});
|
|
+ public static final BitSet FOLLOW_LPAREN_in_primary1576 = new BitSet(new long[]{0x0000005A0611C100L});
|
|
+ public static final BitSet FOLLOW_argExprList_in_primary1578 = new BitSet(new long[]{0x0000000000008000L});
|
|
+ public static final BitSet FOLLOW_RPAREN_in_primary1581 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ID_in_qualifiedId1641 = new BitSet(new long[]{0x0000004000000002L});
|
|
+ public static final BitSet FOLLOW_SLASH_in_qualifiedId1659 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_ID_in_qualifiedId1661 = new BitSet(new long[]{0x0000004000000002L});
|
|
+ public static final BitSet FOLLOW_SLASH_in_qualifiedId1686 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_ID_in_qualifiedId1690 = new BitSet(new long[]{0x0000004000000002L});
|
|
+ public static final BitSet FOLLOW_argExprList_in_args1722 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_namedArg_in_args1727 = new BitSet(new long[]{0x0000000000040002L});
|
|
+ public static final BitSet FOLLOW_COMMA_in_args1731 = new BitSet(new long[]{0x0000000002000000L});
|
|
+ public static final BitSet FOLLOW_namedArg_in_args1733 = new BitSet(new long[]{0x0000000000040002L});
|
|
+ public static final BitSet FOLLOW_COMMA_in_args1739 = new BitSet(new long[]{0x0000000000000800L});
|
|
+ public static final BitSet FOLLOW_ELLIPSIS_in_args1741 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ELLIPSIS_in_args1761 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_arg_in_argExprList1774 = new BitSet(new long[]{0x0000000000040002L});
|
|
+ public static final BitSet FOLLOW_COMMA_in_argExprList1778 = new BitSet(new long[]{0x0000005A06114100L});
|
|
+ public static final BitSet FOLLOW_arg_in_argExprList1780 = new BitSet(new long[]{0x0000000000040002L});
|
|
+ public static final BitSet FOLLOW_exprNoComma_in_arg1797 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_ID_in_namedArg1806 = new BitSet(new long[]{0x0000000000001000L});
|
|
+ public static final BitSet FOLLOW_EQUALS_in_namedArg1808 = new BitSet(new long[]{0x0000005A06114100L});
|
|
+ public static final BitSet FOLLOW_arg_in_namedArg1810 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_LBRACK_in_list1835 = new BitSet(new long[]{0x0000000000020000L});
|
|
+ public static final BitSet FOLLOW_RBRACK_in_list1837 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_LBRACK_in_list1849 = new BitSet(new long[]{0x0000005A06174100L});
|
|
+ public static final BitSet FOLLOW_listElement_in_list1851 = new BitSet(new long[]{0x0000000000060000L});
|
|
+ public static final BitSet FOLLOW_COMMA_in_list1855 = new BitSet(new long[]{0x0000005A06174100L});
|
|
+ public static final BitSet FOLLOW_listElement_in_list1857 = new BitSet(new long[]{0x0000000000060000L});
|
|
+ public static final BitSet FOLLOW_RBRACK_in_list1862 = new BitSet(new long[]{0x0000000000000002L});
|
|
+ public static final BitSet FOLLOW_exprNoComma_in_listElement1882 = new BitSet(new long[]{0x0000000000000002L});
|
|
+}
|
|
diff -urEbwBN src/main/java/STParser.tokens src/main/java/STParser.tokens
|
|
--- src/main/java/STParser.tokens 1970-01-01 01:00:00.000000000 +0100
|
|
+++ src/main/java/STParser.tokens 2024-09-21 13:57:52.307857206 +0200
|
|
@@ -0,0 +1,79 @@
|
|
+RBRACK=17
|
|
+LBRACK=16
|
|
+ELSE=5
|
|
+ELLIPSIS=11
|
|
+LCURLY=20
|
|
+BANG=10
|
|
+EQUALS=12
|
|
+TEXT=22
|
|
+ID=25
|
|
+SEMI=9
|
|
+LPAREN=14
|
|
+IF=4
|
|
+ELSEIF=6
|
|
+COLON=13
|
|
+RPAREN=15
|
|
+WS=27
|
|
+COMMA=18
|
|
+RCURLY=21
|
|
+ENDIF=7
|
|
+RDELIM=24
|
|
+SUPER=8
|
|
+DOT=19
|
|
+LDELIM=23
|
|
+STRING=26
|
|
+PIPE=28
|
|
+OR=29
|
|
+AND=30
|
|
+INDENT=31
|
|
+NEWLINE=32
|
|
+AT=33
|
|
+END=34
|
|
+TRUE=35
|
|
+FALSE=36
|
|
+COMMENT=37
|
|
+SLASH=38
|
|
+ARGS=39
|
|
+ELEMENTS=40
|
|
+EXEC_FUNC=41
|
|
+EXPR=42
|
|
+INCLUDE=43
|
|
+INCLUDE_IND=44
|
|
+INCLUDE_REGION=45
|
|
+INCLUDE_SUPER=46
|
|
+INCLUDE_SUPER_REGION=47
|
|
+INDENTED_EXPR=48
|
|
+LIST=49
|
|
+MAP=50
|
|
+NULL=51
|
|
+OPTIONS=52
|
|
+PROP=53
|
|
+PROP_IND=54
|
|
+REGION=55
|
|
+SUBTEMPLATE=56
|
|
+TO_STR=57
|
|
+ZIP=58
|
|
+'...'=11
|
|
+'super'=8
|
|
+'|'=28
|
|
+'!'=10
|
|
+'}'=21
|
|
+'else'=5
|
|
+'if'=4
|
|
+'{'=20
|
|
+'elseif'=6
|
|
+';'=9
|
|
+'='=12
|
|
+':'=13
|
|
+'('=14
|
|
+'['=16
|
|
+','=18
|
|
+'.'=19
|
|
+'endif'=7
|
|
+')'=15
|
|
+']'=17
|
|
+'||'=29
|
|
+'&&'=30
|
|
+'@'=33
|
|
+'@end'=34
|
|
+'/'=38
|