/* Generated by: JavaCC 21 Parser Generator. FMParser.java */ package freemarker.core.parser; import java.util.*; import java.util.concurrent.CancellationException; import java.util.logging.*; import java.io.*; import static freemarker.core.parser.FMConstants.TokenType.*; import freemarker.core.ast.*; import freemarker.template.utility.StringUtil; import freemarker.template.*; import java.security.CodeSource; @SuppressWarnings("unused") public class FMParser implements FMConstants { // Necessary for adding macros and setting location info. Template template; private String templateName; private boolean stripText; // variables that keep track of whether we are in a loop or a switch. private int contentNesting; // for stripText private int trimBlockNesting; /** * Create an FM expression parser using a string. */ static public FMParser createExpressionParser(String s) { FMLexer lexer; try { lexer= new FMLexer(new StringReader(s)); } catch(Exception e) { throw new RuntimeException(e); } lexer.SwitchTo(FMConstants.EXPRESSION); return new FMParser(lexer); } /** * Constructs a new parser object. * @param template The template associated with this parser. * @param reader The character stream to use as input */ public FMParser(Template template, Reader reader) { this(reader); this.template= template; this.templateName= template!=null?template.getName(): ""; token_source.templateName= templateName; token_source.setTabSize(1); } public FMParser(Template template, Reader reader, int syntaxSetting) { this(template, reader); if (syntaxSetting!=Configuration.AUTO_DETECT_TAG_SYNTAX) { token_source.setAltDirectiveSyntax(syntaxSetting== Configuration.SQUARE_BRACKET_TAG_SYNTAX); } } public FMParser(Template template, String input, int syntaxSetting) { this(template, new StringReader(input), syntaxSetting); } public void setTemplate(Template t) { this.template= t; } private String getErrorStart(Token t) { return"Error in template: "+template.getName()+"\non line "+t.beginLine+", column "+t.beginColumn; } public boolean isSyntaxSet() { return token_source.directiveSyntaxEstablished; } public boolean isAltDirectiveSyntax() { return token_source.altDirectiveSyntax; } /** * Used in error recovery, scans forward for a * token of a given kind, and optionally consumes it. * @return the token right before the one of the kind * that we were scanning ahead for */ private Token recoverToToken(TokenType type, boolean consume) { Token t= this.currentToken, prevToken; do { prevToken= t; t= getNextToken(); } while (t.getType()!=type&&t.getType()!=TokenType.EOF); if (!consume) { this.currentToken= prevToken; } return prevToken; } private static final java.util.logging.Logger LOGGER= Logger.getLogger(FMParser.class.getName()); public static void setLogLevel(Level level) { LOGGER.setLevel(level); Logger.getGlobal().getParent().getHandlers()[0].setLevel(level); } static final int UNLIMITED= Integer.MAX_VALUE; // The last token successfully "consumed" Token currentToken; private TokenType nextTokenType; private Token currentLookaheadToken; private int remainingLookahead; // private TokenType upToTokenType; // private EnumSet upToFirstSet; private boolean stopAtScanLimit; private Token lastParsedToken; //private Token nextToken; //REVISIT //private EnumSet currentFollowSet; private boolean cancelled; public void cancel() { cancelled= true; } public boolean isCancelled() { return cancelled; } /** Generated Lexer. */ public FMLexer token_source; public void setInputSource(String inputSource) { token_source.setInputSource(inputSource); } String getInputSource() { return token_source.getInputSource(); } //================================= // Generated constructors //================================= public FMParser(String inputSource, CharSequence content) { this(new FMLexer(inputSource, content)); } public FMParser(CharSequence content) { this("input", content); } public FMParser(java.io.InputStream stream) { this(new InputStreamReader(stream)); } public FMParser(Reader reader) { this(new FMLexer(reader)); } /** Constructor with user supplied Lexer. */ public FMParser(FMLexer lexer) { token_source= lexer; currentToken= new Token(); } final public Token getNextToken() { if (currentToken.getNext()!=null) currentToken= currentToken.getNext(); else { Token nextToken= token_source.getNextToken(); currentToken.setNext(nextToken); currentToken= nextToken; } return currentToken; } /** Get the specific Token index ahead in the stream. */ final public Token getToken(int index) { Token t= currentToken; for (int i= 0; i nots= new ArrayList (); // Code for OneOrMore specified on line 757 of FM.javacc do { // Code for RegexpRef specified on line 758 of FM.javacc t= consumeToken(TokenType.EXCLAM); // Code for CodeBlock specified on line 758 of FM.javacc nots.add(t); } while (nextTokenType()== TokenType.EXCLAM); // Code for NonTerminal specified on line 760 of FM.javacc pushOntoCallStack("NotExpression", "FM.javacc", 760, 4); try { exp= PrimaryExpression(); } finally { popCallStack(); } // Code for CodeBlock specified on line 761 of FM.javacc for (int i= 0; i values= new ArrayList (); Token begin, end; // Code for RegexpRef specified on line 979 of FM.javacc begin= consumeToken(TokenType.OPEN_BRACKET); // Code for ZeroOrOne specified on line 980 of FM.javacc if (first_set$FM_javacc$line_981$column_7.contains(nextTokenType())) { // Code for NonTerminal specified on line 981 of FM.javacc pushOntoCallStack("ListLiteral", "FM.javacc", 981, 7); try { exp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 981 of FM.javacc values.add(exp); // Code for ZeroOrMore specified on line 982 of FM.javacc while (first_set$FM_javacc$line_983$column_10.contains(nextTokenType())) { // Code for ZeroOrOne specified on line 983 of FM.javacc if (nextTokenType()== TokenType.COMMA) { // Code for RegexpRef specified on line 983 of FM.javacc consumeToken(TokenType.COMMA); } // Code for NonTerminal specified on line 984 of FM.javacc pushOntoCallStack("ListLiteral", "FM.javacc", 984, 10); try { exp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 984 of FM.javacc values.add(exp); } } // Code for RegexpRef specified on line 987 of FM.javacc end= consumeToken(TokenType.CLOSE_BRACKET); // Code for CodeBlock specified on line 988 of FM.javacc ListLiteral result= new ListLiteral(values); result.setLocation(template, begin, end); return result; } static private final EnumSet NumberLiteral_FIRST_SET= EnumSet.of(TokenType.INTEGER, TokenType.DECIMAL); // FM.javacc, line 995 final public Expression NumberLiteral() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 995 of FM.javacc"); if (cancelled) throw new CancellationException(); Token op= null, t; Number number; // Code for ExpansionChoice specified on line 1001 of FM.javacc if (nextTokenType()== TokenType.INTEGER) { // Code for RegexpRef specified on line 1001 of FM.javacc t= consumeToken(TokenType.INTEGER); } else if (nextTokenType()== TokenType.DECIMAL) { // Code for RegexpRef specified on line 1003 of FM.javacc t= consumeToken(TokenType.DECIMAL); } else { pushOntoCallStack("NumberLiteral", "FM.javacc", 1001, 7); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1001$column_7, parsingStack); } // Code for CodeBlock specified on line 1005 of FM.javacc String s= t.getImage(); Number n= template!=null?template.getArithmeticEngine().toNumber(s): new java.math.BigDecimal(s); Expression result= new NumberLiteral(n); Token startToken= (op!=null)?op: t; result.setLocation(template, startToken, t); return result; } // FM.javacc, line 1015 final public Identifier Identifier() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1015 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t; // Code for RegexpRef specified on line 1019 of FM.javacc t= consumeToken(TokenType.ID); // Code for CodeBlock specified on line 1020 of FM.javacc Identifier id= new Identifier(t.getImage()); id.setLocation(template, t, t); return id; } static private final EnumSet IdentifierOrStringLiteral_FIRST_SET= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.ID); // FM.javacc, line 1027 final public Expression IdentifierOrStringLiteral() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1027 of FM.javacc"); if (cancelled) throw new CancellationException(); Expression exp; // Code for ExpansionChoice specified on line 1032 of FM.javacc if (nextTokenType()== TokenType.ID) { // Code for NonTerminal specified on line 1032 of FM.javacc pushOntoCallStack("IdentifierOrStringLiteral", "FM.javacc", 1032, 7); try { exp= Identifier(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.STRING_LITERAL||nextTokenType== TokenType.RAW_STRING) { // Code for NonTerminal specified on line 1034 of FM.javacc pushOntoCallStack("IdentifierOrStringLiteral", "FM.javacc", 1034, 7); try { exp= StringLiteral(); } finally { popCallStack(); } } else { pushOntoCallStack("IdentifierOrStringLiteral", "FM.javacc", 1032, 7); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1032$column_7, parsingStack); } // Code for CodeBlock specified on line 1036 of FM.javacc return exp; } // FM.javacc, line 1041 final public BuiltinVariable BuiltinVariable() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1041 of FM.javacc"); if (cancelled) throw new CancellationException(); Token dot, name; // Code for RegexpRef specified on line 1045 of FM.javacc dot= consumeToken(TokenType.DOT); // Code for RegexpRef specified on line 1046 of FM.javacc name= consumeToken(TokenType.ID); // Code for CodeBlock specified on line 1047 of FM.javacc BuiltinVariable result= null; try { result= new BuiltinVariable(name.getImage()); } catch(ParseException pe) { pe.lineNumber= dot.beginLine; pe.columnNumber= dot.beginColumn; throw pe; } result.setLocation(template, dot, name); return result; } /** * Production that builds up an expression * using the dot or dynamic key name * or the args list if this is a method invocation. */ // FM.javacc, line 1066 final public Expression AddSubExpression(Expression exp) throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1066 of FM.javacc"); if (cancelled) throw new CancellationException(); Expression result= null; // Code for ExpansionChoice specified on line 1071 of FM.javacc if (nextTokenType()== TokenType.DOT) { // Code for NonTerminal specified on line 1071 of FM.javacc pushOntoCallStack("AddSubExpression", "FM.javacc", 1071, 8); try { result= DotVariable(exp); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.OPEN_BRACKET) { // Code for NonTerminal specified on line 1073 of FM.javacc pushOntoCallStack("AddSubExpression", "FM.javacc", 1073, 8); try { result= DynamicKey(exp); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.OPEN_PAREN) { // Code for NonTerminal specified on line 1075 of FM.javacc pushOntoCallStack("AddSubExpression", "FM.javacc", 1075, 8); try { result= MethodArgs(exp); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.BUILT_IN) { // Code for NonTerminal specified on line 1077 of FM.javacc pushOntoCallStack("AddSubExpression", "FM.javacc", 1077, 8); try { result= BuiltIn(exp); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.EXISTS) { // Code for NonTerminal specified on line 1079 of FM.javacc pushOntoCallStack("AddSubExpression", "FM.javacc", 1079, 8); try { result= Exists(exp); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.EXCLAM) { // Code for NonTerminal specified on line 1081 of FM.javacc pushOntoCallStack("AddSubExpression", "FM.javacc", 1081, 8); try { result= DefaultTo(exp); } finally { popCallStack(); } } else { pushOntoCallStack("AddSubExpression", "FM.javacc", 1071, 8); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1071$column_8, parsingStack); } // Code for CodeBlock specified on line 1083 of FM.javacc return result; } // FM.javacc, line 1088 final public Expression DefaultTo(Expression exp) throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1088 of FM.javacc"); if (cancelled) throw new CancellationException(); Expression rhs= null; Token t; // Code for RegexpRef specified on line 1094 of FM.javacc t= consumeToken(TokenType.EXCLAM); // Code for ZeroOrOne specified on line 1095 of FM.javacc if ((getToken(1).getType()!=TokenType.ID||getToken(2).getType()!=TokenType.EQUALS)&&scan$FM_javacc$line_1096$column_10()) { // Code for NonTerminal specified on line 1097 of FM.javacc pushOntoCallStack("DefaultTo", "FM.javacc", 1097, 13); try { rhs= PrimaryExpression(); } finally { popCallStack(); } } // Code for CodeBlock specified on line 1100 of FM.javacc DefaultToExpression result= new DefaultToExpression(exp, rhs); if (rhs== null) { result.setLocation(template, exp, t); } else { result.setLocation(template, exp, rhs); } return result; } // FM.javacc, line 1112 final public Expression Exists(Expression exp) throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1112 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t; // Code for RegexpRef specified on line 1116 of FM.javacc t= consumeToken(TokenType.EXISTS); // Code for CodeBlock specified on line 1117 of FM.javacc ExistsExpression result= new ExistsExpression(exp); result.setLocation(template, exp, t); return result; } // FM.javacc, line 1126 final public Expression BuiltIn(Expression exp) throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1126 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t= null; // Code for RegexpRef specified on line 1130 of FM.javacc consumeToken(TokenType.BUILT_IN); // Code for RegexpRef specified on line 1131 of FM.javacc t= consumeToken(TokenType.ID); // Code for CodeBlock specified on line 1132 of FM.javacc BuiltInExpression result= new BuiltInExpression(exp, t.getImage()); result.setLocation(template, exp, t); return result; } /** * production for when a key is specified by + keyname */ // FM.javacc, line 1142 final public Expression DotVariable(Expression exp) throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1142 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t; // Code for RegexpRef specified on line 1146 of FM.javacc consumeToken(TokenType.DOT); // Code for CodeBlock specified on line 1146 of FM.javacc token_source.justAfterDot= true; // Code for RegexpRef specified on line 1147 of FM.javacc t= consumeToken(TokenType.ID); // Code for CodeBlock specified on line 1147 of FM.javacc token_source.justAfterDot= false; // Code for CodeBlock specified on line 1148 of FM.javacc Dot dot= new Dot(exp, t.getImage()); dot.setLocation(template, exp, t); return dot; } /** * production for when the key is specified * in brackets. */ // FM.javacc, line 1159 final public Expression DynamicKey(Expression exp) throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1159 of FM.javacc"); if (cancelled) throw new CancellationException(); Expression arg; Token t; // Code for RegexpRef specified on line 1164 of FM.javacc consumeToken(TokenType.OPEN_BRACKET); // Code for NonTerminal specified on line 1165 of FM.javacc pushOntoCallStack("DynamicKey", "FM.javacc", 1165, 4); try { arg= Exp(); } finally { popCallStack(); } // Code for RegexpRef specified on line 1166 of FM.javacc t= consumeToken(TokenType.CLOSE_BRACKET); // Code for CodeBlock specified on line 1167 of FM.javacc DynamicKeyName dkn= new DynamicKeyName(exp, arg); dkn.setLocation(template, exp, t); return dkn; } /** * production for an arglist part of a method invocation. */ // FM.javacc, line 1177 final public MethodCall MethodArgs(Expression exp) throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1177 of FM.javacc"); if (cancelled) throw new CancellationException(); ArgsList args= new PositionalArgsList(); Token end; // Code for RegexpRef specified on line 1182 of FM.javacc consumeToken(TokenType.OPEN_PAREN); // Code for ZeroOrOne specified on line 1183 of FM.javacc if (first_set$FM_javacc$line_1183$column_7.contains(nextTokenType())) { // Code for NonTerminal specified on line 1183 of FM.javacc pushOntoCallStack("MethodArgs", "FM.javacc", 1183, 7); try { args= ArgsList(); } finally { popCallStack(); } } // Code for RegexpRef specified on line 1184 of FM.javacc end= consumeToken(TokenType.CLOSE_PAREN); // Code for CodeBlock specified on line 1185 of FM.javacc MethodCall result= new MethodCall(exp, args); result.setLocation(template, exp, end); args.setLocationInfoIfAbsent(result); return result; } static private final EnumSet StringLiteral_FIRST_SET= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING); // FM.javacc, line 1193 final public Expression StringLiteral() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1193 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t; boolean raw= false; // Code for ExpansionChoice specified on line 1199 of FM.javacc if (nextTokenType()== TokenType.STRING_LITERAL) { // Code for RegexpRef specified on line 1199 of FM.javacc t= consumeToken(TokenType.STRING_LITERAL); } else if (nextTokenType()== TokenType.RAW_STRING) { // Code for RegexpRef specified on line 1201 of FM.javacc t= consumeToken(TokenType.RAW_STRING); // Code for CodeBlock specified on line 1201 of FM.javacc raw= true; } else { pushOntoCallStack("StringLiteral", "FM.javacc", 1199, 6); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1199$column_6, parsingStack); } // Code for CodeBlock specified on line 1203 of FM.javacc String s= t.getImage(); // Get rid of the quotes. s= s.substring(1, s.length()-1); if (raw) { s= s.substring(1); } else try { s= StringUtil.FTLStringLiteralDec(s); } catch(ParseException pe) { InvalidExpression invalid= new InvalidExpression("Malformed string literal: "+pe.getMessage()); invalid.setLocation(template, t, t); return invalid; } StringLiteral result= new StringLiteral(s, raw); result.setLocation(template, t, t); return result; } static private final EnumSet BooleanLiteral_FIRST_SET= EnumSet.of(TokenType.FALSE, TokenType.TRUE); // FM.javacc, line 1223 final public Expression BooleanLiteral() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1223 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t; Expression result; // Code for ExpansionChoice specified on line 1229 of FM.javacc if (nextTokenType()== TokenType.FALSE) { // Code for RegexpRef specified on line 1229 of FM.javacc t= consumeToken(TokenType.FALSE); // Code for CodeBlock specified on line 1229 of FM.javacc result= new BooleanLiteral(false); } else if (nextTokenType()== TokenType.TRUE) { // Code for RegexpRef specified on line 1231 of FM.javacc t= consumeToken(TokenType.TRUE); // Code for CodeBlock specified on line 1231 of FM.javacc result= new BooleanLiteral(true); } else { pushOntoCallStack("BooleanLiteral", "FM.javacc", 1229, 8); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1229$column_8, parsingStack); } // Code for CodeBlock specified on line 1233 of FM.javacc result.setLocation(template, t, t); return result; } // FM.javacc, line 1239 final public Expression NullLiteral() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1239 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t; // Code for RegexpRef specified on line 1243 of FM.javacc t= consumeToken(TokenType.NULL); // Code for CodeBlock specified on line 1244 of FM.javacc Expression result= new NullLiteral(); result.setLocation(template, t, t); return result; } // FM.javacc, line 1252 final public HashLiteral HashLiteral() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1252 of FM.javacc"); if (cancelled) throw new CancellationException(); Token begin, end; Expression key, value; ArrayList keys= new ArrayList (); ArrayList values= new ArrayList (); // Code for RegexpRef specified on line 1259 of FM.javacc begin= consumeToken(TokenType.OPEN_BRACE); // Code for ZeroOrOne specified on line 1260 of FM.javacc if (first_set$FM_javacc$line_1261$column_8.contains(nextTokenType())) { // Code for NonTerminal specified on line 1261 of FM.javacc pushOntoCallStack("HashLiteral", "FM.javacc", 1261, 8); try { key= Exp(); } finally { popCallStack(); } // Code for ExpansionChoice specified on line 1262 of FM.javacc if (nextTokenType()== TokenType.COMMA) { // Code for RegexpRef specified on line 1262 of FM.javacc consumeToken(TokenType.COMMA); } else if (nextTokenType()== TokenType.COLON) { // Code for RegexpRef specified on line 1262 of FM.javacc consumeToken(TokenType.COLON); } else { pushOntoCallStack("HashLiteral", "FM.javacc", 1262, 9); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1262$column_9, parsingStack); } // Code for NonTerminal specified on line 1263 of FM.javacc pushOntoCallStack("HashLiteral", "FM.javacc", 1263, 8); try { value= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1264 of FM.javacc keys.add(key); values.add(value); // Code for ZeroOrMore specified on line 1268 of FM.javacc while (nextTokenType()== TokenType.COMMA) { // Code for RegexpRef specified on line 1269 of FM.javacc consumeToken(TokenType.COMMA); // Code for NonTerminal specified on line 1270 of FM.javacc pushOntoCallStack("HashLiteral", "FM.javacc", 1270, 12); try { key= Exp(); } finally { popCallStack(); } // Code for ExpansionChoice specified on line 1271 of FM.javacc if (nextTokenType()== TokenType.COMMA) { // Code for RegexpRef specified on line 1271 of FM.javacc consumeToken(TokenType.COMMA); } else if (nextTokenType()== TokenType.COLON) { // Code for RegexpRef specified on line 1271 of FM.javacc consumeToken(TokenType.COLON); } else { pushOntoCallStack("HashLiteral", "FM.javacc", 1271, 13); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1271$column_13, parsingStack); } // Code for NonTerminal specified on line 1272 of FM.javacc pushOntoCallStack("HashLiteral", "FM.javacc", 1272, 12); try { value= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1273 of FM.javacc keys.add(key); values.add(value); } } // Code for RegexpRef specified on line 1279 of FM.javacc end= consumeToken(TokenType.CLOSE_BRACE); // Code for CodeBlock specified on line 1280 of FM.javacc HashLiteral result= new HashLiteral(keys, values); result.setLocation(template, begin, end); return result; } /** * A production representing the ${...} * that outputs a variable. */ // FM.javacc, line 1291 final public TemplateElement StringOutput() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1291 of FM.javacc"); if (cancelled) throw new CancellationException(); Expression exp; Token begin, end; boolean unclosed= false; // Code for RegexpRef specified on line 1297 of FM.javacc begin= consumeToken(TokenType.OUTPUT_ESCAPE); // Code for NonTerminal specified on line 1298 of FM.javacc pushOntoCallStack("StringOutput", "FM.javacc", 1298, 4); try { exp= Expression(begin, TokenType.CLOSE_BRACE, false); } finally { popCallStack(); } // Code for TryBlock specified on line 1299 of FM.javacc try { // Code for RegexpRef specified on line 1300 of FM.javacc end= consumeToken(TokenType.CLOSE_BRACE); } catch(ParseException pe2) { end= recoverToToken(TokenType.CLOSE_BRACE, true); exp= new InvalidExpression("The expression inside the interpolation is invalid."); exp.setLocation(template, begin.next, end); if (end.next.getType()!=TokenType.EOF) { end= end.next; } else { unclosed= true; } } // Code for CodeBlock specified on line 1312 of FM.javacc TemplateElement result; if (unclosed) { result= new UnclosedElement("Unclosed output interpolation, expecting a closing '}'"); } else { result= new Interpolation(exp); } result.setLocation(template, begin, end); return result; } // FM.javacc, line 1324 final public NumericalOutput NumericalOutput() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1324 of FM.javacc"); if (cancelled) throw new CancellationException(); Expression exp; Token fmt= null, begin, end; // Code for RegexpRef specified on line 1329 of FM.javacc begin= consumeToken(TokenType.NUMERICAL_ESCAPE); // Code for NonTerminal specified on line 1330 of FM.javacc pushOntoCallStack("NumericalOutput", "FM.javacc", 1330, 4); try { exp= Exp(); } finally { popCallStack(); } // Code for ZeroOrOne specified on line 1331 of FM.javacc if (nextTokenType()== TokenType.SEMICOLON) { // Code for RegexpRef specified on line 1332 of FM.javacc consumeToken(TokenType.SEMICOLON); // Code for RegexpRef specified on line 1333 of FM.javacc fmt= consumeToken(TokenType.ID); } // Code for RegexpRef specified on line 1335 of FM.javacc end= consumeToken(TokenType.CLOSE_BRACE); // Code for CodeBlock specified on line 1336 of FM.javacc String formatString= fmt== null?null: fmt.getImage(); NumericalOutput result= new NumericalOutput(exp, formatString); result.setLocation(template, begin, end); return result; } // FM.javacc, line 1344 final public TemplateElement If() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1344 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end, t; Expression condition; TemplateElement block; IfBlock ifBlock; ConditionalBlock cblock; // Code for RegexpRef specified on line 1352 of FM.javacc start= consumeToken(TokenType.IF); // Code for NonTerminal specified on line 1353 of FM.javacc pushOntoCallStack("If", "FM.javacc", 1353, 4); try { condition= Exp(); } finally { popCallStack(); } // Code for RegexpRef specified on line 1354 of FM.javacc consumeToken(TokenType.DIRECTIVE_END); // Code for NonTerminal specified on line 1355 of FM.javacc pushOntoCallStack("If", "FM.javacc", 1355, 4); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1356 of FM.javacc cblock= new ConditionalBlock(condition, block, true); cblock.setLocation(template, start, block); ifBlock= new IfBlock(cblock); // Code for ZeroOrMore specified on line 1361 of FM.javacc while (nextTokenType()== TokenType.ELSE_IF) { // Code for RegexpRef specified on line 1362 of FM.javacc t= consumeToken(TokenType.ELSE_IF); // Code for NonTerminal specified on line 1363 of FM.javacc pushOntoCallStack("If", "FM.javacc", 1363, 8); try { condition= Exp(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1364 of FM.javacc pushOntoCallStack("If", "FM.javacc", 1364, 8); try { LooseDirectiveEnd(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1365 of FM.javacc pushOntoCallStack("If", "FM.javacc", 1365, 8); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1366 of FM.javacc cblock= new ConditionalBlock(condition, block, false); cblock.setLocation(template, t, block); ifBlock.addBlock(cblock); } // Code for ZeroOrOne specified on line 1372 of FM.javacc if (nextTokenType()== TokenType.ELSE) { // Code for RegexpRef specified on line 1373 of FM.javacc t= consumeToken(TokenType.ELSE); // Code for NonTerminal specified on line 1374 of FM.javacc pushOntoCallStack("If", "FM.javacc", 1374, 10); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1375 of FM.javacc cblock= new ConditionalBlock(null, block, false); cblock.setLocation(template, t, block); ifBlock.addBlock(cblock); } // Code for NonTerminal specified on line 1381 of FM.javacc pushOntoCallStack("If", "FM.javacc", 1381, 4); try { end= CloseDirectiveBlock("if"); } finally { popCallStack(); } // Code for CodeBlock specified on line 1382 of FM.javacc ifBlock.setLocation(template, start, end); return ifBlock; } // FM.javacc, line 1388 final public AttemptBlock Attempt() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1388 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end; TemplateElement block= null, recoveryBlock; ParseException problem= null; // Code for RegexpRef specified on line 1394 of FM.javacc start= consumeToken(TokenType._ATTEMPT); // Code for NonTerminal specified on line 1395 of FM.javacc pushOntoCallStack("Attempt", "FM.javacc", 1395, 4); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1406 of FM.javacc pushOntoCallStack("Attempt", "FM.javacc", 1406, 4); try { /* try { block=OptionalBlock } catch (ParseException pe) { recoverToToken(TokenType._RECOVER, false); problem = pe; } catch (LexicalException tme) { recoverToToken(TokenType._RECOVER, false); problem = new ParseException(tme.getMessage()); }*/ recoveryBlock= Recover(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1407 of FM.javacc pushOntoCallStack("Attempt", "FM.javacc", 1407, 4); try { end= CloseDirectiveBlock("attempt, recover"); } finally { popCallStack(); } // Code for CodeBlock specified on line 1408 of FM.javacc AttemptBlock result= new AttemptBlock(block, recoveryBlock); result.setLocation(template, start, end); if (problem!=null) { ParsingProblem pp= new ParsingProblem(problem.getMessage(), result); result.addParsingProblem(pp); } return result; } // FM.javacc, line 1419 final public RecoveryBlock Recover() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1419 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start; TemplateElement block; // Code for RegexpRef specified on line 1424 of FM.javacc start= consumeToken(TokenType._RECOVER); // Code for NonTerminal specified on line 1425 of FM.javacc pushOntoCallStack("Recover", "FM.javacc", 1425, 4); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1426 of FM.javacc RecoveryBlock result= new RecoveryBlock(block); result.setLocation(template, start, block); return result; } // FM.javacc, line 1433 final public TemplateElement List() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1433 of FM.javacc"); if (cancelled) throw new CancellationException(); Expression exp; Token index, start, end, as= null, directiveEnd= null; TemplateElement block; // Code for RegexpRef specified on line 1439 of FM.javacc start= consumeToken(TokenType.LIST); // Code for NonTerminal specified on line 1440 of FM.javacc pushOntoCallStack("List", "FM.javacc", 1440, 4); try { exp= Expression(start, TokenType.AS, false); } finally { popCallStack(); } // Code for RegexpRef specified on line 1441 of FM.javacc consumeToken(TokenType.AS); // Code for RegexpRef specified on line 1442 of FM.javacc index= consumeToken(TokenType.ID); // Code for RegexpRef specified on line 1443 of FM.javacc consumeToken(TokenType.DIRECTIVE_END); // Code for NonTerminal specified on line 1444 of FM.javacc pushOntoCallStack("List", "FM.javacc", 1444, 4); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1445 of FM.javacc pushOntoCallStack("List", "FM.javacc", 1445, 4); try { end= CloseDirectiveBlock("list"); } finally { popCallStack(); } // Code for CodeBlock specified on line 1446 of FM.javacc IteratorBlock result= new IteratorBlock(exp, index.getImage(), block, false); result.setLocation(template, start, end); return result; } // FM.javacc, line 1456 final public IteratorBlock ForEach() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1456 of FM.javacc"); if (cancelled) throw new CancellationException(); Expression exp; Token index, start, end; TemplateElement block; // Code for RegexpRef specified on line 1462 of FM.javacc start= consumeToken(TokenType.FOREACH); // Code for RegexpRef specified on line 1463 of FM.javacc index= consumeToken(TokenType.ID); // Code for RegexpRef specified on line 1464 of FM.javacc consumeToken(TokenType.IN); // Code for NonTerminal specified on line 1465 of FM.javacc pushOntoCallStack("ForEach", "FM.javacc", 1465, 4); try { exp= Exp(); } finally { popCallStack(); } // Code for RegexpRef specified on line 1466 of FM.javacc consumeToken(TokenType.DIRECTIVE_END); // Code for NonTerminal specified on line 1467 of FM.javacc pushOntoCallStack("ForEach", "FM.javacc", 1467, 4); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1468 of FM.javacc pushOntoCallStack("ForEach", "FM.javacc", 1468, 4); try { end= CloseDirectiveBlock("foreach"); } finally { popCallStack(); } // Code for CodeBlock specified on line 1469 of FM.javacc IteratorBlock result= new IteratorBlock(exp, index.getImage(), block, true); result.setLocation(template, start, end); return result; } // FM.javacc, line 1479 final public VisitNode Visit() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1479 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end; Expression targetNode, namespaces= null; // Code for RegexpRef specified on line 1484 of FM.javacc start= consumeToken(TokenType.VISIT); // Code for NonTerminal specified on line 1485 of FM.javacc pushOntoCallStack("Visit", "FM.javacc", 1485, 4); try { targetNode= Exp(); } finally { popCallStack(); } // Code for ZeroOrOne specified on line 1486 of FM.javacc if (nextTokenType()== TokenType.USING) { // Code for RegexpRef specified on line 1487 of FM.javacc consumeToken(TokenType.USING); // Code for NonTerminal specified on line 1488 of FM.javacc pushOntoCallStack("Visit", "FM.javacc", 1488, 8); try { namespaces= Exp(); } finally { popCallStack(); } } // Code for NonTerminal specified on line 1490 of FM.javacc pushOntoCallStack("Visit", "FM.javacc", 1490, 4); try { end= LooseDirectiveEnd(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1491 of FM.javacc VisitNode result= new VisitNode(targetNode, namespaces); result.setLocation(template, start, end); return result; } // FM.javacc, line 1498 final public RecurseNode Recurse() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1498 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end= null; Expression node= null, namespaces= null; // Code for ExpansionChoice specified on line 1504 of FM.javacc if (nextTokenType()== TokenType.SIMPLE_RECURSE) { // Code for RegexpRef specified on line 1504 of FM.javacc start= consumeToken(TokenType.SIMPLE_RECURSE); } else if (nextTokenType()== TokenType.RECURSE) { // Code for RegexpRef specified on line 1507 of FM.javacc start= consumeToken(TokenType.RECURSE); // Code for ZeroOrOne specified on line 1508 of FM.javacc if (first_set$FM_javacc$line_1509$column_13.contains(nextTokenType())) { // Code for NonTerminal specified on line 1509 of FM.javacc pushOntoCallStack("Recurse", "FM.javacc", 1509, 13); try { node= Exp(); } finally { popCallStack(); } } // Code for ZeroOrOne specified on line 1511 of FM.javacc if (nextTokenType()== TokenType.USING) { // Code for RegexpRef specified on line 1512 of FM.javacc consumeToken(TokenType.USING); // Code for NonTerminal specified on line 1513 of FM.javacc pushOntoCallStack("Recurse", "FM.javacc", 1513, 13); try { namespaces= Exp(); } finally { popCallStack(); } } // Code for NonTerminal specified on line 1515 of FM.javacc pushOntoCallStack("Recurse", "FM.javacc", 1515, 10); try { end= LooseDirectiveEnd(); } finally { popCallStack(); } } else { pushOntoCallStack("Recurse", "FM.javacc", 1504, 7); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1504$column_7, parsingStack); } // Code for CodeBlock specified on line 1518 of FM.javacc if (end== null) end= start; RecurseNode result= new RecurseNode(node, namespaces); result.setLocation(template, start, end); return result; } // FM.javacc, line 1526 final public FallbackInstruction FallBack() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1526 of FM.javacc"); if (cancelled) throw new CancellationException(); Token tok; // Code for RegexpRef specified on line 1530 of FM.javacc tok= consumeToken(TokenType.FALLBACK); // Code for CodeBlock specified on line 1531 of FM.javacc FallbackInstruction result= new FallbackInstruction(); result.setLocation(template, tok, tok); return result; } /** * Production used to break out of a loop or a switch block. */ // FM.javacc, line 1541 final public BreakInstruction Break() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1541 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start; // Code for RegexpRef specified on line 1545 of FM.javacc start= consumeToken(TokenType.BREAK); // Code for CodeBlock specified on line 1546 of FM.javacc BreakInstruction result= new BreakInstruction(); result.setLocation(template, start, start); return result; } /** * Production used to jump out of a macro. * The stop instruction terminates the rendering of the template. */ // FM.javacc, line 1557 final public ReturnInstruction Return() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1557 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end= null; Expression exp= null; // Code for ExpansionChoice specified on line 1563 of FM.javacc if (nextTokenType()== TokenType.SIMPLE_RETURN) { // Code for RegexpRef specified on line 1563 of FM.javacc start= consumeToken(TokenType.SIMPLE_RETURN); // Code for CodeBlock specified on line 1563 of FM.javacc end= start; } else if (nextTokenType()== TokenType.RETURN) { // Code for RegexpRef specified on line 1565 of FM.javacc start= consumeToken(TokenType.RETURN); // Code for NonTerminal specified on line 1566 of FM.javacc pushOntoCallStack("Return", "FM.javacc", 1566, 7); try { exp= Exp(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1567 of FM.javacc pushOntoCallStack("Return", "FM.javacc", 1567, 7); try { end= LooseDirectiveEnd(); } finally { popCallStack(); } } else { pushOntoCallStack("Return", "FM.javacc", 1563, 7); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1563$column_7, parsingStack); } // Code for CodeBlock specified on line 1569 of FM.javacc ReturnInstruction result= new ReturnInstruction(exp); result.setLocation(template, start, end); return result; } // FM.javacc, line 1576 final public StopInstruction Stop() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1576 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start= null; Expression exp= null; // Code for ExpansionChoice specified on line 1582 of FM.javacc if (nextTokenType()== TokenType.HALT) { // Code for RegexpRef specified on line 1582 of FM.javacc start= consumeToken(TokenType.HALT); } else if (nextTokenType()== TokenType.STOP) { // Code for RegexpRef specified on line 1584 of FM.javacc start= consumeToken(TokenType.STOP); // Code for NonTerminal specified on line 1584 of FM.javacc pushOntoCallStack("Stop", "FM.javacc", 1584, 20); try { exp= Exp(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1584 of FM.javacc pushOntoCallStack("Stop", "FM.javacc", 1584, 28); try { LooseDirectiveEnd(); } finally { popCallStack(); } } else { pushOntoCallStack("Stop", "FM.javacc", 1582, 7); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1582$column_7, parsingStack); } // Code for CodeBlock specified on line 1586 of FM.javacc StopInstruction result= new StopInstruction(exp); result.setLocation(template, start, start); return result; } // FM.javacc, line 1593 final public TemplateElement Nested() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1593 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t, end; PositionalArgsList args= null; BodyInstruction result= null; // Code for ExpansionChoice specified on line 1600 of FM.javacc if (nextTokenType()== TokenType.SIMPLE_NESTED) { // Code for RegexpRef specified on line 1601 of FM.javacc t= consumeToken(TokenType.SIMPLE_NESTED); // Code for CodeBlock specified on line 1602 of FM.javacc result= new BodyInstruction(null); result.setLocation(template, t, t); } else if (nextTokenType()== TokenType.NESTED) { // Code for RegexpRef specified on line 1609 of FM.javacc t= consumeToken(TokenType.NESTED); // Code for NonTerminal specified on line 1610 of FM.javacc pushOntoCallStack("Nested", "FM.javacc", 1610, 11); try { args= PositionalArgsList(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1611 of FM.javacc pushOntoCallStack("Nested", "FM.javacc", 1611, 11); try { end= LooseDirectiveEnd(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1612 of FM.javacc result= new BodyInstruction(args); result.setLocation(template, t, end); } else { pushOntoCallStack("Nested", "FM.javacc", 1600, 7); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1600$column_7, parsingStack); } // Code for CodeBlock specified on line 1618 of FM.javacc return result; } // FM.javacc, line 1623 final public TemplateElement Flush() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1623 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t; // Code for RegexpRef specified on line 1627 of FM.javacc t= consumeToken(TokenType.FLUSH); // Code for CodeBlock specified on line 1628 of FM.javacc FlushInstruction result= new FlushInstruction(); result.setLocation(template, t, t); return result; } static private final EnumSet Trim_FIRST_SET= EnumSet.of(TokenType.TRIM, TokenType.LTRIM, TokenType.RTRIM, TokenType.NOTRIM); // FM.javacc, line 1635 final public TemplateElement Trim() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1635 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t; TrimInstruction result= null; // Code for ExpansionChoice specified on line 1641 of FM.javacc if (nextTokenType()== TokenType.TRIM) { // Code for RegexpRef specified on line 1641 of FM.javacc t= consumeToken(TokenType.TRIM); // Code for CodeBlock specified on line 1641 of FM.javacc result= new TrimInstruction(true, true); } else if (nextTokenType()== TokenType.LTRIM) { // Code for RegexpRef specified on line 1643 of FM.javacc t= consumeToken(TokenType.LTRIM); // Code for CodeBlock specified on line 1643 of FM.javacc result= new TrimInstruction(true, false); } else if (nextTokenType()== TokenType.RTRIM) { // Code for RegexpRef specified on line 1645 of FM.javacc t= consumeToken(TokenType.RTRIM); // Code for CodeBlock specified on line 1645 of FM.javacc result= new TrimInstruction(false, true); } else if (nextTokenType()== TokenType.NOTRIM) { // Code for RegexpRef specified on line 1647 of FM.javacc t= consumeToken(TokenType.NOTRIM); // Code for CodeBlock specified on line 1647 of FM.javacc result= new TrimInstruction(false, false); } else { pushOntoCallStack("Trim", "FM.javacc", 1641, 6); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1641$column_6, parsingStack); } // Code for CodeBlock specified on line 1649 of FM.javacc result.setLocation(template, t, t); return result; } // FM.javacc, line 1655 final public TemplateElement Assign() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1655 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end; int type; Token id= null; Expression nameExp, exp, nsExp= null; String varName; TemplateElement block; LinkedHashMap assignments= new LinkedHashMap (); String assignmentType; AssignmentInstruction result; // Code for ExpansionChoice specified on line 1668 of FM.javacc if (nextTokenType()== TokenType.ASSIGN) { // Code for RegexpRef specified on line 1668 of FM.javacc start= consumeToken(TokenType.ASSIGN); // Code for CodeBlock specified on line 1668 of FM.javacc type= AssignmentInstruction.NAMESPACE; assignmentType= "assign"; } else if (nextTokenType()== TokenType.GLOBALASSIGN) { // Code for RegexpRef specified on line 1670 of FM.javacc start= consumeToken(TokenType.GLOBALASSIGN); // Code for CodeBlock specified on line 1670 of FM.javacc type= AssignmentInstruction.GLOBAL; assignmentType= "global"; } else if (nextTokenType()== TokenType.LOCALASSIGN) { // Code for RegexpRef specified on line 1672 of FM.javacc start= consumeToken(TokenType.LOCALASSIGN); // Code for CodeBlock specified on line 1672 of FM.javacc type= AssignmentInstruction.LOCAL; assignmentType= "local"; } else if (nextTokenType()== TokenType.SET) { // Code for RegexpRef specified on line 1674 of FM.javacc start= consumeToken(TokenType.SET); // Code for CodeBlock specified on line 1674 of FM.javacc type= AssignmentInstruction.SET; assignmentType= "set"; } else { pushOntoCallStack("Assign", "FM.javacc", 1668, 7); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1668$column_7, parsingStack); } // Code for CodeBlock specified on line 1676 of FM.javacc result= new AssignmentInstruction(type); // Code for NonTerminal specified on line 1677 of FM.javacc pushOntoCallStack("Assign", "FM.javacc", 1677, 5); try { nameExp= IdentifierOrStringLiteral(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1678 of FM.javacc varName= (nameExp instanceof StringLiteral)?((StringLiteral) nameExp).getAsString(): nameExp.toString(); // Code for ExpansionChoice specified on line 1681 of FM.javacc if (nextTokenType()== TokenType.EQUALS) { // Code for RegexpRef specified on line 1682 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 1683 of FM.javacc pushOntoCallStack("Assign", "FM.javacc", 1683, 8); try { exp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1683 of FM.javacc assignments.put(varName, exp); // Code for ZeroOrMore specified on line 1684 of FM.javacc while (scan$FM_javacc$line_1686$column_13()) { // Code for ZeroOrOne specified on line 1686 of FM.javacc if (nextTokenType()== TokenType.COMMA) { // Code for RegexpRef specified on line 1686 of FM.javacc consumeToken(TokenType.COMMA); } // Code for NonTerminal specified on line 1687 of FM.javacc pushOntoCallStack("Assign", "FM.javacc", 1687, 13); try { nameExp= IdentifierOrStringLiteral(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1688 of FM.javacc varName= (nameExp instanceof StringLiteral)?((StringLiteral) nameExp).getAsString(): nameExp.toString(); // Code for RegexpRef specified on line 1691 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 1692 of FM.javacc pushOntoCallStack("Assign", "FM.javacc", 1692, 13); try { exp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1693 of FM.javacc assignments.put(varName, exp); } // Code for ZeroOrOne specified on line 1697 of FM.javacc if (nextTokenType()== TokenType.IN) { // Code for RegexpRef specified on line 1698 of FM.javacc id= consumeToken(TokenType.IN); // Code for NonTerminal specified on line 1699 of FM.javacc pushOntoCallStack("Assign", "FM.javacc", 1699, 11); try { nsExp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1699 of FM.javacc if (type!=AssignmentInstruction.SET&&type!=AssignmentInstruction.NAMESPACE) { ParsingProblem problem= new ParsingProblem("Can only assign to namespace with #set or #assign.", result); template.addParsingProblem(problem); } } // Code for NonTerminal specified on line 1705 of FM.javacc pushOntoCallStack("Assign", "FM.javacc", 1705, 8); try { end= LooseDirectiveEnd(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1706 of FM.javacc result.setNamespaceExp(nsExp); for (Map.Entry entry : assignments.entrySet()) { result.addAssignment(entry.getKey(), entry.getValue()); } result.setLocation(template, start, end); return result; } else if (nextTokenType()== TokenType.IN||nextTokenType== TokenType.DIRECTIVE_END) { // Code for ZeroOrOne specified on line 1717 of FM.javacc if (nextTokenType()== TokenType.IN) { // Code for RegexpRef specified on line 1718 of FM.javacc id= consumeToken(TokenType.IN); // Code for NonTerminal specified on line 1719 of FM.javacc pushOntoCallStack("Assign", "FM.javacc", 1719, 11); try { nsExp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1719 of FM.javacc if (type!=AssignmentInstruction.NAMESPACE&&type!=AssignmentInstruction.SET) throw new ParseException(getErrorStart(id)+"\nCannot assign to namespace here.", id.beginLine, id.beginColumn); } // Code for RegexpRef specified on line 1721 of FM.javacc consumeToken(TokenType.DIRECTIVE_END); // Code for NonTerminal specified on line 1722 of FM.javacc pushOntoCallStack("Assign", "FM.javacc", 1722, 8); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1723 of FM.javacc pushOntoCallStack("Assign", "FM.javacc", 1723, 8); try { end= CloseDirectiveBlock(assignmentType); } finally { popCallStack(); } // Code for CodeBlock specified on line 1724 of FM.javacc String name= end.getImage().substring(3, end.getImage().length()-1); switch(type) { case AssignmentInstruction.LOCAL: if (name.length()> 0&&!name.equals("local")) throw new ParseException(getErrorStart(end)+"\nMismatched assignment tags.", end.beginLine, end.beginColumn); break; case AssignmentInstruction.NAMESPACE: if (name.length()> 0&&!name.equals("assign")) throw new ParseException(getErrorStart(end)+"\nMismatched assignment tags.", end.beginLine, end.beginColumn); break; case AssignmentInstruction.GLOBAL: if (name.length()> 0&&!name.equals("global")) throw new ParseException(getErrorStart(end)+"\nMismatched assignment tags.", end.beginLine, end.beginColumn); break; case AssignmentInstruction.SET: if (name.length()> 0&&!name.equals("set")) throw new ParseException(getErrorStart(end)+"\nMismatched assignment tags.", end.beginLine, end.beginColumn); break; } BlockAssignment ba= new BlockAssignment(block, varName, type, nsExp); ba.setLocation(template, start, end); return ba; } else { pushOntoCallStack("Assign", "FM.javacc", 1681, 6); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1681$column_6, parsingStack); } } // FM.javacc, line 1740 final public Include Include() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1740 of FM.javacc"); if (cancelled) throw new CancellationException(); Token att, start, end; Expression nameExp, exp, parseExp= null, encodingExp= null; boolean freshNamespace; // Code for ExpansionChoice specified on line 1747 of FM.javacc if (nextTokenType()== TokenType._INCLUDE) { // Code for RegexpRef specified on line 1747 of FM.javacc start= consumeToken(TokenType._INCLUDE); // Code for CodeBlock specified on line 1747 of FM.javacc freshNamespace= false; } else if (nextTokenType()== TokenType.EMBED) { // Code for RegexpRef specified on line 1749 of FM.javacc start= consumeToken(TokenType.EMBED); // Code for CodeBlock specified on line 1749 of FM.javacc freshNamespace= true; } else { pushOntoCallStack("Include", "FM.javacc", 1747, 9); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1747$column_9, parsingStack); } // Code for NonTerminal specified on line 1751 of FM.javacc pushOntoCallStack("Include", "FM.javacc", 1751, 5); try { nameExp= Exp(); } finally { popCallStack(); } // Code for ZeroOrOne specified on line 1752 of FM.javacc if (nextTokenType()== TokenType.SEMICOLON) { // Code for RegexpRef specified on line 1752 of FM.javacc consumeToken(TokenType.SEMICOLON); } // Code for ZeroOrMore specified on line 1753 of FM.javacc while (nextTokenType()== TokenType.ID) { // Code for RegexpRef specified on line 1754 of FM.javacc att= consumeToken(TokenType.ID); // Code for RegexpRef specified on line 1755 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 1756 of FM.javacc pushOntoCallStack("Include", "FM.javacc", 1756, 4); try { exp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1757 of FM.javacc String attString= att.getImage(); if (attString.equalsIgnoreCase("parse")) { if (parseExp!=null) { String msg= getErrorStart(att)+"\nparse may not be specified more than once."; throw new ParseException(msg, att.beginLine, att.beginColumn); } parseExp= exp; } else if (attString.equalsIgnoreCase("encoding")) { if (encodingExp!=null) { String msg= getErrorStart(att)+"\nencoding may not be specified more than once."; throw new ParseException(msg, att.beginLine, att.beginColumn); } encodingExp= exp; } else { String msg= getErrorStart(att)+"\nexpecting parse= or encoding= to be specified."; throw new ParseException(msg, att.beginLine, att.beginColumn); } } // Code for NonTerminal specified on line 1782 of FM.javacc pushOntoCallStack("Include", "FM.javacc", 1782, 5); try { end= LooseDirectiveEnd(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1783 of FM.javacc Include result= new Include(template, nameExp, freshNamespace, encodingExp, parseExp); result.setLocation(template, start, end); return result; } // FM.javacc, line 1790 final public LibraryLoad Import() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1790 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end, ns; Expression nameExp; // Code for RegexpRef specified on line 1795 of FM.javacc start= consumeToken(TokenType.IMPORT); // Code for NonTerminal specified on line 1796 of FM.javacc pushOntoCallStack("Import", "FM.javacc", 1796, 4); try { nameExp= Exp(); } finally { popCallStack(); } // Code for RegexpRef specified on line 1797 of FM.javacc consumeToken(TokenType.AS); // Code for RegexpRef specified on line 1798 of FM.javacc ns= consumeToken(TokenType.ID); // Code for NonTerminal specified on line 1799 of FM.javacc pushOntoCallStack("Import", "FM.javacc", 1799, 4); try { end= LooseDirectiveEnd(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1800 of FM.javacc LibraryLoad result= new LibraryLoad(template, nameExp, ns.getImage()); result.setLocation(template, start, end); if (template!=null) template.addImport(result); return result; } // FM.javacc, line 1808 final public ParameterList ParameterList() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1808 of FM.javacc"); if (cancelled) throw new CancellationException(); Token arg= null, firstArg= null, ellipsis= null; Expression defValue= null; ParameterList result= new ParameterList(); String catchAll= null; boolean isCatchAll= false, hasDefaults= false; Set paramNames= new HashSet (); // Code for ZeroOrMore specified on line 1817 of FM.javacc while (nextTokenType()== TokenType.ID) { // Code for RegexpRef specified on line 1818 of FM.javacc arg= consumeToken(TokenType.ID); // Code for CodeBlock specified on line 1819 of FM.javacc if (firstArg== null) firstArg= arg; defValue= null; if (paramNames.contains(arg.getImage())) { throw new ParseException(getErrorStart(arg)+"\nThe parameter "+arg.getImage()+" cannot be repeated."); } paramNames.add(arg.getImage()); // Code for ZeroOrOne specified on line 1827 of FM.javacc if (nextTokenType()== TokenType.ELLIPSIS) { // Code for RegexpRef specified on line 1828 of FM.javacc ellipsis= consumeToken(TokenType.ELLIPSIS); // Code for CodeBlock specified on line 1828 of FM.javacc isCatchAll= true; } // Code for ZeroOrOne specified on line 1830 of FM.javacc if (nextTokenType()== TokenType.EQUALS) { // Code for RegexpRef specified on line 1831 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 1832 of FM.javacc pushOntoCallStack("ParameterList", "FM.javacc", 1832, 12); try { defValue= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1833 of FM.javacc hasDefaults= true; } // Code for ZeroOrOne specified on line 1837 of FM.javacc if (nextTokenType()== TokenType.COMMA) { // Code for RegexpRef specified on line 1837 of FM.javacc consumeToken(TokenType.COMMA); } // Code for CodeBlock specified on line 1838 of FM.javacc if (catchAll!=null) { throw new ParseException(getErrorStart(arg)+"\nThere may only be one \"catch-all\" parameter in a macro declaration, "+"and it must be the last parameter.", arg.beginLine, arg.endLine); } if (isCatchAll) { if (defValue!=null) { throw new ParseException(getErrorStart(arg)+"\n\"Catch-all\" macro parameter may not have a default value.", arg.beginLine, arg.endLine); } result.setCatchAll(arg.getImage()); } else if (defValue== null) { if (hasDefaults) { throw new ParseException(getErrorStart(arg)+"\nIn a macro declaration, parameters without a default value "+"must all occur before the parameters with default values.", arg.beginLine, arg.endLine); } result.addParam(arg.getImage()); } else { result.addParam(arg.getImage(), defValue); hasDefaults= true; } } // Code for CodeBlock specified on line 1867 of FM.javacc if (ellipsis!=null) { result.setLocation(template, firstArg, ellipsis); } else if (defValue!=null) { result.setLocation(template, firstArg, defValue); } else if (firstArg!=null) { result.setLocation(template, firstArg, arg); } return result; } // FM.javacc, line 1881 final public Param Param() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1881 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end; Expression nameExp; String name; ParameterList params; TemplateElement block; // Code for RegexpRef specified on line 1889 of FM.javacc start= consumeToken(TokenType.PARAM); // Code for NonTerminal specified on line 1890 of FM.javacc pushOntoCallStack("Param", "FM.javacc", 1890, 2); try { nameExp= IdentifierOrStringLiteral(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1891 of FM.javacc name= (nameExp instanceof StringLiteral)?((StringLiteral) nameExp).getAsString(): nameExp.toString(); // Code for ZeroOrOne specified on line 1894 of FM.javacc if (nextTokenType()== TokenType.OPEN_PAREN) { // Code for RegexpRef specified on line 1894 of FM.javacc consumeToken(TokenType.OPEN_PAREN); } // Code for NonTerminal specified on line 1895 of FM.javacc pushOntoCallStack("Param", "FM.javacc", 1895, 5); try { params= ParameterList(); } finally { popCallStack(); } // Code for ZeroOrOne specified on line 1896 of FM.javacc if (nextTokenType()== TokenType.CLOSE_PAREN) { // Code for RegexpRef specified on line 1896 of FM.javacc consumeToken(TokenType.CLOSE_PAREN); } // Code for ExpansionChoice specified on line 1898 of FM.javacc if (nextTokenType()== TokenType.EMPTY_DIRECTIVE_END) { // Code for RegexpRef specified on line 1898 of FM.javacc end= consumeToken(TokenType.EMPTY_DIRECTIVE_END); } else if (nextTokenType()== TokenType.DIRECTIVE_END) { // Code for RegexpRef specified on line 1901 of FM.javacc consumeToken(TokenType.DIRECTIVE_END); // Code for NonTerminal specified on line 1902 of FM.javacc pushOntoCallStack("Param", "FM.javacc", 1902, 10); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1903 of FM.javacc pushOntoCallStack("Param", "FM.javacc", 1903, 10); try { end= CloseDirectiveBlock("param"); } finally { popCallStack(); } } else { pushOntoCallStack("Param", "FM.javacc", 1898, 7); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1898$column_7, parsingStack); } // Code for CodeBlock specified on line 1906 of FM.javacc return null; } // FM.javacc, line 1911 final public Macro Macro() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1911 of FM.javacc"); if (cancelled) throw new CancellationException(); CodeSource codeSource= Template.NULL_CODE_SOURCE; if (template!=null) codeSource= template.getCodeSource(); Macro result= new Macro(codeSource); Token arg, start, end; Expression nameExp; String name; TemplateElement block; ParameterList params; String functionOrMacro; // Code for ExpansionChoice specified on line 1924 of FM.javacc if (nextTokenType()== TokenType.MACRO) { // Code for RegexpRef specified on line 1924 of FM.javacc start= consumeToken(TokenType.MACRO); // Code for CodeBlock specified on line 1924 of FM.javacc functionOrMacro= "macro"; } else if (nextTokenType()== TokenType.FUNCTION) { // Code for RegexpRef specified on line 1926 of FM.javacc start= consumeToken(TokenType.FUNCTION); // Code for CodeBlock specified on line 1926 of FM.javacc result.setFunction(true); functionOrMacro= "function"; } else { pushOntoCallStack("Macro", "FM.javacc", 1924, 9); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_1924$column_9, parsingStack); } // Code for NonTerminal specified on line 1928 of FM.javacc pushOntoCallStack("Macro", "FM.javacc", 1928, 5); try { nameExp= IdentifierOrStringLiteral(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1929 of FM.javacc name= (nameExp instanceof StringLiteral)?((StringLiteral) nameExp).getAsString(): nameExp.toString(); result.setName(name); // Code for ZeroOrOne specified on line 1933 of FM.javacc if (nextTokenType()== TokenType.OPEN_PAREN) { // Code for RegexpRef specified on line 1933 of FM.javacc consumeToken(TokenType.OPEN_PAREN); } // Code for NonTerminal specified on line 1934 of FM.javacc pushOntoCallStack("Macro", "FM.javacc", 1934, 5); try { params= ParameterList(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1934 of FM.javacc result.setParams(params); // Code for ZeroOrOne specified on line 1935 of FM.javacc if (nextTokenType()== TokenType.CLOSE_PAREN) { // Code for RegexpRef specified on line 1935 of FM.javacc consumeToken(TokenType.CLOSE_PAREN); } // Code for RegexpRef specified on line 1936 of FM.javacc consumeToken(TokenType.DIRECTIVE_END); // Code for NonTerminal specified on line 1937 of FM.javacc pushOntoCallStack("Macro", "FM.javacc", 1937, 5); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1938 of FM.javacc pushOntoCallStack("Macro", "FM.javacc", 1938, 5); try { end= CloseDirectiveBlock(functionOrMacro); } finally { popCallStack(); } // Code for CodeBlock specified on line 1939 of FM.javacc result.setName(name); result.setNestedBlock(block); result.setLocation(template, start, end); return result; } // FM.javacc, line 1948 final public CompressedBlock Compress() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1948 of FM.javacc"); if (cancelled) throw new CancellationException(); TemplateElement block; Token start, end; // Code for RegexpRef specified on line 1953 of FM.javacc start= consumeToken(TokenType.COMPRESS); // Code for NonTerminal specified on line 1954 of FM.javacc pushOntoCallStack("Compress", "FM.javacc", 1954, 5); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for NonTerminal specified on line 1955 of FM.javacc pushOntoCallStack("Compress", "FM.javacc", 1955, 5); try { end= CloseDirectiveBlock("compress"); } finally { popCallStack(); } // Code for CodeBlock specified on line 1956 of FM.javacc CompressedBlock cb= new CompressedBlock(block); cb.setLocation(template, start, end); return cb; } // FM.javacc, line 1964 final public PositionalArgsList PositionalArgsList() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1964 of FM.javacc"); if (cancelled) throw new CancellationException(); Expression firstArg= null, arg= null; PositionalArgsList result= new PositionalArgsList(); // Code for NonTerminal specified on line 1969 of FM.javacc pushOntoCallStack("PositionalArgsList", "FM.javacc", 1969, 2); try { firstArg= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1969 of FM.javacc result.addArg(firstArg); arg= firstArg; // Code for ZeroOrMore specified on line 1970 of FM.javacc while (first_set$FM_javacc$line_1971$column_5.contains(nextTokenType())) { // Code for ZeroOrOne specified on line 1971 of FM.javacc if (nextTokenType()== TokenType.COMMA) { // Code for RegexpRef specified on line 1971 of FM.javacc consumeToken(TokenType.COMMA); } // Code for NonTerminal specified on line 1972 of FM.javacc pushOntoCallStack("PositionalArgsList", "FM.javacc", 1972, 5); try { arg= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1972 of FM.javacc result.addArg(arg); } // Code for CodeBlock specified on line 1974 of FM.javacc if (firstArg!=null) result.setLocation(template, firstArg, arg); return result; } // FM.javacc, line 1981 final public NamedArgsList NamedArgsList() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 1981 of FM.javacc"); if (cancelled) throw new CancellationException(); Token firstParam, id; Expression arg; NamedArgsList result= new NamedArgsList(); // Code for RegexpRef specified on line 1987 of FM.javacc firstParam= consumeToken(TokenType.ID); // Code for RegexpRef specified on line 1988 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 1989 of FM.javacc pushOntoCallStack("NamedArgsList", "FM.javacc", 1989, 2); try { arg= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1990 of FM.javacc result.addNamedArg(firstParam.getImage(), arg); // Code for ZeroOrMore specified on line 1993 of FM.javacc while (nextTokenType()== TokenType.COMMA||nextTokenType== TokenType.ID) { // Code for ZeroOrOne specified on line 1994 of FM.javacc if (nextTokenType()== TokenType.COMMA) { // Code for RegexpRef specified on line 1994 of FM.javacc consumeToken(TokenType.COMMA); } // Code for RegexpRef specified on line 1995 of FM.javacc id= consumeToken(TokenType.ID); // Code for RegexpRef specified on line 1996 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 1997 of FM.javacc pushOntoCallStack("NamedArgsList", "FM.javacc", 1997, 5); try { arg= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 1998 of FM.javacc result.addNamedArg(id.getImage(), arg); } // Code for CodeBlock specified on line 2000 of FM.javacc token_source.inInvocation= false; result.setLocation(template, firstParam, arg); return result; } // FM.javacc, line 2007 final public ArgsList ArgsList() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2007 of FM.javacc"); if (cancelled) throw new CancellationException(); ArgsList result= null; Token id; Expression exp= null; // Code for ExpansionChoice specified on line 2014 of FM.javacc if (scan$FM_javacc$line_2014$column_5()) { // Code for NonTerminal specified on line 2015 of FM.javacc pushOntoCallStack("ArgsList", "FM.javacc", 2015, 8); try { result= NamedArgsList(); } finally { popCallStack(); } } else if (first_set$FM_javacc$line_2017$column_8.contains(nextTokenType())) { // Code for NonTerminal specified on line 2017 of FM.javacc pushOntoCallStack("ArgsList", "FM.javacc", 2017, 8); try { result= PositionalArgsList(); } finally { popCallStack(); } } else { pushOntoCallStack("ArgsList", "FM.javacc", 2014, 5); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_2014$column_5, parsingStack); } // Code for CodeBlock specified on line 2019 of FM.javacc return result; } // FM.javacc, line 2026 final public TemplateElement UnifiedMacroTransform() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2026 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start= null, end, t; Map namedArgs= null; ArrayList positionalArgs= null; String directiveName= null; TemplateElement nestedBlock= null; Expression exp; UnifiedCall result= new UnifiedCall(); ArgsList args= null; ParameterList bodyParameters= null; // Code for RegexpRef specified on line 2038 of FM.javacc start= consumeToken(TokenType.UNIFIED_CALL); // Code for NonTerminal specified on line 2039 of FM.javacc pushOntoCallStack("UnifiedMacroTransform", "FM.javacc", 2039, 5); try { exp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2040 of FM.javacc if (exp instanceof Identifier||(exp instanceof Dot&&((Dot) exp).onlyHasIdentifiers())) { directiveName= exp.getCanonicalForm(); } result.setNameExp(exp); // Code for ZeroOrOne specified on line 2046 of FM.javacc if (nextTokenType()== TokenType.TERMINATING_WHITESPACE) { // Code for RegexpRef specified on line 2046 of FM.javacc consumeToken(TokenType.TERMINATING_WHITESPACE); } // Code for ZeroOrOne specified on line 2047 of FM.javacc if (first_set$FM_javacc$line_2047$column_6.contains(nextTokenType())) { // Code for NonTerminal specified on line 2047 of FM.javacc pushOntoCallStack("UnifiedMacroTransform", "FM.javacc", 2047, 6); try { args= ArgsList(); } finally { popCallStack(); } } // Code for CodeBlock specified on line 2048 of FM.javacc if (args== null) { args= new EmptyArgsList(); } result.setArgs(args); // Code for ZeroOrOne specified on line 2055 of FM.javacc if (nextTokenType()== TokenType.SEMICOLON) { // Code for RegexpRef specified on line 2056 of FM.javacc consumeToken(TokenType.SEMICOLON); // Code for ZeroOrOne specified on line 2056 of FM.javacc if (nextTokenType()== TokenType.TERMINATING_WHITESPACE) { // Code for RegexpRef specified on line 2056 of FM.javacc consumeToken(TokenType.TERMINATING_WHITESPACE); } // Code for NonTerminal specified on line 2057 of FM.javacc pushOntoCallStack("UnifiedMacroTransform", "FM.javacc", 2057, 8); try { bodyParameters= ParameterList(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2058 of FM.javacc result.setBodyParameters(bodyParameters); } // Code for ExpansionChoice specified on line 2063 of FM.javacc if (nextTokenType()== TokenType.EMPTY_DIRECTIVE_END) { // Code for RegexpRef specified on line 2063 of FM.javacc end= consumeToken(TokenType.EMPTY_DIRECTIVE_END); } else if (nextTokenType()== TokenType.DIRECTIVE_END) { // Code for RegexpRef specified on line 2066 of FM.javacc consumeToken(TokenType.DIRECTIVE_END); // Code for NonTerminal specified on line 2067 of FM.javacc pushOntoCallStack("UnifiedMacroTransform", "FM.javacc", 2067, 3); try { nestedBlock= OptionalBlock(); } finally { popCallStack(); } // Code for RegexpRef specified on line 2068 of FM.javacc end= consumeToken(TokenType.UNIFIED_CALL_END); // Code for CodeBlock specified on line 2069 of FM.javacc String s= end.getImage().substring(2); ; if (s.charAt(0)== '@') { s= s.substring(1); } s= s.substring(0, s.length()-1).trim(); if (s.length()> 0&&!s.equals(directiveName)) { String msg= getErrorStart(end); if (directiveName== null) { throw new ParseException(msg+"\nExpecting ", end.beginLine, end.beginColumn); } else { throw new ParseException(msg+"\nExpecting or ", end.beginLine, end.beginColumn); } } result.setNestedBlock(nestedBlock); } else { pushOntoCallStack("UnifiedMacroTransform", "FM.javacc", 2063, 7); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_2063$column_7, parsingStack); } // Code for CodeBlock specified on line 2088 of FM.javacc result.setLocation(template, start, end); return result; } // FM.javacc, line 2094 final public TemplateElement Call() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2094 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end; Identifier id; String macroName= null; UnifiedCall result= new UnifiedCall(); ArgsList args= null; // Code for RegexpRef specified on line 2102 of FM.javacc start= consumeToken(TokenType.CALL); // Code for NonTerminal specified on line 2103 of FM.javacc pushOntoCallStack("Call", "FM.javacc", 2103, 5); try { id= Identifier(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2103 of FM.javacc result.setNameExp(id); // Code for ZeroOrOne specified on line 2104 of FM.javacc if (nextTokenType()== TokenType.OPEN_PAREN) { // Code for RegexpRef specified on line 2105 of FM.javacc consumeToken(TokenType.OPEN_PAREN); } // Code for NonTerminal specified on line 2107 of FM.javacc pushOntoCallStack("Call", "FM.javacc", 2107, 5); try { args= ArgsList(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2107 of FM.javacc result.setArgs(args); // Code for ZeroOrOne specified on line 2108 of FM.javacc if (nextTokenType()== TokenType.CLOSE_PAREN) { // Code for RegexpRef specified on line 2108 of FM.javacc consumeToken(TokenType.CLOSE_PAREN); } // Code for NonTerminal specified on line 2109 of FM.javacc pushOntoCallStack("Call", "FM.javacc", 2109, 5); try { end= LooseDirectiveEnd(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2110 of FM.javacc result.setLocation(template, start, end); args.setLocationInfoIfAbsent(result); return result; } // FM.javacc, line 2117 final public Map NamedArgs() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2117 of FM.javacc"); if (cancelled) throw new CancellationException(); Map result= new LinkedHashMap (); Token t; Expression exp; // Code for OneOrMore specified on line 2123 of FM.javacc do { // Code for RegexpRef specified on line 2124 of FM.javacc t= consumeToken(TokenType.ID); // Code for RegexpRef specified on line 2125 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 2126 of FM.javacc pushOntoCallStack("NamedArgs", "FM.javacc", 2126, 6); try { exp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2127 of FM.javacc if (result.containsKey(t.getImage())) { throw new ParseException(getErrorStart(t)+"\nValue of named parameter '"+t.getImage()+"' may only be specified once.", t.beginLine, t.endLine); } result.put(t.getImage(), exp); } while (nextTokenType()== TokenType.ID); // Code for CodeBlock specified on line 2136 of FM.javacc return result; } // FM.javacc, line 2141 final public Comment TerseComment() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2141 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end, t; StringBuilder buf= new StringBuilder(); // Code for RegexpRef specified on line 2146 of FM.javacc start= consumeToken(TokenType.TERSE_COMMENT); // Code for ZeroOrMore specified on line 2147 of FM.javacc while (nextTokenType()== TokenType.PRINTABLE_CHARS) { // Code for RegexpRef specified on line 2148 of FM.javacc t= consumeToken(TokenType.PRINTABLE_CHARS); // Code for CodeBlock specified on line 2148 of FM.javacc buf.append(t.getImage()); } // Code for RegexpRef specified on line 2150 of FM.javacc end= consumeToken(TokenType.TERSE_COMMENT_END); // Code for CodeBlock specified on line 2151 of FM.javacc Comment result= new Comment(buf.toString()); result.setLocation(template, start, end); return result; } // FM.javacc, line 2158 final public Comment Comment() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2158 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end, t; StringBuilder buf= new StringBuilder(); // Code for RegexpRef specified on line 2163 of FM.javacc start= consumeToken(TokenType.COMMENT); // Code for ZeroOrMore specified on line 2164 of FM.javacc while (nextTokenType()== TokenType.PRINTABLE_CHARS) { // Code for RegexpRef specified on line 2165 of FM.javacc t= consumeToken(TokenType.PRINTABLE_CHARS); // Code for CodeBlock specified on line 2165 of FM.javacc buf.append(t.getImage()); } // Code for RegexpRef specified on line 2167 of FM.javacc end= consumeToken(TokenType.COMMENT_END); // Code for CodeBlock specified on line 2168 of FM.javacc Comment result= new Comment(buf.toString()); result.setLocation(template, start, end); return result; } // FM.javacc, line 2175 final public NoParseBlock NoParse() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2175 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end, t; StringBuilder buf= new StringBuilder(); // Code for RegexpRef specified on line 2180 of FM.javacc start= consumeToken(TokenType.NOPARSE); // Code for ZeroOrMore specified on line 2181 of FM.javacc while (nextTokenType()== TokenType.PRINTABLE_CHARS) { // Code for RegexpRef specified on line 2182 of FM.javacc t= consumeToken(TokenType.PRINTABLE_CHARS); // Code for CodeBlock specified on line 2182 of FM.javacc buf.append(t.getImage()); } // Code for RegexpRef specified on line 2184 of FM.javacc end= consumeToken(TokenType.NOPARSE_END); // Code for CodeBlock specified on line 2185 of FM.javacc int beginColumn= start.beginColumn; int beginLine= start.beginLine; char lastChar= 0; for (char c : start.getImage().toCharArray()) { switch(c) { case'\n': if (lastChar== '\r') break; case'\r': beginColumn= 1; beginLine++; break; default: ++beginColumn; } lastChar= c; } List text= TextBlock.breakIntoBlocks(buf.toString(), template, beginColumn, beginLine); NoParseBlock result= new NoParseBlock(start.getImage(), end.getImage(), text); result.setLocation(template, start, end); return result; } // FM.javacc, line 2205 final public TransformBlock Transform() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2205 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end, argName; Expression exp, argExp; TemplateElement content= null; HashMap args= null; // Code for RegexpRef specified on line 2212 of FM.javacc start= consumeToken(TokenType.TRANSFORM); // Code for NonTerminal specified on line 2213 of FM.javacc pushOntoCallStack("Transform", "FM.javacc", 2213, 5); try { exp= Exp(); } finally { popCallStack(); } // Code for ZeroOrOne specified on line 2214 of FM.javacc if (nextTokenType()== TokenType.SEMICOLON) { // Code for RegexpRef specified on line 2214 of FM.javacc consumeToken(TokenType.SEMICOLON); } // Code for ZeroOrMore specified on line 2215 of FM.javacc while (nextTokenType()== TokenType.ID) { // Code for RegexpRef specified on line 2216 of FM.javacc argName= consumeToken(TokenType.ID); // Code for RegexpRef specified on line 2217 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 2218 of FM.javacc pushOntoCallStack("Transform", "FM.javacc", 2218, 8); try { argExp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2219 of FM.javacc if (args== null) args= new HashMap (); args.put(argName.getImage(), argExp); } // Code for ExpansionChoice specified on line 2225 of FM.javacc if (nextTokenType()== TokenType.EMPTY_DIRECTIVE_END) { // Code for RegexpRef specified on line 2225 of FM.javacc end= consumeToken(TokenType.EMPTY_DIRECTIVE_END); } else if (nextTokenType()== TokenType.DIRECTIVE_END) { // Code for RegexpRef specified on line 2228 of FM.javacc consumeToken(TokenType.DIRECTIVE_END); // Code for NonTerminal specified on line 2229 of FM.javacc pushOntoCallStack("Transform", "FM.javacc", 2229, 11); try { content= OptionalBlock(); } finally { popCallStack(); } // Code for NonTerminal specified on line 2230 of FM.javacc pushOntoCallStack("Transform", "FM.javacc", 2230, 11); try { end= CloseDirectiveBlock("transform"); } finally { popCallStack(); } } else { pushOntoCallStack("Transform", "FM.javacc", 2225, 8); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_2225$column_8, parsingStack); } // Code for CodeBlock specified on line 2233 of FM.javacc TransformBlock result= new TransformBlock(exp, args, content); result.setLocation(template, start, end); return result; } // FM.javacc, line 2240 final public SwitchBlock Switch() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2240 of FM.javacc"); if (cancelled) throw new CancellationException(); SwitchBlock switchBlock; Case caseIns; Expression switchExp; Token start, end; boolean defaultFound= false; // Code for RegexpRef specified on line 2248 of FM.javacc start= consumeToken(TokenType.SWITCH); // Code for NonTerminal specified on line 2249 of FM.javacc pushOntoCallStack("Switch", "FM.javacc", 2249, 4); try { switchExp= Exp(); } finally { popCallStack(); } // Code for RegexpRef specified on line 2250 of FM.javacc consumeToken(TokenType.DIRECTIVE_END); // Code for ZeroOrMore specified on line 2251 of FM.javacc while (true) { // Code for ExpansionChoice specified on line 2251 of FM.javacc if (nextTokenType()== TokenType.WHITESPACE) { // Code for RegexpRef specified on line 2251 of FM.javacc consumeToken(TokenType.WHITESPACE); } else if (nextTokenType()== TokenType.COMMENT) { // Code for NonTerminal specified on line 2251 of FM.javacc pushOntoCallStack("Switch", "FM.javacc", 2251, 18); try { Comment(); } finally { popCallStack(); } } else { break; } } // Code for CodeBlock specified on line 2252 of FM.javacc switchBlock= new SwitchBlock(switchExp); // Code for ZeroOrMore specified on line 2255 of FM.javacc while (scan$FM_javacc$line_2256$column_6()) { // Code for NonTerminal specified on line 2256 of FM.javacc pushOntoCallStack("Switch", "FM.javacc", 2256, 16); try { caseIns= Case(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2257 of FM.javacc if (caseIns.isDefault()) { if (defaultFound) { String msg= getErrorStart(start)+"\nYou can only have one default case in a switch statement"; throw new ParseException(msg, start.beginLine, start.beginColumn); } defaultFound= true; } switchBlock.addCase(caseIns); } // Code for NonTerminal specified on line 2269 of FM.javacc pushOntoCallStack("Switch", "FM.javacc", 2269, 4); try { end= CloseDirectiveBlock("switch"); } finally { popCallStack(); } // Code for CodeBlock specified on line 2270 of FM.javacc switchBlock.setLocation(template, start, end); return switchBlock; } // FM.javacc, line 2276 final public Case Case() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2276 of FM.javacc"); if (cancelled) throw new CancellationException(); Expression exp= null; TemplateElement block; boolean isDefault= false; Token start; // Code for ExpansionChoice specified on line 2284 of FM.javacc if (nextTokenType()== TokenType.CASE) { // Code for RegexpRef specified on line 2284 of FM.javacc start= consumeToken(TokenType.CASE); // Code for NonTerminal specified on line 2285 of FM.javacc pushOntoCallStack("Case", "FM.javacc", 2285, 7); try { exp= Exp(); } finally { popCallStack(); } // Code for RegexpRef specified on line 2286 of FM.javacc consumeToken(TokenType.DIRECTIVE_END); } else if (nextTokenType()== TokenType.DEFAUL) { // Code for RegexpRef specified on line 2288 of FM.javacc start= consumeToken(TokenType.DEFAUL); // Code for CodeBlock specified on line 2288 of FM.javacc isDefault= true; } else { pushOntoCallStack("Case", "FM.javacc", 2284, 7); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_2284$column_7, parsingStack); } // Code for NonTerminal specified on line 2290 of FM.javacc pushOntoCallStack("Case", "FM.javacc", 2290, 4); try { block= OptionalBlock(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2291 of FM.javacc Case result= new Case(exp, block, isDefault); result.setLocation(template, start, block); return result; } // FM.javacc, line 2298 final public TrimBlock TrimBlock() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2298 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end; TemplateElement content; boolean left= false, right= false; String closeTag= null; // Code for ExpansionChoice specified on line 2306 of FM.javacc if (nextTokenType()== TokenType.BLOCKTRIM) { // Code for RegexpRef specified on line 2306 of FM.javacc start= consumeToken(TokenType.BLOCKTRIM); // Code for CodeBlock specified on line 2306 of FM.javacc closeTag= "t_lines"; left= right= true; } else if (nextTokenType()== TokenType.BLOCKTRIML) { // Code for RegexpRef specified on line 2308 of FM.javacc start= consumeToken(TokenType.BLOCKTRIML); // Code for CodeBlock specified on line 2308 of FM.javacc closeTag= "lt_lines"; left= true; } else if (nextTokenType()== TokenType.BLOCKTRIMR) { // Code for RegexpRef specified on line 2310 of FM.javacc start= consumeToken(TokenType.BLOCKTRIMR); // Code for CodeBlock specified on line 2310 of FM.javacc closeTag= "rt_lines"; right= true; } else if (nextTokenType()== TokenType.BLOCKNOTRIM) { // Code for RegexpRef specified on line 2312 of FM.javacc start= consumeToken(TokenType.BLOCKNOTRIM); // Code for CodeBlock specified on line 2312 of FM.javacc closeTag= "nt_lines"; } else { pushOntoCallStack("TrimBlock", "FM.javacc", 2306, 5); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_2306$column_5, parsingStack); } // Code for CodeBlock specified on line 2314 of FM.javacc trimBlockNesting++; // Code for NonTerminal specified on line 2315 of FM.javacc pushOntoCallStack("TrimBlock", "FM.javacc", 2315, 2); try { content= OptionalBlock(); } finally { popCallStack(); } // Code for NonTerminal specified on line 2316 of FM.javacc pushOntoCallStack("TrimBlock", "FM.javacc", 2316, 2); try { end= CloseDirectiveBlock(closeTag); } finally { popCallStack(); } // Code for CodeBlock specified on line 2317 of FM.javacc TrimBlock result= new TrimBlock(content, left, right); result.setLocation(template, start, end); trimBlockNesting--; return result; } // FM.javacc, line 2326 final public EscapeBlock Escape() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2326 of FM.javacc"); if (cancelled) throw new CancellationException(); Token variable, start, end; Expression escapeExpr; TemplateElement content; // Code for RegexpRef specified on line 2332 of FM.javacc start= consumeToken(TokenType.ESCAPE); // Code for RegexpRef specified on line 2333 of FM.javacc variable= consumeToken(TokenType.ID); // Code for RegexpRef specified on line 2334 of FM.javacc consumeToken(TokenType.AS); // Code for NonTerminal specified on line 2335 of FM.javacc pushOntoCallStack("Escape", "FM.javacc", 2335, 5); try { escapeExpr= Exp(); } finally { popCallStack(); } // Code for RegexpRef specified on line 2336 of FM.javacc consumeToken(TokenType.DIRECTIVE_END); // Code for CodeBlock specified on line 2337 of FM.javacc EscapeBlock result= new EscapeBlock(variable.getImage(), escapeExpr); // Code for NonTerminal specified on line 2340 of FM.javacc pushOntoCallStack("Escape", "FM.javacc", 2340, 5); try { content= OptionalBlock(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2341 of FM.javacc result.setContent(content); // Code for NonTerminal specified on line 2344 of FM.javacc pushOntoCallStack("Escape", "FM.javacc", 2344, 5); try { end= CloseDirectiveBlock("escape"); } finally { popCallStack(); } // Code for CodeBlock specified on line 2345 of FM.javacc result.setLocation(template, start, end); return result; } // FM.javacc, line 2351 final public NoEscapeBlock NoEscape() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2351 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end; TemplateElement content; // Code for RegexpRef specified on line 2356 of FM.javacc start= consumeToken(TokenType.NOESCAPE); // Code for NonTerminal specified on line 2357 of FM.javacc pushOntoCallStack("NoEscape", "FM.javacc", 2357, 5); try { content= OptionalBlock(); } finally { popCallStack(); } // Code for NonTerminal specified on line 2358 of FM.javacc pushOntoCallStack("NoEscape", "FM.javacc", 2358, 5); try { end= CloseDirectiveBlock("noescape"); } finally { popCallStack(); } // Code for CodeBlock specified on line 2359 of FM.javacc NoEscapeBlock result= new NoEscapeBlock(content); result.setLocation(template, start, end); return result; } // FM.javacc, line 2367 final public Token CloseDirectiveBlock(String expectedTags) throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2367 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t; // Code for RegexpRef specified on line 2371 of FM.javacc t= consumeToken(TokenType.CLOSE_DIRECTIVE_BLOCK); // Code for CodeBlock specified on line 2372 of FM.javacc String name= t.getImage(); name= name.substring(3, name.length()-1); if (name.length()> 0) { StringTokenizer st= new StringTokenizer(expectedTags, ", "); boolean found= false; while (st.hasMoreTokens()) { if (st.nextToken().equals(name.trim())) found= true; } if (!found) { throw new ParseException(getErrorStart(t)+" Expecting "+t.getImage().substring(0, 3)+expectedTags+t.getImage().charAt(t.getImage().length()-1)); } } return t; } static private final EnumSet LooseDirectiveEnd_FIRST_SET= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); /** * Production to terminate potentially empty elements. Either a ">" or "/>" */ // FM.javacc, line 2394 final public Token LooseDirectiveEnd() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2394 of FM.javacc"); if (cancelled) throw new CancellationException(); Token t; // Code for ExpansionChoice specified on line 2399 of FM.javacc if (nextTokenType()== TokenType.DIRECTIVE_END) { // Code for RegexpRef specified on line 2399 of FM.javacc t= consumeToken(TokenType.DIRECTIVE_END); } else if (nextTokenType()== TokenType.EMPTY_DIRECTIVE_END) { // Code for RegexpRef specified on line 2401 of FM.javacc t= consumeToken(TokenType.EMPTY_DIRECTIVE_END); } else { pushOntoCallStack("LooseDirectiveEnd", "FM.javacc", 2399, 7); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_2399$column_7, parsingStack); } // Code for CodeBlock specified on line 2403 of FM.javacc return t; } // FM.javacc, line 2408 final public PropertySetting Setting() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2408 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end, key; Expression value; // Code for RegexpRef specified on line 2413 of FM.javacc start= consumeToken(TokenType.SETTING); // Code for RegexpRef specified on line 2414 of FM.javacc key= consumeToken(TokenType.ID); // Code for RegexpRef specified on line 2415 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 2416 of FM.javacc pushOntoCallStack("Setting", "FM.javacc", 2416, 4); try { value= Exp(); } finally { popCallStack(); } // Code for NonTerminal specified on line 2417 of FM.javacc pushOntoCallStack("Setting", "FM.javacc", 2417, 4); try { end= LooseDirectiveEnd(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2418 of FM.javacc PropertySetting result= new PropertySetting(key.getImage(), value); result.setLocation(template, start, end); return result; } // FM.javacc, line 2425 final public VarDirective Var() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2425 of FM.javacc"); if (cancelled) throw new CancellationException(); Token start, end; Expression var, valueExp= null; VarDirective result= new VarDirective(); // Code for RegexpRef specified on line 2431 of FM.javacc start= consumeToken(TokenType.VAR); // Code for NonTerminal specified on line 2433 of FM.javacc pushOntoCallStack("Var", "FM.javacc", 2433, 6); try { var= IdentifierOrStringLiteral(); } finally { popCallStack(); } // Code for ZeroOrOne specified on line 2434 of FM.javacc if (nextTokenType()== TokenType.EQUALS) { // Code for RegexpRef specified on line 2435 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 2436 of FM.javacc pushOntoCallStack("Var", "FM.javacc", 2436, 8); try { valueExp= Exp(); } finally { popCallStack(); } } // Code for CodeBlock specified on line 2439 of FM.javacc result.addVar(var, valueExp); valueExp= null; // Code for ZeroOrMore specified on line 2443 of FM.javacc while (nextTokenType()== TokenType.STRING_LITERAL||nextTokenType== TokenType.RAW_STRING||nextTokenType== TokenType.COMMA||nextTokenType== TokenType.ID) { // Code for ZeroOrOne specified on line 2445 of FM.javacc if (nextTokenType()== TokenType.COMMA) { // Code for RegexpRef specified on line 2445 of FM.javacc consumeToken(TokenType.COMMA); } // Code for NonTerminal specified on line 2446 of FM.javacc pushOntoCallStack("Var", "FM.javacc", 2446, 9); try { var= IdentifierOrStringLiteral(); } finally { popCallStack(); } // Code for ZeroOrOne specified on line 2447 of FM.javacc if (nextTokenType()== TokenType.EQUALS) { // Code for RegexpRef specified on line 2448 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 2449 of FM.javacc pushOntoCallStack("Var", "FM.javacc", 2449, 12); try { valueExp= Exp(); } finally { popCallStack(); } } // Code for CodeBlock specified on line 2452 of FM.javacc result.addVar(var, valueExp); valueExp= null; } // Code for NonTerminal specified on line 2457 of FM.javacc pushOntoCallStack("Var", "FM.javacc", 2457, 4); try { end= LooseDirectiveEnd(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2458 of FM.javacc result.setLocation(template, start, end); return result; } /** * A production for FreeMarker directives. */ // FM.javacc, line 2467 final public TemplateElement FreemarkerDirective() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2467 of FM.javacc"); if (cancelled) throw new CancellationException(); TemplateElement tp; // Code for ExpansionChoice specified on line 2472 of FM.javacc if (nextTokenType()== TokenType.IF) { // Code for NonTerminal specified on line 2472 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2472, 6); try { tp= If(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.LIST) { // Code for NonTerminal specified on line 2474 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2474, 6); try { tp= List(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.FOREACH) { // Code for NonTerminal specified on line 2476 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2476, 6); try { tp= ForEach(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.ASSIGN||nextTokenType== TokenType.GLOBALASSIGN||nextTokenType== TokenType.LOCALASSIGN||nextTokenType== TokenType.SET) { // Code for NonTerminal specified on line 2478 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2478, 6); try { tp= Assign(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType._INCLUDE||nextTokenType== TokenType.EMBED) { // Code for NonTerminal specified on line 2480 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2480, 6); try { tp= Include(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.IMPORT) { // Code for NonTerminal specified on line 2482 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2482, 6); try { tp= Import(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.FUNCTION||nextTokenType== TokenType.MACRO) { // Code for NonTerminal specified on line 2484 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2484, 6); try { tp= Macro(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.COMPRESS) { // Code for NonTerminal specified on line 2486 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2486, 6); try { tp= Compress(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.UNIFIED_CALL) { // Code for NonTerminal specified on line 2488 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2488, 6); try { tp= UnifiedMacroTransform(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.CALL) { // Code for NonTerminal specified on line 2490 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2490, 6); try { tp= Call(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.TERSE_COMMENT) { // Code for NonTerminal specified on line 2492 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2492, 6); try { tp= TerseComment(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.COMMENT) { // Code for NonTerminal specified on line 2494 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2494, 6); try { tp= Comment(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.NOPARSE) { // Code for NonTerminal specified on line 2496 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2496, 6); try { tp= NoParse(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.TRANSFORM) { // Code for NonTerminal specified on line 2498 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2498, 6); try { tp= Transform(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.SWITCH) { // Code for NonTerminal specified on line 2500 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2500, 6); try { tp= Switch(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.SETTING) { // Code for NonTerminal specified on line 2502 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2502, 6); try { tp= Setting(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.VAR) { // Code for NonTerminal specified on line 2504 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2504, 6); try { tp= Var(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.BREAK) { // Code for NonTerminal specified on line 2506 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2506, 6); try { tp= Break(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.RETURN||nextTokenType== TokenType.SIMPLE_RETURN) { // Code for NonTerminal specified on line 2508 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2508, 6); try { tp= Return(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.STOP||nextTokenType== TokenType.HALT) { // Code for NonTerminal specified on line 2510 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2510, 6); try { tp= Stop(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.FLUSH) { // Code for NonTerminal specified on line 2512 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2512, 6); try { tp= Flush(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.TRIM||nextTokenType== TokenType.LTRIM||nextTokenType== TokenType.RTRIM||nextTokenType== TokenType.NOTRIM) { // Code for NonTerminal specified on line 2514 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2514, 6); try { tp= Trim(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.SIMPLE_NESTED||nextTokenType== TokenType.NESTED) { // Code for NonTerminal specified on line 2516 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2516, 6); try { tp= Nested(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.ESCAPE) { // Code for NonTerminal specified on line 2518 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2518, 6); try { tp= Escape(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.NOESCAPE) { // Code for NonTerminal specified on line 2520 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2520, 6); try { tp= NoEscape(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.BLOCKTRIM||nextTokenType== TokenType.BLOCKTRIML||nextTokenType== TokenType.BLOCKTRIMR||nextTokenType== TokenType.BLOCKNOTRIM) { // Code for NonTerminal specified on line 2522 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2522, 6); try { tp= TrimBlock(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.VISIT) { // Code for NonTerminal specified on line 2524 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2524, 6); try { tp= Visit(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.SIMPLE_RECURSE||nextTokenType== TokenType.RECURSE) { // Code for NonTerminal specified on line 2526 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2526, 6); try { tp= Recurse(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.FALLBACK) { // Code for NonTerminal specified on line 2528 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2528, 6); try { tp= FallBack(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType._ATTEMPT) { // Code for NonTerminal specified on line 2530 of FM.javacc pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2530, 6); try { tp= Attempt(); } finally { popCallStack(); } } else { pushOntoCallStack("FreemarkerDirective", "FM.javacc", 2472, 6); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_2472$column_6, parsingStack); } // Code for CodeBlock specified on line 2532 of FM.javacc return tp; } /** * Production for a block of raw text * i.e. text that contains no * FreeMarker directives. */ // FM.javacc, line 2543 final public List PCData() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2543 of FM.javacc"); if (cancelled) throw new CancellationException(); StringBuilder buf= new StringBuilder(); Token t= null, start= null, prevToken= null; List result= new ArrayList (); // Code for OneOrMore specified on line 2549 of FM.javacc do { // Code for ExpansionChoice specified on line 2552 of FM.javacc if (nextTokenType()== TokenType.PRINTABLE_CHARS) { // Code for CodeBlock specified on line 2552 of FM.javacc prevToken= t; // Code for RegexpRef specified on line 2553 of FM.javacc t= consumeToken(TokenType.PRINTABLE_CHARS); } else if (nextTokenType()== TokenType.WHITESPACE) { // Code for RegexpRef specified on line 2555 of FM.javacc t= consumeToken(TokenType.WHITESPACE); } else { pushOntoCallStack("PCData", "FM.javacc", 2552, 10); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_2552$column_10, parsingStack); } // Code for CodeBlock specified on line 2557 of FM.javacc buf.append(t.getImage()); if (start== null) start= t; if (prevToken!=null) prevToken.next= null; } while (scan$FM_javacc$line_2550$column_7()); // Code for CodeBlock specified on line 2563 of FM.javacc if (stripText&&contentNesting== 1) { result.add(TextBlock.EMPTY_BLOCK); return result; } if (trimBlockNesting> 0) { result= TextBlock.breakIntoBlocksLineByLine(buf.toString(), template, start.beginColumn, start.beginLine); } else { result= TextBlock.breakIntoBlocks(buf.toString(), template, start.beginColumn, start.beginLine); } return result; } /** * Production for dealing with unparsed content, * i.e. what is inside a comment or noparse tag. * It returns the ending token. The content * of the tag is put in buf. */ // FM.javacc, line 2584 final public TemplateElement Content() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2584 of FM.javacc"); if (cancelled) throw new CancellationException(); MixedContent nodes= new MixedContent(); TemplateElement elem= null, begin= null; contentNesting++; List text= null; // Code for OneOrMore specified on line 2591 of FM.javacc do { // Code for ExpansionChoice specified on line 2593 of FM.javacc if (nextTokenType()== TokenType.WHITESPACE||nextTokenType== TokenType.PRINTABLE_CHARS) { // Code for NonTerminal specified on line 2593 of FM.javacc pushOntoCallStack("Content", "FM.javacc", 2593, 10); try { text= PCData(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2593 of FM.javacc elem= null; } else if (nextTokenType()== TokenType.OUTPUT_ESCAPE) { // Code for NonTerminal specified on line 2595 of FM.javacc pushOntoCallStack("Content", "FM.javacc", 2595, 10); try { elem= StringOutput(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.NUMERICAL_ESCAPE) { // Code for NonTerminal specified on line 2597 of FM.javacc pushOntoCallStack("Content", "FM.javacc", 2597, 10); try { elem= NumericalOutput(); } finally { popCallStack(); } } else if (first_set$FM_javacc$line_2599$column_10.contains(nextTokenType())) { // Code for NonTerminal specified on line 2599 of FM.javacc pushOntoCallStack("Content", "FM.javacc", 2599, 10); try { elem= FreemarkerDirective(); } finally { popCallStack(); } } else { pushOntoCallStack("Content", "FM.javacc", 2593, 10); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_2593$column_10, parsingStack); } // Code for CodeBlock specified on line 2601 of FM.javacc if (begin== null) { begin= elem== null?text.get(0): elem; } if (elem== null) { for (TextBlock tb : text) nodes.addElement(tb); } else { nodes.addElement(elem); } } while (first_set$FM_javacc$line_2592$column_7.contains(nextTokenType())); // Code for CodeBlock specified on line 2612 of FM.javacc contentNesting--; if (elem== null) elem= text.get(text.size()-1); nodes.setLocation(template, begin, elem); return nodes; } /** * A production freemarker text that may contain * ${...} and #{...} but no directives. */ // FM.javacc, line 2625 final public TemplateElement FreeMarkerText() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2625 of FM.javacc"); if (cancelled) throw new CancellationException(); MixedContent nodes= new MixedContent(); TemplateElement elem= null, begin= null; List text= null; // Code for OneOrMore specified on line 2631 of FM.javacc do { // Code for ExpansionChoice specified on line 2633 of FM.javacc if (nextTokenType()== TokenType.WHITESPACE||nextTokenType== TokenType.PRINTABLE_CHARS) { // Code for NonTerminal specified on line 2633 of FM.javacc pushOntoCallStack("FreeMarkerText", "FM.javacc", 2633, 9); try { text= PCData(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2633 of FM.javacc elem= null; } else if (nextTokenType()== TokenType.OUTPUT_ESCAPE) { // Code for NonTerminal specified on line 2635 of FM.javacc pushOntoCallStack("FreeMarkerText", "FM.javacc", 2635, 9); try { elem= StringOutput(); } finally { popCallStack(); } } else if (nextTokenType()== TokenType.NUMERICAL_ESCAPE) { // Code for NonTerminal specified on line 2637 of FM.javacc pushOntoCallStack("FreeMarkerText", "FM.javacc", 2637, 9); try { elem= NumericalOutput(); } finally { popCallStack(); } } else { pushOntoCallStack("FreeMarkerText", "FM.javacc", 2633, 9); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_2633$column_9, parsingStack); } // Code for CodeBlock specified on line 2639 of FM.javacc if (begin== null) { begin= (elem== null)?text.get(0): elem; } if (elem!=null) { nodes.addElement(elem); } else { for (TextBlock tb : text) nodes.addElement(tb); } } while (nextTokenType()== TokenType.WHITESPACE||nextTokenType== TokenType.PRINTABLE_CHARS||nextTokenType== TokenType.OUTPUT_ESCAPE||nextTokenType== TokenType.NUMERICAL_ESCAPE); // Code for CodeBlock specified on line 2650 of FM.javacc if (elem== null) elem= text.get(text.size()-1); nodes.setLocation(template, begin, elem); return nodes; } /** * A production for a block of optional content. * Returns an empty Text block if there is no * content. */ // FM.javacc, line 2663 final public TemplateElement OptionalBlock() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2663 of FM.javacc"); if (cancelled) throw new CancellationException(); TemplateElement tp= TextBlock.EMPTY_BLOCK; // Code for ZeroOrOne specified on line 2667 of FM.javacc if (first_set$FM_javacc$line_2668$column_10.contains(nextTokenType())) { // Code for NonTerminal specified on line 2668 of FM.javacc pushOntoCallStack("OptionalBlock", "FM.javacc", 2668, 10); try { tp= Content(); } finally { popCallStack(); } } // Code for CodeBlock specified on line 2670 of FM.javacc return tp; } // FM.javacc, line 2676 final public TemplateHeaderElement HeaderElement() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2676 of FM.javacc"); if (cancelled) throw new CancellationException(); Token key, start, end; Expression exp; Map params= new LinkedHashMap (); // Code for ZeroOrOne specified on line 2682 of FM.javacc if (nextTokenType()== TokenType.WHITESPACE) { // Code for RegexpRef specified on line 2682 of FM.javacc consumeToken(TokenType.WHITESPACE); } // Code for ExpansionChoice specified on line 2684 of FM.javacc if (nextTokenType()== TokenType.TRIVIAL_FTL_HEADER) { // Code for RegexpRef specified on line 2684 of FM.javacc start= consumeToken(TokenType.TRIVIAL_FTL_HEADER); // Code for CodeBlock specified on line 2684 of FM.javacc end= start; } else if (nextTokenType()== TokenType.FTL_HEADER) { // Code for RegexpRef specified on line 2687 of FM.javacc start= consumeToken(TokenType.FTL_HEADER); // Code for ZeroOrMore specified on line 2688 of FM.javacc while (nextTokenType()== TokenType.ID) { // Code for RegexpRef specified on line 2689 of FM.javacc key= consumeToken(TokenType.ID); // Code for RegexpRef specified on line 2690 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 2691 of FM.javacc pushOntoCallStack("HeaderElement", "FM.javacc", 2691, 11); try { exp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2691 of FM.javacc params.put(key.getImage().toLowerCase(), exp); } // Code for NonTerminal specified on line 2693 of FM.javacc pushOntoCallStack("HeaderElement", "FM.javacc", 2693, 8); try { end= LooseDirectiveEnd(); } finally { popCallStack(); } } else { pushOntoCallStack("HeaderElement", "FM.javacc", 2684, 6); throw new ParseException(currentToken.getNext(), first_set$FM_javacc$line_2684$column_6, parsingStack); } // Code for CodeBlock specified on line 2696 of FM.javacc TemplateHeaderElement header= new TemplateHeaderElement(params); header.setLocation(template, start, end); return header; } // FM.javacc, line 2703 final public Map ParamList() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2703 of FM.javacc"); if (cancelled) throw new CancellationException(); Identifier id; Expression exp; Map result= new HashMap (); // Code for OneOrMore specified on line 2709 of FM.javacc do { // Code for NonTerminal specified on line 2710 of FM.javacc pushOntoCallStack("ParamList", "FM.javacc", 2710, 7); try { id= Identifier(); } finally { popCallStack(); } // Code for RegexpRef specified on line 2711 of FM.javacc consumeToken(TokenType.EQUALS); // Code for NonTerminal specified on line 2712 of FM.javacc pushOntoCallStack("ParamList", "FM.javacc", 2712, 7); try { exp= Exp(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2712 of FM.javacc result.put(id.toString(), exp); // Code for ZeroOrOne specified on line 2713 of FM.javacc if (nextTokenType()== TokenType.COMMA) { // Code for RegexpRef specified on line 2713 of FM.javacc consumeToken(TokenType.COMMA); } } while (nextTokenType()== TokenType.ID); // Code for CodeBlock specified on line 2715 of FM.javacc return result; } /** * Root production to be used when parsing * an entire file. */ // FM.javacc, line 2725 final public TemplateElement Root() throws ParseException { if (trace_enabled) LOGGER.info("Entering production defined on line 2725 of FM.javacc"); if (cancelled) throw new CancellationException(); TemplateHeaderElement header; TemplateElement doc; // Code for ZeroOrOne specified on line 2730 of FM.javacc if (scan$FM_javacc$line_2731$column_7()) { // Code for NonTerminal specified on line 2732 of FM.javacc pushOntoCallStack("Root", "FM.javacc", 2732, 8); try { header= HeaderElement(); } finally { popCallStack(); } // Code for CodeBlock specified on line 2733 of FM.javacc template.setHeaderElement(header); String templateEncoding= template.getEncoding(); if (templateEncoding!=null&&header.hasParameter("encoding")) { String encoding= null; try { encoding= header.getStringParameter("encoding"); } catch(Exception e) { } if (encoding!=null&&!encoding.equals(templateEncoding)) { throw new Template.WrongEncodingException(encoding); } } if (header.hasParameter("strip_text")) { try { this.stripText= header.getBooleanParameter("strip_text"); } catch(Exception e) { throw new ParseException(e.getMessage()); } } } // Code for NonTerminal specified on line 2755 of FM.javacc pushOntoCallStack("Root", "FM.javacc", 2755, 4); try { doc= OptionalBlock(); } finally { popCallStack(); } // Code for EndOfFile specified on line 2756 of FM.javacc consumeToken(TokenType.EOF); // Code for CodeBlock specified on line 2757 of FM.javacc doc.setParentRecursively(null); return doc; } static private final EnumSet first_set$FM_javacc$line_690$column_7= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_690$column_7$= EnumSet.of(TokenType.INTEGER, TokenType.DECIMAL); static private final EnumSet first_set$FM_javacc$line_694$column_7= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING); static private final EnumSet first_set$FM_javacc$line_696$column_7= EnumSet.of(TokenType.FALSE, TokenType.TRUE); static private final EnumSet first_set$FM_javacc$line_709$column_7= EnumSet.of(TokenType.DOT, TokenType.BUILT_IN, TokenType.EXISTS, TokenType.EXCLAM, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN); static private final EnumSet first_set$FM_javacc$line_740$column_4= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.PLUS, TokenType.MINUS, TokenType.EXCLAM, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_744$column_4= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_779$column_7= EnumSet.of(TokenType.PLUS, TokenType.MINUS); static private final EnumSet first_set$FM_javacc$line_799$column_10= EnumSet.of(TokenType.PLUS, TokenType.MINUS); static private final EnumSet first_set$FM_javacc$line_835$column_10= EnumSet.of(TokenType.TIMES, TokenType.DIVIDE, TokenType.PERCENT); static private final EnumSet first_set$FM_javacc$line_862$column_7= EnumSet.of(TokenType.EQUALS, TokenType.DOUBLE_EQUALS, TokenType.NOT_EQUALS); static private final EnumSet first_set$FM_javacc$line_886$column_6= EnumSet.of(TokenType.GREATER_THAN, TokenType.GREATER_THAN_EQUALS, TokenType.LESS_THAN, TokenType.LESS_THAN_EQUALS, TokenType.ESCAPED_GT, TokenType.ESCAPED_GTE); static private final EnumSet first_set$FM_javacc$line_887$column_7= EnumSet.of(TokenType.GREATER_THAN, TokenType.GREATER_THAN_EQUALS, TokenType.LESS_THAN, TokenType.LESS_THAN_EQUALS, TokenType.ESCAPED_GT, TokenType.ESCAPED_GTE); static private final EnumSet first_set$FM_javacc$line_981$column_7= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.PLUS, TokenType.MINUS, TokenType.EXCLAM, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_983$column_10= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.PLUS, TokenType.MINUS, TokenType.EXCLAM, TokenType.COMMA, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_1001$column_7= EnumSet.of(TokenType.INTEGER, TokenType.DECIMAL); static private final EnumSet first_set$FM_javacc$line_1032$column_7= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_1071$column_8= EnumSet.of(TokenType.DOT, TokenType.BUILT_IN, TokenType.EXISTS, TokenType.EXCLAM, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN); static private final EnumSet first_set$FM_javacc$line_1183$column_7= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.PLUS, TokenType.MINUS, TokenType.EXCLAM, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_1199$column_6= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING); static private final EnumSet first_set$FM_javacc$line_1229$column_8= EnumSet.of(TokenType.FALSE, TokenType.TRUE); static private final EnumSet first_set$FM_javacc$line_1261$column_8= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.PLUS, TokenType.MINUS, TokenType.EXCLAM, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_1262$column_9= EnumSet.of(TokenType.COMMA, TokenType.COLON); static private final EnumSet first_set$FM_javacc$line_1271$column_13= EnumSet.of(TokenType.COMMA, TokenType.COLON); static private final EnumSet first_set$FM_javacc$line_1364$column_8= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_1490$column_4= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_1504$column_7= EnumSet.of(TokenType.SIMPLE_RECURSE, TokenType.RECURSE); static private final EnumSet first_set$FM_javacc$line_1509$column_13= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.PLUS, TokenType.MINUS, TokenType.EXCLAM, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_1515$column_10= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_1563$column_7= EnumSet.of(TokenType.RETURN, TokenType.SIMPLE_RETURN); static private final EnumSet first_set$FM_javacc$line_1567$column_7= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_1582$column_7= EnumSet.of(TokenType.STOP, TokenType.HALT); static private final EnumSet first_set$FM_javacc$line_1584$column_28= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_1600$column_7= EnumSet.of(TokenType.SIMPLE_NESTED, TokenType.NESTED); static private final EnumSet first_set$FM_javacc$line_1611$column_11= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_1641$column_6= EnumSet.of(TokenType.TRIM, TokenType.LTRIM, TokenType.RTRIM, TokenType.NOTRIM); static private final EnumSet first_set$FM_javacc$line_1668$column_7= EnumSet.of(TokenType.ASSIGN, TokenType.GLOBALASSIGN, TokenType.LOCALASSIGN, TokenType.SET); static private final EnumSet first_set$FM_javacc$line_1677$column_5= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_1681$column_6= EnumSet.of(TokenType.EQUALS, TokenType.IN, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_1687$column_13= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_1705$column_8= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_1747$column_9= EnumSet.of(TokenType._INCLUDE, TokenType.EMBED); static private final EnumSet first_set$FM_javacc$line_1782$column_5= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_1799$column_4= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_1890$column_2= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_1898$column_7= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_1924$column_9= EnumSet.of(TokenType.FUNCTION, TokenType.MACRO); static private final EnumSet first_set$FM_javacc$line_1928$column_5= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_1971$column_5= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.PLUS, TokenType.MINUS, TokenType.EXCLAM, TokenType.COMMA, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_2014$column_5= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.PLUS, TokenType.MINUS, TokenType.EXCLAM, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_2017$column_8= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.PLUS, TokenType.MINUS, TokenType.EXCLAM, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_2047$column_6= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.FALSE, TokenType.TRUE, TokenType.NULL, TokenType.INTEGER, TokenType.DECIMAL, TokenType.DOT, TokenType.PLUS, TokenType.MINUS, TokenType.EXCLAM, TokenType.OPEN_BRACKET, TokenType.OPEN_PAREN, TokenType.OPEN_BRACE, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_2063$column_7= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_2109$column_5= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_2225$column_8= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_2284$column_7= EnumSet.of(TokenType.CASE, TokenType.DEFAUL); static private final EnumSet first_set$FM_javacc$line_2306$column_5= EnumSet.of(TokenType.BLOCKTRIM, TokenType.BLOCKTRIML, TokenType.BLOCKTRIMR, TokenType.BLOCKNOTRIM); static private final EnumSet first_set$FM_javacc$line_2399$column_7= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_2417$column_4= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_2433$column_6$= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_2446$column_9= EnumSet.of(TokenType.STRING_LITERAL, TokenType.RAW_STRING, TokenType.ID); static private final EnumSet first_set$FM_javacc$line_2457$column_4= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_2472$column_6= EnumSet.of(TokenType._ATTEMPT, TokenType.BLOCKTRIM, TokenType.BLOCKTRIML, TokenType.BLOCKTRIMR, TokenType.BLOCKNOTRIM, TokenType.IF, TokenType.LIST, TokenType.FOREACH, TokenType.SWITCH, TokenType.ASSIGN, TokenType.GLOBALASSIGN, TokenType.LOCALASSIGN, TokenType.SET, TokenType._INCLUDE, TokenType.IMPORT, TokenType.FUNCTION, TokenType.MACRO, TokenType.TRANSFORM, TokenType.VISIT, TokenType.STOP, TokenType.RETURN, TokenType.CALL, TokenType.SETTING, TokenType.EMBED, TokenType.VAR, TokenType.COMPRESS, TokenType.COMMENT, TokenType.TERSE_COMMENT, TokenType.NOPARSE, TokenType.BREAK, TokenType.SIMPLE_RETURN, TokenType.HALT, TokenType.FLUSH, TokenType.TRIM, TokenType.LTRIM, TokenType.RTRIM, TokenType.NOTRIM, TokenType.SIMPLE_NESTED, TokenType.NESTED, TokenType.SIMPLE_RECURSE, TokenType.RECURSE, TokenType.FALLBACK, TokenType.ESCAPE, TokenType.NOESCAPE, TokenType.UNIFIED_CALL); static private final EnumSet first_set$FM_javacc$line_2514$column_6= EnumSet.of(TokenType.TRIM, TokenType.LTRIM, TokenType.RTRIM, TokenType.NOTRIM); static private final EnumSet first_set$FM_javacc$line_2550$column_7= EnumSet.of(TokenType.WHITESPACE, TokenType.PRINTABLE_CHARS); static private final EnumSet first_set$FM_javacc$line_2550$column_12= EnumSet.of(TokenType.WHITESPACE, TokenType.PRINTABLE_CHARS); static private final EnumSet first_set$FM_javacc$line_2552$column_10= EnumSet.of(TokenType.WHITESPACE, TokenType.PRINTABLE_CHARS); static private final EnumSet first_set$FM_javacc$line_2592$column_7= EnumSet.of(TokenType._ATTEMPT, TokenType.BLOCKTRIM, TokenType.BLOCKTRIML, TokenType.BLOCKTRIMR, TokenType.BLOCKNOTRIM, TokenType.IF, TokenType.LIST, TokenType.FOREACH, TokenType.SWITCH, TokenType.ASSIGN, TokenType.GLOBALASSIGN, TokenType.LOCALASSIGN, TokenType.SET, TokenType._INCLUDE, TokenType.IMPORT, TokenType.FUNCTION, TokenType.MACRO, TokenType.TRANSFORM, TokenType.VISIT, TokenType.STOP, TokenType.RETURN, TokenType.CALL, TokenType.SETTING, TokenType.EMBED, TokenType.VAR, TokenType.COMPRESS, TokenType.COMMENT, TokenType.TERSE_COMMENT, TokenType.NOPARSE, TokenType.BREAK, TokenType.SIMPLE_RETURN, TokenType.HALT, TokenType.FLUSH, TokenType.TRIM, TokenType.LTRIM, TokenType.RTRIM, TokenType.NOTRIM, TokenType.SIMPLE_NESTED, TokenType.NESTED, TokenType.SIMPLE_RECURSE, TokenType.RECURSE, TokenType.FALLBACK, TokenType.ESCAPE, TokenType.NOESCAPE, TokenType.UNIFIED_CALL, TokenType.WHITESPACE, TokenType.PRINTABLE_CHARS, TokenType.OUTPUT_ESCAPE, TokenType.NUMERICAL_ESCAPE); static private final EnumSet first_set$FM_javacc$line_2593$column_10= EnumSet.of(TokenType._ATTEMPT, TokenType.BLOCKTRIM, TokenType.BLOCKTRIML, TokenType.BLOCKTRIMR, TokenType.BLOCKNOTRIM, TokenType.IF, TokenType.LIST, TokenType.FOREACH, TokenType.SWITCH, TokenType.ASSIGN, TokenType.GLOBALASSIGN, TokenType.LOCALASSIGN, TokenType.SET, TokenType._INCLUDE, TokenType.IMPORT, TokenType.FUNCTION, TokenType.MACRO, TokenType.TRANSFORM, TokenType.VISIT, TokenType.STOP, TokenType.RETURN, TokenType.CALL, TokenType.SETTING, TokenType.EMBED, TokenType.VAR, TokenType.COMPRESS, TokenType.COMMENT, TokenType.TERSE_COMMENT, TokenType.NOPARSE, TokenType.BREAK, TokenType.SIMPLE_RETURN, TokenType.HALT, TokenType.FLUSH, TokenType.TRIM, TokenType.LTRIM, TokenType.RTRIM, TokenType.NOTRIM, TokenType.SIMPLE_NESTED, TokenType.NESTED, TokenType.SIMPLE_RECURSE, TokenType.RECURSE, TokenType.FALLBACK, TokenType.ESCAPE, TokenType.NOESCAPE, TokenType.UNIFIED_CALL, TokenType.WHITESPACE, TokenType.PRINTABLE_CHARS, TokenType.OUTPUT_ESCAPE, TokenType.NUMERICAL_ESCAPE); static private final EnumSet first_set$FM_javacc$line_2599$column_10= EnumSet.of(TokenType._ATTEMPT, TokenType.BLOCKTRIM, TokenType.BLOCKTRIML, TokenType.BLOCKTRIMR, TokenType.BLOCKNOTRIM, TokenType.IF, TokenType.LIST, TokenType.FOREACH, TokenType.SWITCH, TokenType.ASSIGN, TokenType.GLOBALASSIGN, TokenType.LOCALASSIGN, TokenType.SET, TokenType._INCLUDE, TokenType.IMPORT, TokenType.FUNCTION, TokenType.MACRO, TokenType.TRANSFORM, TokenType.VISIT, TokenType.STOP, TokenType.RETURN, TokenType.CALL, TokenType.SETTING, TokenType.EMBED, TokenType.VAR, TokenType.COMPRESS, TokenType.COMMENT, TokenType.TERSE_COMMENT, TokenType.NOPARSE, TokenType.BREAK, TokenType.SIMPLE_RETURN, TokenType.HALT, TokenType.FLUSH, TokenType.TRIM, TokenType.LTRIM, TokenType.RTRIM, TokenType.NOTRIM, TokenType.SIMPLE_NESTED, TokenType.NESTED, TokenType.SIMPLE_RECURSE, TokenType.RECURSE, TokenType.FALLBACK, TokenType.ESCAPE, TokenType.NOESCAPE, TokenType.UNIFIED_CALL); static private final EnumSet first_set$FM_javacc$line_2633$column_9= EnumSet.of(TokenType.WHITESPACE, TokenType.PRINTABLE_CHARS, TokenType.OUTPUT_ESCAPE, TokenType.NUMERICAL_ESCAPE); static private final EnumSet first_set$FM_javacc$line_2668$column_10= EnumSet.of(TokenType._ATTEMPT, TokenType.BLOCKTRIM, TokenType.BLOCKTRIML, TokenType.BLOCKTRIMR, TokenType.BLOCKNOTRIM, TokenType.IF, TokenType.LIST, TokenType.FOREACH, TokenType.SWITCH, TokenType.ASSIGN, TokenType.GLOBALASSIGN, TokenType.LOCALASSIGN, TokenType.SET, TokenType._INCLUDE, TokenType.IMPORT, TokenType.FUNCTION, TokenType.MACRO, TokenType.TRANSFORM, TokenType.VISIT, TokenType.STOP, TokenType.RETURN, TokenType.CALL, TokenType.SETTING, TokenType.EMBED, TokenType.VAR, TokenType.COMPRESS, TokenType.COMMENT, TokenType.TERSE_COMMENT, TokenType.NOPARSE, TokenType.BREAK, TokenType.SIMPLE_RETURN, TokenType.HALT, TokenType.FLUSH, TokenType.TRIM, TokenType.LTRIM, TokenType.RTRIM, TokenType.NOTRIM, TokenType.SIMPLE_NESTED, TokenType.NESTED, TokenType.SIMPLE_RECURSE, TokenType.RECURSE, TokenType.FALLBACK, TokenType.ESCAPE, TokenType.NOESCAPE, TokenType.UNIFIED_CALL, TokenType.WHITESPACE, TokenType.PRINTABLE_CHARS, TokenType.OUTPUT_ESCAPE, TokenType.NUMERICAL_ESCAPE); static private final EnumSet first_set$FM_javacc$line_2684$column_6= EnumSet.of(TokenType.FTL_HEADER, TokenType.TRIVIAL_FTL_HEADER); static private final EnumSet first_set$FM_javacc$line_2693$column_8= EnumSet.of(TokenType.EMPTY_DIRECTIVE_END, TokenType.DIRECTIVE_END); static private final EnumSet first_set$FM_javacc$line_2731$column_27= EnumSet.of(TokenType.FTL_HEADER, TokenType.TRIVIAL_FTL_HEADER); private final boolean scanToken(TokenType expectedType) { if (remainingLookahead<=0) return true; if (currentLookaheadToken.getNext()== null) { Token nextToken= token_source.getNextToken(); currentLookaheadToken.setNext(nextToken); } currentLookaheadToken= currentLookaheadToken.getNext(); TokenType type= currentLookaheadToken.getType(); if (type!=expectedType) return false; if (remainingLookahead!=Integer.MAX_VALUE) remainingLookahead--; // if (type == upToTokenType) remainingLookahead = 0; return true; } private final boolean scanToken(EnumSet types) { if (remainingLookahead<=0) return true; if (currentLookaheadToken.getNext()== null) { Token nextToken= token_source.getNextToken(); currentLookaheadToken.setNext(nextToken); } currentLookaheadToken= currentLookaheadToken.getNext(); TokenType type= currentLookaheadToken.getType(); if (!types.contains(type)) return false; if (remainingLookahead!=Integer.MAX_VALUE) remainingLookahead--; // if (type == upToTokenType) remainingLookahead = 0; return true; } //==================================== // Lookahead Routines //==================================== private final boolean check$FM_javacc$line_692$column_7() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("PrimaryExpression", "FM.javacc", 692, 7); if (!check$HashLiteral()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_700$column_7() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("PrimaryExpression", "FM.javacc", 700, 7); if (!check$ListLiteral()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_704$column_7() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("PrimaryExpression", "FM.javacc", 704, 7); if (!check$Parenthesis()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_706$column_7() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("PrimaryExpression", "FM.javacc", 706, 7); if (!check$BuiltinVariable()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_709$column_7() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("PrimaryExpression", "FM.javacc", 709, 7); if (!check$AddSubExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_740$column_4() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("UnaryExpression", "FM.javacc", 740, 4); if (!check$UnaryPlusMinusExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_742$column_4() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("UnaryExpression", "FM.javacc", 742, 4); if (!check$NotExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_744$column_4() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("UnaryExpression", "FM.javacc", 744, 4); if (!check$PrimaryExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_798$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(first_set$FM_javacc$line_799$column_10)) return false; pushOntoLookaheadStack("AdditiveExpression", "FM.javacc", 803, 7); if (!check$MultiplicativeExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_834$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(first_set$FM_javacc$line_835$column_10)) return false; pushOntoLookaheadStack("MultiplicativeExpression", "FM.javacc", 841, 7); if (!check$UnaryExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_861$column_6() { if (remainingLookahead<=0) return true; if (!scanToken(first_set$FM_javacc$line_862$column_7)) return false; pushOntoLookaheadStack("EqualityExpression", "FM.javacc", 868, 6); if (!check$RelationalExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_886$column_6() { if (remainingLookahead<=0) return true; if (!scanToken(first_set$FM_javacc$line_887$column_7)) return false; pushOntoLookaheadStack("RelationalExpression", "FM.javacc", 899, 6); if (!check$RangeExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_916$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.DOT_DOT)) return false; Token token1= currentLookaheadToken; if (!check$FM_javacc$line_918$column_9()) currentLookaheadToken= token1; return true; } private final boolean check$FM_javacc$line_918$column_9() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("RangeExpression", "FM.javacc", 918, 14); if (!check$AdditiveExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_941$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.AND)) return false; pushOntoLookaheadStack("AndExpression", "FM.javacc", 942, 7); if (!check$EqualityExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_960$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.OR)) return false; pushOntoLookaheadStack("OrExpression", "FM.javacc", 961, 7); if (!check$AndExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_981$column_7() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("ListLiteral", "FM.javacc", 981, 7); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); while (remainingLookahead> 0) { Token token2= currentLookaheadToken; if (!check$FM_javacc$line_983$column_10()) { currentLookaheadToken= token2; break; } } return true; } private final boolean check$FM_javacc$line_983$column_10() { if (remainingLookahead<=0) return true; Token token3= currentLookaheadToken; if (!scanToken(TokenType.COMMA)) currentLookaheadToken= token3; pushOntoLookaheadStack("ListLiteral", "FM.javacc", 984, 10); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1071$column_8() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("AddSubExpression", "FM.javacc", 1071, 8); if (!check$DotVariable()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1073$column_8() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("AddSubExpression", "FM.javacc", 1073, 8); if (!check$DynamicKey()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1075$column_8() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("AddSubExpression", "FM.javacc", 1075, 8); if (!check$MethodArgs()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1077$column_8() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("AddSubExpression", "FM.javacc", 1077, 8); if (!check$BuiltIn()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1081$column_8() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("AddSubExpression", "FM.javacc", 1081, 8); if (!check$DefaultTo()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1096$column_10() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("DefaultTo", "FM.javacc", 1097, 13); if (!check$PrimaryExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1183$column_7() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("MethodArgs", "FM.javacc", 1183, 7); if (!check$ArgsList()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1261$column_8() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("HashLiteral", "FM.javacc", 1261, 8); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(first_set$FM_javacc$line_1262$column_9)) return false; pushOntoLookaheadStack("HashLiteral", "FM.javacc", 1263, 8); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); while (remainingLookahead> 0) { Token token4= currentLookaheadToken; if (!check$FM_javacc$line_1269$column_11()) { currentLookaheadToken= token4; break; } } return true; } private final boolean check$FM_javacc$line_1269$column_11() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.COMMA)) return false; pushOntoLookaheadStack("HashLiteral", "FM.javacc", 1270, 12); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(first_set$FM_javacc$line_1271$column_13)) return false; pushOntoLookaheadStack("HashLiteral", "FM.javacc", 1272, 12); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1332$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.SEMICOLON)) return false; if (!scanToken(TokenType.ID)) return false; return true; } private final boolean check$FM_javacc$line_1362$column_8() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.ELSE_IF)) return false; pushOntoLookaheadStack("If", "FM.javacc", 1363, 8); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(first_set$FM_javacc$line_1364$column_8)) return false; pushOntoLookaheadStack("If", "FM.javacc", 1365, 8); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1373$column_10() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.ELSE)) return false; pushOntoLookaheadStack("If", "FM.javacc", 1374, 10); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1487$column_8() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.USING)) return false; pushOntoLookaheadStack("Visit", "FM.javacc", 1488, 8); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1506$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.RECURSE)) return false; Token token5= currentLookaheadToken; if (!check$FM_javacc$line_1509$column_13()) currentLookaheadToken= token5; Token token6= currentLookaheadToken; if (!check$FM_javacc$line_1512$column_13()) currentLookaheadToken= token6; if (!scanToken(first_set$FM_javacc$line_1515$column_10)) return false; return true; } private final boolean check$FM_javacc$line_1509$column_13() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("Recurse", "FM.javacc", 1509, 13); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1512$column_13() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.USING)) return false; pushOntoLookaheadStack("Recurse", "FM.javacc", 1513, 13); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1565$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.RETURN)) return false; pushOntoLookaheadStack("Return", "FM.javacc", 1566, 7); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(first_set$FM_javacc$line_1567$column_7)) return false; return true; } private final boolean check$FM_javacc$line_1584$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.STOP)) return false; pushOntoLookaheadStack("Stop", "FM.javacc", 1584, 20); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(first_set$FM_javacc$line_1584$column_28)) return false; return true; } private final boolean check$FM_javacc$line_1608$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.NESTED)) return false; pushOntoLookaheadStack("Nested", "FM.javacc", 1610, 11); if (!check$PositionalArgsList()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(first_set$FM_javacc$line_1611$column_11)) return false; return true; } private final boolean check$FM_javacc$line_1681$column_6() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("Assign", "FM.javacc", 1683, 8); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); while (remainingLookahead> 0) { Token token7= currentLookaheadToken; if (!check$FM_javacc$line_1686$column_13()) { currentLookaheadToken= token7; break; } } Token token8= currentLookaheadToken; if (!check$FM_javacc$line_1698$column_11()) currentLookaheadToken= token8; if (!scanToken(first_set$FM_javacc$line_1705$column_8)) return false; return true; } private final boolean check$FM_javacc$line_1686$column_13() { if (remainingLookahead<=0) return true; Token token9= currentLookaheadToken; if (!scanToken(TokenType.COMMA)) currentLookaheadToken= token9; if (!scanToken(first_set$FM_javacc$line_1687$column_13)) return false; if (!scanToken(TokenType.EQUALS)) return false; if (stopAtScanLimit&&lookaheadStack.size()<=1) { return true; } pushOntoLookaheadStack("Assign", "FM.javacc", 1692, 13); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1698$column_11() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.IN)) return false; pushOntoLookaheadStack("Assign", "FM.javacc", 1699, 11); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1716$column_5() { if (remainingLookahead<=0) return true; Token token10= currentLookaheadToken; if (!check$FM_javacc$line_1718$column_11()) currentLookaheadToken= token10; if (!scanToken(TokenType.DIRECTIVE_END)) return false; pushOntoLookaheadStack("Assign", "FM.javacc", 1722, 8); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$FM_javacc$line_1718$column_11() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.IN)) return false; pushOntoLookaheadStack("Assign", "FM.javacc", 1719, 11); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1754$column_4() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("Include", "FM.javacc", 1756, 4); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1818$column_11() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.ID)) return false; Token token11= currentLookaheadToken; if (!scanToken(TokenType.ELLIPSIS)) currentLookaheadToken= token11; Token token12= currentLookaheadToken; if (!check$FM_javacc$line_1831$column_13()) currentLookaheadToken= token12; Token token13= currentLookaheadToken; if (!scanToken(TokenType.COMMA)) currentLookaheadToken= token13; return true; } private final boolean check$FM_javacc$line_1831$column_13() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("ParameterList", "FM.javacc", 1832, 12); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1900$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.DIRECTIVE_END)) return false; pushOntoLookaheadStack("Param", "FM.javacc", 1902, 10); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$FM_javacc$line_1971$column_5() { if (remainingLookahead<=0) return true; Token token14= currentLookaheadToken; if (!scanToken(TokenType.COMMA)) currentLookaheadToken= token14; pushOntoLookaheadStack("PositionalArgsList", "FM.javacc", 1972, 5); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_1994$column_5() { if (remainingLookahead<=0) return true; Token token15= currentLookaheadToken; if (!scanToken(TokenType.COMMA)) currentLookaheadToken= token15; if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("NamedArgsList", "FM.javacc", 1997, 5); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2014$column_5() { if (remainingLookahead<=0) return true; if (!check$FM_javacc$line_2014$column_10()) return false; pushOntoLookaheadStack("ArgsList", "FM.javacc", 2015, 8); if (!check$NamedArgsList()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2017$column_8() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("ArgsList", "FM.javacc", 2017, 8); if (!check$PositionalArgsList()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2047$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("UnifiedMacroTransform", "FM.javacc", 2047, 6); if (!check$ArgsList()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2056$column_8() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.SEMICOLON)) return false; Token token16= currentLookaheadToken; if (!scanToken(TokenType.TERMINATING_WHITESPACE)) currentLookaheadToken= token16; pushOntoLookaheadStack("UnifiedMacroTransform", "FM.javacc", 2057, 8); if (!check$ParameterList()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2065$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.DIRECTIVE_END)) return false; pushOntoLookaheadStack("UnifiedMacroTransform", "FM.javacc", 2067, 3); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.UNIFIED_CALL_END)) return false; return true; } private final boolean check$FM_javacc$line_2124$column_6() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("NamedArgs", "FM.javacc", 2126, 6); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2216$column_8() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("Transform", "FM.javacc", 2218, 8); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2227$column_8() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.DIRECTIVE_END)) return false; pushOntoLookaheadStack("Transform", "FM.javacc", 2229, 11); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$FM_javacc$line_2251$column_5() { if (remainingLookahead<=0) return true; Token token17= currentLookaheadToken; int remainingLookahead17= remainingLookahead; if (!scanToken(TokenType.WHITESPACE)) { currentLookaheadToken= token17; remainingLookahead= remainingLookahead17; if (!check$FM_javacc$line_2251$column_18()) { return false; } } return true; } private final boolean check$FM_javacc$line_2251$column_18() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("Switch", "FM.javacc", 2251, 18); if (!check$Comment()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2256$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("Switch", "FM.javacc", 2256, 16); if (!check$Case()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2284$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.CASE)) return false; pushOntoLookaheadStack("Case", "FM.javacc", 2285, 7); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.DIRECTIVE_END)) return false; return true; } private final boolean check$FM_javacc$line_2435$column_8() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("Var", "FM.javacc", 2436, 8); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2444$column_7() { if (remainingLookahead<=0) return true; Token token18= currentLookaheadToken; if (!scanToken(TokenType.COMMA)) currentLookaheadToken= token18; if (!scanToken(first_set$FM_javacc$line_2446$column_9)) return false; Token token19= currentLookaheadToken; if (!check$FM_javacc$line_2448$column_12()) currentLookaheadToken= token19; return true; } private final boolean check$FM_javacc$line_2448$column_12() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("Var", "FM.javacc", 2449, 12); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2472$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2472, 6); if (!check$If()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2474$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2474, 6); if (!check$List()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2476$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2476, 6); if (!check$ForEach()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2478$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2478, 6); if (!check$Assign()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2480$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2480, 6); if (!check$Include()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2482$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2482, 6); if (!check$Import()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2484$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2484, 6); if (!check$Macro()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2486$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2486, 6); if (!check$Compress()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2488$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2488, 6); if (!check$UnifiedMacroTransform()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2490$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2490, 6); if (!check$Call()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2492$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2492, 6); if (!check$TerseComment()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2494$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2494, 6); if (!check$Comment()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2496$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2496, 6); if (!check$NoParse()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2498$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2498, 6); if (!check$Transform()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2500$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2500, 6); if (!check$Switch()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2502$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2502, 6); if (!check$Setting()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2504$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2504, 6); if (!check$Var()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2508$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2508, 6); if (!check$Return()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2510$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2510, 6); if (!check$Stop()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2516$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2516, 6); if (!check$Nested()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2518$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2518, 6); if (!check$Escape()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2520$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2520, 6); if (!check$NoEscape()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2522$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2522, 6); if (!check$TrimBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2524$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2524, 6); if (!check$Visit()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2526$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2526, 6); if (!check$Recurse()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2530$column_6() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreemarkerDirective", "FM.javacc", 2530, 6); if (!check$Attempt()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2550$column_7() { if (remainingLookahead<=0) return true; if (!check$FM_javacc$line_2550$column_12()) return false; if (!scanToken(first_set$FM_javacc$line_2550$column_7)) return false; return true; } private final boolean check$FM_javacc$line_2592$column_7() { if (remainingLookahead<=0) return true; Token token20= currentLookaheadToken; int remainingLookahead20= remainingLookahead; if (!check$FM_javacc$line_2593$column_10()) { currentLookaheadToken= token20; remainingLookahead= remainingLookahead20; if (!check$FM_javacc$line_2595$column_10()) { currentLookaheadToken= token20; remainingLookahead= remainingLookahead20; if (!check$FM_javacc$line_2597$column_10()) { currentLookaheadToken= token20; remainingLookahead= remainingLookahead20; if (!check$FM_javacc$line_2599$column_10()) { return false; } } } } return true; } private final boolean check$FM_javacc$line_2593$column_10() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("Content", "FM.javacc", 2593, 10); if (!check$PCData()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2595$column_10() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("Content", "FM.javacc", 2595, 10); if (!check$StringOutput()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2597$column_10() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("Content", "FM.javacc", 2597, 10); if (!check$NumericalOutput()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2599$column_10() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("Content", "FM.javacc", 2599, 10); if (!check$FreemarkerDirective()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2632$column_7() { if (remainingLookahead<=0) return true; Token token21= currentLookaheadToken; int remainingLookahead21= remainingLookahead; if (!check$FM_javacc$line_2633$column_9()) { currentLookaheadToken= token21; remainingLookahead= remainingLookahead21; if (!check$FM_javacc$line_2635$column_9()) { currentLookaheadToken= token21; remainingLookahead= remainingLookahead21; if (!check$FM_javacc$line_2637$column_9()) { return false; } } } return true; } private final boolean check$FM_javacc$line_2633$column_9() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreeMarkerText", "FM.javacc", 2633, 9); if (!check$PCData()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2635$column_9() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreeMarkerText", "FM.javacc", 2635, 9); if (!check$StringOutput()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2637$column_9() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("FreeMarkerText", "FM.javacc", 2637, 9); if (!check$NumericalOutput()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2668$column_10() { if (remainingLookahead<=0) return true; pushOntoLookaheadStack("OptionalBlock", "FM.javacc", 2668, 10); if (!check$Content()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2686$column_6() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.FTL_HEADER)) return false; while (remainingLookahead> 0) { Token token22= currentLookaheadToken; if (!check$FM_javacc$line_2689$column_11()) { currentLookaheadToken= token22; break; } } if (!scanToken(first_set$FM_javacc$line_2693$column_8)) return false; return true; } private final boolean check$FM_javacc$line_2689$column_11() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("HeaderElement", "FM.javacc", 2691, 11); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$FM_javacc$line_2710$column_7() { if (remainingLookahead<=0) return true; if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("ParamList", "FM.javacc", 2712, 7); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token23= currentLookaheadToken; if (!scanToken(TokenType.COMMA)) currentLookaheadToken= token23; return true; } private final boolean check$FM_javacc$line_2731$column_7() { if (remainingLookahead<=0) return true; if (!check$FM_javacc$line_2731$column_12()) return false; pushOntoLookaheadStack("Root", "FM.javacc", 2732, 8); if (!check$HeaderElement()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean scan$FM_javacc$line_918$column_9() { currentLookaheadToken= currentToken; remainingLookahead= UNLIMITED; pushOntoLookaheadStack("RangeExpression", "FM.javacc", 918, 14); if (!check$AdditiveExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean scan$FM_javacc$line_1096$column_10() { currentLookaheadToken= currentToken; remainingLookahead= UNLIMITED; pushOntoLookaheadStack("DefaultTo", "FM.javacc", 1097, 13); if (!check$PrimaryExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean scan$FM_javacc$line_1686$column_13() { currentLookaheadToken= currentToken; remainingLookahead= UNLIMITED; stopAtScanLimit= true; Token token24= currentLookaheadToken; if (!scanToken(TokenType.COMMA)) currentLookaheadToken= token24; if (!scanToken(first_set$FM_javacc$line_1687$column_13)) return false; if (!scanToken(TokenType.EQUALS)) return false; if (stopAtScanLimit&&lookaheadStack.size()<=1) { return true; } pushOntoLookaheadStack("Assign", "FM.javacc", 1692, 13); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean scan$FM_javacc$line_2014$column_5() { currentLookaheadToken= currentToken; remainingLookahead= UNLIMITED; if (!check$FM_javacc$line_2014$column_10()) return false; return true; } private final boolean scan$FM_javacc$line_2256$column_6() { currentLookaheadToken= currentToken; remainingLookahead= 2; pushOntoLookaheadStack("Switch", "FM.javacc", 2256, 16); if (!check$Case()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean scan$FM_javacc$line_2550$column_7() { currentLookaheadToken= currentToken; remainingLookahead= UNLIMITED; if (!check$FM_javacc$line_2550$column_12()) return false; return true; } private final boolean scan$FM_javacc$line_2731$column_7() { currentLookaheadToken= currentToken; remainingLookahead= UNLIMITED; if (!check$FM_javacc$line_2731$column_12()) return false; return true; } private final boolean check$FM_javacc$line_2014$column_10() { int prevRemainingLookahead= remainingLookahead; Token prevScanAheadToken= currentLookaheadToken; try { if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.EQUALS)) return false; return true; } finally { currentLookaheadToken= prevScanAheadToken; remainingLookahead= prevRemainingLookahead; } } private final boolean check$FM_javacc$line_2550$column_12() { int prevRemainingLookahead= remainingLookahead; Token prevScanAheadToken= currentLookaheadToken; try { if (!scanToken(first_set$FM_javacc$line_2550$column_12)) return false; return true; } finally { currentLookaheadToken= prevScanAheadToken; remainingLookahead= prevRemainingLookahead; } } private final boolean check$FM_javacc$line_2731$column_12() { int prevRemainingLookahead= remainingLookahead; Token prevScanAheadToken= currentLookaheadToken; try { Token token25= currentLookaheadToken; if (!scanToken(TokenType.WHITESPACE)) currentLookaheadToken= token25; if (!scanToken(first_set$FM_javacc$line_2731$column_27)) return false; return true; } finally { currentLookaheadToken= prevScanAheadToken; remainingLookahead= prevRemainingLookahead; } } private final boolean check$Expression() { pushOntoLookaheadStack("Expression", "FM.javacc", 654, 5); if (!check$OrExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$Exp() { pushOntoLookaheadStack("Exp", "FM.javacc", 677, 3); if (!check$OrExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$PrimaryExpression() { Token token26= currentLookaheadToken; int remainingLookahead26= remainingLookahead; if (!scanToken(first_set$FM_javacc$line_690$column_7$)) { currentLookaheadToken= token26; remainingLookahead= remainingLookahead26; if (!check$FM_javacc$line_692$column_7()) { currentLookaheadToken= token26; remainingLookahead= remainingLookahead26; if (!scanToken(first_set$FM_javacc$line_694$column_7)) { currentLookaheadToken= token26; remainingLookahead= remainingLookahead26; if (!scanToken(first_set$FM_javacc$line_696$column_7)) { currentLookaheadToken= token26; remainingLookahead= remainingLookahead26; if (!scanToken(TokenType.NULL)) { currentLookaheadToken= token26; remainingLookahead= remainingLookahead26; if (!check$FM_javacc$line_700$column_7()) { currentLookaheadToken= token26; remainingLookahead= remainingLookahead26; if (!scanToken(TokenType.ID)) { currentLookaheadToken= token26; remainingLookahead= remainingLookahead26; if (!check$FM_javacc$line_704$column_7()) { currentLookaheadToken= token26; remainingLookahead= remainingLookahead26; if (!check$FM_javacc$line_706$column_7()) { return false; } } } } } } } } } while (remainingLookahead> 0) { Token token27= currentLookaheadToken; if (!check$FM_javacc$line_709$column_7()) { currentLookaheadToken= token27; break; } } return true; } private final boolean check$Parenthesis() { if (!scanToken(TokenType.OPEN_PAREN)) return false; pushOntoLookaheadStack("Parenthesis", "FM.javacc", 722, 5); if (!check$Expression()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_PAREN)) return false; return true; } private final boolean check$UnaryExpression() { Token token28= currentLookaheadToken; int remainingLookahead28= remainingLookahead; if (!check$FM_javacc$line_740$column_4()) { currentLookaheadToken= token28; remainingLookahead= remainingLookahead28; if (!check$FM_javacc$line_742$column_4()) { currentLookaheadToken= token28; remainingLookahead= remainingLookahead28; if (!check$FM_javacc$line_744$column_4()) { return false; } } } return true; } private final boolean check$NotExpression() { if (!scanToken(TokenType.EXCLAM)) { return false; } while (remainingLookahead> 0) { Token token29= currentLookaheadToken; if (!scanToken(TokenType.EXCLAM)) { currentLookaheadToken= token29; break; } } pushOntoLookaheadStack("NotExpression", "FM.javacc", 760, 4); if (!check$PrimaryExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$UnaryPlusMinusExpression() { if (!scanToken(first_set$FM_javacc$line_779$column_7)) return false; pushOntoLookaheadStack("UnaryPlusMinusExpression", "FM.javacc", 783, 4); if (!check$PrimaryExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$AdditiveExpression() { pushOntoLookaheadStack("AdditiveExpression", "FM.javacc", 796, 4); if (!check$MultiplicativeExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); while (remainingLookahead> 0) { Token token30= currentLookaheadToken; if (!check$FM_javacc$line_798$column_7()) { currentLookaheadToken= token30; break; } } return true; } private final boolean check$MultiplicativeExpression() { pushOntoLookaheadStack("MultiplicativeExpression", "FM.javacc", 832, 4); if (!check$UnaryExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); while (remainingLookahead> 0) { Token token31= currentLookaheadToken; if (!check$FM_javacc$line_834$column_7()) { currentLookaheadToken= token31; break; } } return true; } private final boolean check$EqualityExpression() { pushOntoLookaheadStack("EqualityExpression", "FM.javacc", 859, 4); if (!check$RelationalExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token32= currentLookaheadToken; if (!check$FM_javacc$line_861$column_6()) currentLookaheadToken= token32; return true; } private final boolean check$RelationalExpression() { pushOntoLookaheadStack("RelationalExpression", "FM.javacc", 884, 4); if (!check$RangeExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token33= currentLookaheadToken; if (!check$FM_javacc$line_886$column_6()) currentLookaheadToken= token33; return true; } private final boolean check$RangeExpression() { pushOntoLookaheadStack("RangeExpression", "FM.javacc", 914, 5); if (!check$AdditiveExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token34= currentLookaheadToken; if (!check$FM_javacc$line_916$column_7()) currentLookaheadToken= token34; return true; } private final boolean check$AndExpression() { pushOntoLookaheadStack("AndExpression", "FM.javacc", 939, 4); if (!check$EqualityExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); while (remainingLookahead> 0) { Token token35= currentLookaheadToken; if (!check$FM_javacc$line_941$column_7()) { currentLookaheadToken= token35; break; } } return true; } private final boolean check$OrExpression() { pushOntoLookaheadStack("OrExpression", "FM.javacc", 958, 4); if (!check$AndExpression()) { popLookaheadStack(); return false; } popLookaheadStack(); while (remainingLookahead> 0) { Token token36= currentLookaheadToken; if (!check$FM_javacc$line_960$column_7()) { currentLookaheadToken= token36; break; } } return true; } private final boolean check$ListLiteral() { if (!scanToken(TokenType.OPEN_BRACKET)) return false; Token token37= currentLookaheadToken; if (!check$FM_javacc$line_981$column_7()) currentLookaheadToken= token37; if (!scanToken(TokenType.CLOSE_BRACKET)) return false; return true; } private final boolean check$NumberLiteral() { if (!scanToken(NumberLiteral_FIRST_SET)) return false; return true; } private final boolean check$Identifier() { if (!scanToken(TokenType.ID)) return false; return true; } private final boolean check$IdentifierOrStringLiteral() { if (!scanToken(IdentifierOrStringLiteral_FIRST_SET)) return false; return true; } private final boolean check$BuiltinVariable() { if (!scanToken(TokenType.DOT)) return false; if (!scanToken(TokenType.ID)) return false; return true; } private final boolean check$AddSubExpression() { Token token38= currentLookaheadToken; int remainingLookahead38= remainingLookahead; if (!check$FM_javacc$line_1071$column_8()) { currentLookaheadToken= token38; remainingLookahead= remainingLookahead38; if (!check$FM_javacc$line_1073$column_8()) { currentLookaheadToken= token38; remainingLookahead= remainingLookahead38; if (!check$FM_javacc$line_1075$column_8()) { currentLookaheadToken= token38; remainingLookahead= remainingLookahead38; if (!check$FM_javacc$line_1077$column_8()) { currentLookaheadToken= token38; remainingLookahead= remainingLookahead38; if (!scanToken(TokenType.EXISTS)) { currentLookaheadToken= token38; remainingLookahead= remainingLookahead38; if (!check$FM_javacc$line_1081$column_8()) { return false; } } } } } } return true; } private final boolean check$DefaultTo() { if (!scanToken(TokenType.EXCLAM)) return false; Token token39= currentLookaheadToken; if (!check$FM_javacc$line_1096$column_10()) currentLookaheadToken= token39; return true; } private final boolean check$Exists() { if (!scanToken(TokenType.EXISTS)) return false; return true; } private final boolean check$BuiltIn() { if (!scanToken(TokenType.BUILT_IN)) return false; if (!scanToken(TokenType.ID)) return false; return true; } private final boolean check$DotVariable() { if (!scanToken(TokenType.DOT)) return false; if (!scanToken(TokenType.ID)) return false; return true; } private final boolean check$DynamicKey() { if (!scanToken(TokenType.OPEN_BRACKET)) return false; pushOntoLookaheadStack("DynamicKey", "FM.javacc", 1165, 4); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_BRACKET)) return false; return true; } private final boolean check$MethodArgs() { if (!scanToken(TokenType.OPEN_PAREN)) return false; Token token40= currentLookaheadToken; if (!check$FM_javacc$line_1183$column_7()) currentLookaheadToken= token40; if (!scanToken(TokenType.CLOSE_PAREN)) return false; return true; } private final boolean check$StringLiteral() { if (!scanToken(StringLiteral_FIRST_SET)) return false; return true; } private final boolean check$BooleanLiteral() { if (!scanToken(BooleanLiteral_FIRST_SET)) return false; return true; } private final boolean check$NullLiteral() { if (!scanToken(TokenType.NULL)) return false; return true; } private final boolean check$HashLiteral() { if (!scanToken(TokenType.OPEN_BRACE)) return false; Token token41= currentLookaheadToken; if (!check$FM_javacc$line_1261$column_8()) currentLookaheadToken= token41; if (!scanToken(TokenType.CLOSE_BRACE)) return false; return true; } private final boolean check$StringOutput() { if (!scanToken(TokenType.OUTPUT_ESCAPE)) return false; pushOntoLookaheadStack("StringOutput", "FM.javacc", 1298, 4); if (!check$Expression()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_BRACE)) return false; return true; } private final boolean check$NumericalOutput() { if (!scanToken(TokenType.NUMERICAL_ESCAPE)) return false; pushOntoLookaheadStack("NumericalOutput", "FM.javacc", 1330, 4); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token42= currentLookaheadToken; if (!check$FM_javacc$line_1332$column_7()) currentLookaheadToken= token42; if (!scanToken(TokenType.CLOSE_BRACE)) return false; return true; } private final boolean check$If() { if (!scanToken(TokenType.IF)) return false; pushOntoLookaheadStack("If", "FM.javacc", 1353, 4); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.DIRECTIVE_END)) return false; pushOntoLookaheadStack("If", "FM.javacc", 1355, 4); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); while (remainingLookahead> 0) { Token token43= currentLookaheadToken; if (!check$FM_javacc$line_1362$column_8()) { currentLookaheadToken= token43; break; } } Token token44= currentLookaheadToken; if (!check$FM_javacc$line_1373$column_10()) currentLookaheadToken= token44; if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$Attempt() { if (!scanToken(TokenType._ATTEMPT)) return false; pushOntoLookaheadStack("Attempt", "FM.javacc", 1395, 4); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); pushOntoLookaheadStack("Attempt", "FM.javacc", 1406, 4); if (!check$Recover()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$Recover() { if (!scanToken(TokenType._RECOVER)) return false; pushOntoLookaheadStack("Recover", "FM.javacc", 1425, 4); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$List() { if (!scanToken(TokenType.LIST)) return false; pushOntoLookaheadStack("List", "FM.javacc", 1440, 4); if (!check$Expression()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.AS)) return false; if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.DIRECTIVE_END)) return false; pushOntoLookaheadStack("List", "FM.javacc", 1444, 4); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$ForEach() { if (!scanToken(TokenType.FOREACH)) return false; if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.IN)) return false; pushOntoLookaheadStack("ForEach", "FM.javacc", 1465, 4); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.DIRECTIVE_END)) return false; pushOntoLookaheadStack("ForEach", "FM.javacc", 1467, 4); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$Visit() { if (!scanToken(TokenType.VISIT)) return false; pushOntoLookaheadStack("Visit", "FM.javacc", 1485, 4); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token45= currentLookaheadToken; if (!check$FM_javacc$line_1487$column_8()) currentLookaheadToken= token45; if (!scanToken(first_set$FM_javacc$line_1490$column_4)) return false; return true; } private final boolean check$Recurse() { Token token46= currentLookaheadToken; int remainingLookahead46= remainingLookahead; if (!scanToken(TokenType.SIMPLE_RECURSE)) { currentLookaheadToken= token46; remainingLookahead= remainingLookahead46; if (!check$FM_javacc$line_1506$column_7()) { return false; } } return true; } private final boolean check$FallBack() { if (!scanToken(TokenType.FALLBACK)) return false; return true; } private final boolean check$Break() { if (!scanToken(TokenType.BREAK)) return false; return true; } private final boolean check$Return() { Token token47= currentLookaheadToken; int remainingLookahead47= remainingLookahead; if (!scanToken(TokenType.SIMPLE_RETURN)) { currentLookaheadToken= token47; remainingLookahead= remainingLookahead47; if (!check$FM_javacc$line_1565$column_7()) { return false; } } return true; } private final boolean check$Stop() { Token token48= currentLookaheadToken; int remainingLookahead48= remainingLookahead; if (!scanToken(TokenType.HALT)) { currentLookaheadToken= token48; remainingLookahead= remainingLookahead48; if (!check$FM_javacc$line_1584$column_7()) { return false; } } return true; } private final boolean check$Nested() { Token token49= currentLookaheadToken; int remainingLookahead49= remainingLookahead; if (!scanToken(TokenType.SIMPLE_NESTED)) { currentLookaheadToken= token49; remainingLookahead= remainingLookahead49; if (!check$FM_javacc$line_1608$column_7()) { return false; } } return true; } private final boolean check$Flush() { if (!scanToken(TokenType.FLUSH)) return false; return true; } private final boolean check$Trim() { if (!scanToken(Trim_FIRST_SET)) return false; return true; } private final boolean check$Assign() { if (!scanToken(first_set$FM_javacc$line_1668$column_7)) return false; if (!scanToken(first_set$FM_javacc$line_1677$column_5)) return false; Token token50= currentLookaheadToken; int remainingLookahead50= remainingLookahead; if (!check$FM_javacc$line_1681$column_6()) { currentLookaheadToken= token50; remainingLookahead= remainingLookahead50; if (!check$FM_javacc$line_1716$column_5()) { return false; } } return true; } private final boolean check$Include() { if (!scanToken(first_set$FM_javacc$line_1747$column_9)) return false; pushOntoLookaheadStack("Include", "FM.javacc", 1751, 5); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token51= currentLookaheadToken; if (!scanToken(TokenType.SEMICOLON)) currentLookaheadToken= token51; while (remainingLookahead> 0) { Token token52= currentLookaheadToken; if (!check$FM_javacc$line_1754$column_4()) { currentLookaheadToken= token52; break; } } if (!scanToken(first_set$FM_javacc$line_1782$column_5)) return false; return true; } private final boolean check$Import() { if (!scanToken(TokenType.IMPORT)) return false; pushOntoLookaheadStack("Import", "FM.javacc", 1796, 4); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.AS)) return false; if (!scanToken(TokenType.ID)) return false; if (!scanToken(first_set$FM_javacc$line_1799$column_4)) return false; return true; } private final boolean check$ParameterList() { while (remainingLookahead> 0) { Token token53= currentLookaheadToken; if (!check$FM_javacc$line_1818$column_11()) { currentLookaheadToken= token53; break; } } return true; } private final boolean check$Param() { if (!scanToken(TokenType.PARAM)) return false; if (!scanToken(first_set$FM_javacc$line_1890$column_2)) return false; Token token54= currentLookaheadToken; if (!scanToken(TokenType.OPEN_PAREN)) currentLookaheadToken= token54; pushOntoLookaheadStack("Param", "FM.javacc", 1895, 5); if (!check$ParameterList()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token55= currentLookaheadToken; if (!scanToken(TokenType.CLOSE_PAREN)) currentLookaheadToken= token55; Token token56= currentLookaheadToken; int remainingLookahead56= remainingLookahead; if (!scanToken(TokenType.EMPTY_DIRECTIVE_END)) { currentLookaheadToken= token56; remainingLookahead= remainingLookahead56; if (!check$FM_javacc$line_1900$column_7()) { return false; } } return true; } private final boolean check$Macro() { if (!scanToken(first_set$FM_javacc$line_1924$column_9)) return false; if (!scanToken(first_set$FM_javacc$line_1928$column_5)) return false; Token token57= currentLookaheadToken; if (!scanToken(TokenType.OPEN_PAREN)) currentLookaheadToken= token57; pushOntoLookaheadStack("Macro", "FM.javacc", 1934, 5); if (!check$ParameterList()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token58= currentLookaheadToken; if (!scanToken(TokenType.CLOSE_PAREN)) currentLookaheadToken= token58; if (!scanToken(TokenType.DIRECTIVE_END)) return false; pushOntoLookaheadStack("Macro", "FM.javacc", 1937, 5); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$Compress() { if (!scanToken(TokenType.COMPRESS)) return false; pushOntoLookaheadStack("Compress", "FM.javacc", 1954, 5); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$PositionalArgsList() { pushOntoLookaheadStack("PositionalArgsList", "FM.javacc", 1969, 2); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); while (remainingLookahead> 0) { Token token59= currentLookaheadToken; if (!check$FM_javacc$line_1971$column_5()) { currentLookaheadToken= token59; break; } } return true; } private final boolean check$NamedArgsList() { if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("NamedArgsList", "FM.javacc", 1989, 2); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); while (remainingLookahead> 0) { Token token60= currentLookaheadToken; if (!check$FM_javacc$line_1994$column_5()) { currentLookaheadToken= token60; break; } } return true; } private final boolean check$ArgsList() { Token token61= currentLookaheadToken; int remainingLookahead61= remainingLookahead; if (!check$FM_javacc$line_2014$column_5()) { currentLookaheadToken= token61; remainingLookahead= remainingLookahead61; if (!check$FM_javacc$line_2017$column_8()) { return false; } } return true; } private final boolean check$UnifiedMacroTransform() { if (!scanToken(TokenType.UNIFIED_CALL)) return false; pushOntoLookaheadStack("UnifiedMacroTransform", "FM.javacc", 2039, 5); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token62= currentLookaheadToken; if (!scanToken(TokenType.TERMINATING_WHITESPACE)) currentLookaheadToken= token62; Token token63= currentLookaheadToken; if (!check$FM_javacc$line_2047$column_6()) currentLookaheadToken= token63; Token token64= currentLookaheadToken; if (!check$FM_javacc$line_2056$column_8()) currentLookaheadToken= token64; Token token65= currentLookaheadToken; int remainingLookahead65= remainingLookahead; if (!scanToken(TokenType.EMPTY_DIRECTIVE_END)) { currentLookaheadToken= token65; remainingLookahead= remainingLookahead65; if (!check$FM_javacc$line_2065$column_7()) { return false; } } return true; } private final boolean check$Call() { if (!scanToken(TokenType.CALL)) return false; if (!scanToken(TokenType.ID)) return false; Token token66= currentLookaheadToken; if (!scanToken(TokenType.OPEN_PAREN)) currentLookaheadToken= token66; pushOntoLookaheadStack("Call", "FM.javacc", 2107, 5); if (!check$ArgsList()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token67= currentLookaheadToken; if (!scanToken(TokenType.CLOSE_PAREN)) currentLookaheadToken= token67; if (!scanToken(first_set$FM_javacc$line_2109$column_5)) return false; return true; } private final boolean check$NamedArgs() { if (!check$FM_javacc$line_2124$column_6()) { return false; } while (remainingLookahead> 0) { Token token68= currentLookaheadToken; if (!check$FM_javacc$line_2124$column_6()) { currentLookaheadToken= token68; break; } } return true; } private final boolean check$TerseComment() { if (!scanToken(TokenType.TERSE_COMMENT)) return false; while (remainingLookahead> 0) { Token token69= currentLookaheadToken; if (!scanToken(TokenType.PRINTABLE_CHARS)) { currentLookaheadToken= token69; break; } } if (!scanToken(TokenType.TERSE_COMMENT_END)) return false; return true; } private final boolean check$Comment() { if (!scanToken(TokenType.COMMENT)) return false; while (remainingLookahead> 0) { Token token70= currentLookaheadToken; if (!scanToken(TokenType.PRINTABLE_CHARS)) { currentLookaheadToken= token70; break; } } if (!scanToken(TokenType.COMMENT_END)) return false; return true; } private final boolean check$NoParse() { if (!scanToken(TokenType.NOPARSE)) return false; while (remainingLookahead> 0) { Token token71= currentLookaheadToken; if (!scanToken(TokenType.PRINTABLE_CHARS)) { currentLookaheadToken= token71; break; } } if (!scanToken(TokenType.NOPARSE_END)) return false; return true; } private final boolean check$Transform() { if (!scanToken(TokenType.TRANSFORM)) return false; pushOntoLookaheadStack("Transform", "FM.javacc", 2213, 5); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); Token token72= currentLookaheadToken; if (!scanToken(TokenType.SEMICOLON)) currentLookaheadToken= token72; while (remainingLookahead> 0) { Token token73= currentLookaheadToken; if (!check$FM_javacc$line_2216$column_8()) { currentLookaheadToken= token73; break; } } Token token74= currentLookaheadToken; int remainingLookahead74= remainingLookahead; if (!scanToken(TokenType.EMPTY_DIRECTIVE_END)) { currentLookaheadToken= token74; remainingLookahead= remainingLookahead74; if (!check$FM_javacc$line_2227$column_8()) { return false; } } return true; } private final boolean check$Switch() { if (!scanToken(TokenType.SWITCH)) return false; pushOntoLookaheadStack("Switch", "FM.javacc", 2249, 4); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.DIRECTIVE_END)) return false; while (remainingLookahead> 0) { Token token75= currentLookaheadToken; if (!check$FM_javacc$line_2251$column_5()) { currentLookaheadToken= token75; break; } } while (remainingLookahead> 0) { Token token76= currentLookaheadToken; if (!check$FM_javacc$line_2256$column_6()) { currentLookaheadToken= token76; break; } } if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$Case() { Token token77= currentLookaheadToken; int remainingLookahead77= remainingLookahead; if (!check$FM_javacc$line_2284$column_7()) { currentLookaheadToken= token77; remainingLookahead= remainingLookahead77; if (!scanToken(TokenType.DEFAUL)) { return false; } } pushOntoLookaheadStack("Case", "FM.javacc", 2290, 4); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); return true; } private final boolean check$TrimBlock() { if (!scanToken(first_set$FM_javacc$line_2306$column_5)) return false; pushOntoLookaheadStack("TrimBlock", "FM.javacc", 2315, 2); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$Escape() { if (!scanToken(TokenType.ESCAPE)) return false; if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.AS)) return false; pushOntoLookaheadStack("Escape", "FM.javacc", 2335, 5); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.DIRECTIVE_END)) return false; pushOntoLookaheadStack("Escape", "FM.javacc", 2340, 5); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$NoEscape() { if (!scanToken(TokenType.NOESCAPE)) return false; pushOntoLookaheadStack("NoEscape", "FM.javacc", 2357, 5); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$CloseDirectiveBlock() { if (!scanToken(TokenType.CLOSE_DIRECTIVE_BLOCK)) return false; return true; } private final boolean check$LooseDirectiveEnd() { if (!scanToken(LooseDirectiveEnd_FIRST_SET)) return false; return true; } private final boolean check$Setting() { if (!scanToken(TokenType.SETTING)) return false; if (!scanToken(TokenType.ID)) return false; if (!scanToken(TokenType.EQUALS)) return false; pushOntoLookaheadStack("Setting", "FM.javacc", 2416, 4); if (!check$Exp()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(first_set$FM_javacc$line_2417$column_4)) return false; return true; } private final boolean check$Var() { if (!scanToken(TokenType.VAR)) return false; if (!scanToken(first_set$FM_javacc$line_2433$column_6$)) return false; Token token78= currentLookaheadToken; if (!check$FM_javacc$line_2435$column_8()) currentLookaheadToken= token78; while (remainingLookahead> 0) { Token token79= currentLookaheadToken; if (!check$FM_javacc$line_2444$column_7()) { currentLookaheadToken= token79; break; } } if (!scanToken(first_set$FM_javacc$line_2457$column_4)) return false; return true; } private final boolean check$FreemarkerDirective() { Token token80= currentLookaheadToken; int remainingLookahead80= remainingLookahead; if (!check$FM_javacc$line_2472$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2474$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2476$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2478$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2480$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2482$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2484$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2486$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2488$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2490$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2492$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2494$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2496$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2498$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2500$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2502$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2504$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!scanToken(TokenType.BREAK)) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2508$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2510$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!scanToken(TokenType.FLUSH)) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!scanToken(first_set$FM_javacc$line_2514$column_6)) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2516$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2518$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2520$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2522$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2524$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2526$column_6()) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!scanToken(TokenType.FALLBACK)) { currentLookaheadToken= token80; remainingLookahead= remainingLookahead80; if (!check$FM_javacc$line_2530$column_6()) { return false; } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } return true; } private final boolean check$PCData() { if (!check$FM_javacc$line_2550$column_7()) { return false; } while (remainingLookahead> 0) { Token token81= currentLookaheadToken; if (!check$FM_javacc$line_2550$column_7()) { currentLookaheadToken= token81; break; } } return true; } private final boolean check$Content() { if (!check$FM_javacc$line_2592$column_7()) { return false; } while (remainingLookahead> 0) { Token token82= currentLookaheadToken; if (!check$FM_javacc$line_2592$column_7()) { currentLookaheadToken= token82; break; } } return true; } private final boolean check$FreeMarkerText() { if (!check$FM_javacc$line_2632$column_7()) { return false; } while (remainingLookahead> 0) { Token token83= currentLookaheadToken; if (!check$FM_javacc$line_2632$column_7()) { currentLookaheadToken= token83; break; } } return true; } private final boolean check$OptionalBlock() { Token token84= currentLookaheadToken; if (!check$FM_javacc$line_2668$column_10()) currentLookaheadToken= token84; return true; } private final boolean check$HeaderElement() { Token token85= currentLookaheadToken; if (!scanToken(TokenType.WHITESPACE)) currentLookaheadToken= token85; Token token86= currentLookaheadToken; int remainingLookahead86= remainingLookahead; if (!scanToken(TokenType.TRIVIAL_FTL_HEADER)) { currentLookaheadToken= token86; remainingLookahead= remainingLookahead86; if (!check$FM_javacc$line_2686$column_6()) { return false; } } return true; } private final boolean check$ParamList() { if (!check$FM_javacc$line_2710$column_7()) { return false; } while (remainingLookahead> 0) { Token token87= currentLookaheadToken; if (!check$FM_javacc$line_2710$column_7()) { currentLookaheadToken= token87; break; } } return true; } private final boolean check$Root() { Token token88= currentLookaheadToken; if (!check$FM_javacc$line_2731$column_7()) currentLookaheadToken= token88; pushOntoLookaheadStack("Root", "FM.javacc", 2755, 4); if (!check$OptionalBlock()) { popLookaheadStack(); return false; } popLookaheadStack(); if (!scanToken(TokenType.EOF)) return false; return true; } private boolean trace_enabled= false; public void setTracingEnabled(boolean tracingEnabled) { trace_enabled= tracingEnabled; } /** * @deprecated Use #setTracingEnabled */ @Deprecated public void enable_tracing() { setTracingEnabled(true); } /** * @deprecated Use #setTracingEnabled */ @Deprecated public void disable_tracing() { setTracingEnabled(false); } ArrayList parsingStack= new ArrayList<> (); private ArrayList lookaheadStack= new ArrayList<> (); /** * Inner class that represents entering a grammar production */ class NonTerminalCall { final String sourceFile; final String productionName; final int line, column; // We actually only use this when we're working with the LookaheadStack final boolean stopAtScanLimit; NonTerminalCall(String sourceFile, String productionName, int line, int column) { this.sourceFile= sourceFile; this.productionName= productionName; this.line= line; this.column= column; this.stopAtScanLimit= FMParser.this.stopAtScanLimit; } StackTraceElement createStackTraceElement() { return new StackTraceElement("FMParser", productionName, sourceFile, line); } void dump(PrintStream ps) { ps.print(productionName); ps.println(" stopAtScanLimit: "+this.stopAtScanLimit); } } private final void pushOntoCallStack(String methodName, String fileName, int line, int column) { parsingStack.add(new NonTerminalCall(fileName, methodName, line, column)); } private final void popCallStack() { parsingStack.remove(parsingStack.size()-1); } private final void restoreCallStack(int prevSize) { while (parsingStack.size()> prevSize) { popCallStack(); } } private Iterator stackIteratorForward() { final Iterator parseStackIterator= parsingStack.iterator(); final Iterator lookaheadStackIterator= lookaheadStack.iterator(); return new Iterator () { public boolean hasNext() { return parseStackIterator.hasNext()||lookaheadStackIterator.hasNext(); } public NonTerminalCall next() { return parseStackIterator.hasNext()?parseStackIterator.next(): lookaheadStackIterator.next(); } } ; } private Iterator stackIteratorBackward() { final ListIterator parseStackIterator= parsingStack.listIterator(parsingStack.size()); final ListIterator lookaheadStackIterator= lookaheadStack.listIterator(lookaheadStack.size()); return new Iterator () { public boolean hasNext() { return parseStackIterator.hasPrevious()||lookaheadStackIterator.hasPrevious(); } public NonTerminalCall next() { return lookaheadStackIterator.hasPrevious()?lookaheadStackIterator.previous(): parseStackIterator.previous(); } } ; } private final void pushOntoLookaheadStack(String methodName, String fileName, int line, int column) { lookaheadStack.add(new NonTerminalCall(fileName, methodName, line, column)); } private final void popLookaheadStack() { NonTerminalCall ntc= lookaheadStack.remove(lookaheadStack.size()-1); this.stopAtScanLimit= ntc.stopAtScanLimit; } private void dumpLookaheadStack(PrintStream ps) { ListIterator it= lookaheadStack.listIterator(lookaheadStack.size()); while (it.hasPrevious()) { it.previous().dump(ps); } } private final boolean tolerantParsing= false; public boolean isParserTolerant() { return tolerantParsing; } public void setParserTolerant(boolean tolerantParsing) { if (tolerantParsing) { throw new UnsupportedOperationException("This parser was not built with that feature!"); } } private Token consumeToken(TokenType expectedType) throws ParseException { boolean forced= false; InvalidToken invalidToken= null; Token oldToken= currentToken; currentToken= currentToken.getNext(); if (currentToken== null) { currentToken= token_source.getNextToken(); } if (currentToken.getType()!=expectedType) { handleUnexpectedTokenType(expectedType, forced, oldToken); } else { this.lastParsedToken= currentToken; } if (trace_enabled) LOGGER.info("Consumed token of type "+currentToken.getType()+" from "+currentToken.getLocation()); return currentToken; } private void handleUnexpectedTokenType(TokenType expectedType, boolean forced, Token oldToken) throws ParseException { throw new ParseException(currentToken, EnumSet.of(expectedType), parsingStack); } private class ParseState { Token lastParsed; ParseState() { this.lastParsed= FMParser.this.lastParsedToken; } } private ArrayList parseStateStack= new ArrayList<> (); void stashParseState() { parseStateStack.add(new ParseState()); } ParseState popParseState() { return parseStateStack.remove(parseStateStack.size()-1); } void restoreStashedParseState() { ParseState state= popParseState(); if (state.lastParsed!=null) { //REVISIT currentToken= lastParsedToken= state.lastParsed; } token_source.switchTo(lastParsedToken.getLexicalState()); if (token_source.doLexicalStateSwitch(lastParsedToken.getType())) { token_source.reset(lastParsedToken); lastParsedToken.setNext(null); } } }