/* Generated By:JavaCC: Do not edit this line. PHPParser.java */ package test; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.CoreException; import org.eclipse.ui.texteditor.MarkerUtilities; import org.eclipse.jface.preference.IPreferenceStore; import java.util.Hashtable; import java.util.ArrayList; import java.io.StringReader; import java.io.*; import java.text.MessageFormat; import net.sourceforge.phpeclipse.actions.PHPStartApacheAction; import net.sourceforge.phpeclipse.PHPeclipsePlugin; import net.sourceforge.phpdt.internal.compiler.ast.*; import net.sourceforge.phpdt.internal.compiler.parser.OutlineableWithChildren; import net.sourceforge.phpdt.internal.compiler.parser.Outlineable; import net.sourceforge.phpdt.internal.compiler.parser.PHPOutlineInfo; import net.sourceforge.phpdt.internal.corext.Assert; /** * A new php parser. * This php parser is inspired by the Java 1.2 grammar example * given with JavaCC. You can get JavaCC at http://www.webgain.com * You can test the parser with the PHPParserTestCase2.java * @author Matthieu Casanova */ public final class PHPParser extends PHPParserSuperclass implements PHPParserConstants { //todo : fix the variables names bug //todo : handle tilde operator /** The current segment. */ private static OutlineableWithChildren currentSegment; private static final String PARSE_ERROR_STRING = "Parse error"; //$NON-NLS-1$ private static final String PARSE_WARNING_STRING = "Warning"; //$NON-NLS-1$ static PHPOutlineInfo outlineInfo; /** The error level of the current ParseException. */ private static int errorLevel = ERROR; /** The message of the current ParseException. If it's null it's because the parse exception wasn't handled */ private static String errorMessage; private static int errorStart = -1; private static int errorEnd = -1; private static PHPDocument phpDocument; private static final String SYNTAX_ERROR_CHAR = "syntax error"; /** * The point where html starts. * It will be used by the token manager to create HTMLCode objects */ public static int htmlStart; //ast stack private final static int AstStackIncrement = 100; /** The stack of node. */ private static AstNode[] nodes; /** The cursor in expression stack. */ private static int nodePtr; public static final boolean PARSER_DEBUG = false; public final void setFileToParse(final IFile fileToParse) { PHPParser.fileToParse = fileToParse; } public PHPParser() { } public PHPParser(final IFile fileToParse) { this(new StringReader("")); PHPParser.fileToParse = fileToParse; } public final void phpParserTester(final String strEval) throws ParseException { final StringReader stream = new StringReader(strEval); if (jj_input_stream == null) { jj_input_stream = new SimpleCharStream(stream, 1, 1); token_source = new PHPParserTokenManager(jj_input_stream); } ReInit(new StringReader(strEval)); init(); phpDocument = new PHPDocument(null,"_root".toCharArray()); currentSegment = phpDocument; outlineInfo = new PHPOutlineInfo(null, currentSegment); token_source.SwitchTo(PHPParserTokenManager.PHPPARSING); phpTest(); } public final void htmlParserTester(final File fileName) throws FileNotFoundException, ParseException { final Reader stream = new FileReader(fileName); if (jj_input_stream == null) { jj_input_stream = new SimpleCharStream(stream, 1, 1); token_source = new PHPParserTokenManager(jj_input_stream); } ReInit(stream); init(); phpDocument = new PHPDocument(null,"_root".toCharArray()); currentSegment = phpDocument; outlineInfo = new PHPOutlineInfo(null, currentSegment); phpFile(); } public final void htmlParserTester(final String strEval) throws ParseException { final StringReader stream = new StringReader(strEval); if (jj_input_stream == null) { jj_input_stream = new SimpleCharStream(stream, 1, 1); token_source = new PHPParserTokenManager(jj_input_stream); } ReInit(stream); init(); phpDocument = new PHPDocument(null,"_root".toCharArray()); currentSegment = phpDocument; outlineInfo = new PHPOutlineInfo(null, currentSegment); phpFile(); } /** * Reinitialize the parser. */ private static final void init() { nodes = new AstNode[AstStackIncrement]; nodePtr = -1; htmlStart = 0; } /** * Add an php node on the stack. * @param node the node that will be added to the stack */ private static final void pushOnAstNodes(final AstNode node) { try { nodes[++nodePtr] = node; } catch (IndexOutOfBoundsException e) { final int oldStackLength = nodes.length; final AstNode[] oldStack = nodes; nodes = new AstNode[oldStackLength + AstStackIncrement]; System.arraycopy(oldStack, 0, nodes, 0, oldStackLength); nodePtr = oldStackLength; nodes[nodePtr] = node; } } public final PHPOutlineInfo parseInfo(final Object parent, final String s) { phpDocument = new PHPDocument(parent,"_root".toCharArray()); currentSegment = phpDocument; outlineInfo = new PHPOutlineInfo(parent, currentSegment); final StringReader stream = new StringReader(s); if (jj_input_stream == null) { jj_input_stream = new SimpleCharStream(stream, 1, 1); token_source = new PHPParserTokenManager(jj_input_stream); } ReInit(stream); init(); try { parse(); phpDocument.nodes = new AstNode[nodes.length]; System.arraycopy(nodes,0,phpDocument.nodes,0,nodes.length); if (PHPeclipsePlugin.DEBUG) { PHPeclipsePlugin.log(1,phpDocument.toString()); } } catch (ParseException e) { processParseException(e); } return outlineInfo; } /** * This function will throw the exception if we are in debug mode * and process it if we are in production mode. * this should be fast since the PARSER_DEBUG is static final so the difference will be at compile time * @param e the exception * @throws ParseException the thrown exception */ private static void processParseExceptionDebug(final ParseException e) throws ParseException { if (PARSER_DEBUG) { throw e; } processParseException(e); } /** * This method will process the parse exception. * If the error message is null, the parse exception wasn't catched and a trace is written in the log * @param e the ParseException */ private static void processParseException(final ParseException e) { if (errorMessage == null) { PHPeclipsePlugin.log(e); errorMessage = "this exception wasn't handled by the parser please tell us how to reproduce it"; errorStart = e.currentToken.sourceStart; errorEnd = e.currentToken.sourceEnd; } setMarker(e); errorMessage = null; // if (PHPeclipsePlugin.DEBUG) PHPeclipsePlugin.log(e); } /** * Create marker for the parse error. * @param e the ParseException */ private static void setMarker(final ParseException e) { try { if (errorStart == -1) { setMarker(fileToParse, errorMessage, e.currentToken.sourceStart, e.currentToken.sourceEnd, errorLevel, "Line " + e.currentToken.beginLine+", "+e.currentToken.sourceStart+':'+e.currentToken.sourceEnd); } else { setMarker(fileToParse, errorMessage, errorStart, errorEnd, errorLevel, "Line " + e.currentToken.beginLine+", "+errorStart+':'+errorEnd); errorStart = -1; errorEnd = -1; } } catch (CoreException e2) { PHPeclipsePlugin.log(e2); } } private static void scanLine(final String output, final IFile file, final int indx, final int brIndx) throws CoreException { String current; final StringBuffer lineNumberBuffer = new StringBuffer(10); char ch; current = output.substring(indx, brIndx); if (current.indexOf(PARSE_WARNING_STRING) != -1 || current.indexOf(PARSE_ERROR_STRING) != -1) { final int onLine = current.indexOf("on line "); if (onLine != -1) { lineNumberBuffer.delete(0, lineNumberBuffer.length()); for (int i = onLine; i < current.length(); i++) { ch = current.charAt(i); if ('0' <= ch && '9' >= ch) { lineNumberBuffer.append(ch); } } final int lineNumber = Integer.parseInt(lineNumberBuffer.toString()); final Hashtable attributes = new Hashtable(); current = current.replaceAll("\n", ""); current = current.replaceAll("", ""); current = current.replaceAll("", ""); MarkerUtilities.setMessage(attributes, current); if (current.indexOf(PARSE_ERROR_STRING) != -1) attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR)); else if (current.indexOf(PARSE_WARNING_STRING) != -1) attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_WARNING)); else attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_INFO)); MarkerUtilities.setLineNumber(attributes, lineNumber); MarkerUtilities.createMarker(file, attributes, IMarker.PROBLEM); } } } public final void parse(final String s) { final StringReader stream = new StringReader(s); if (jj_input_stream == null) { jj_input_stream = new SimpleCharStream(stream, 1, 1); token_source = new PHPParserTokenManager(jj_input_stream); } ReInit(stream); init(); try { parse(); } catch (ParseException e) { processParseException(e); } } /** * Call the php parse command ( php -l -f <filename> ) * and create markers according to the external parser output */ public static void phpExternalParse(final IFile file) { final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore(); final String filename = file.getLocation().toString(); final String[] arguments = { filename }; final MessageFormat form = new MessageFormat(store.getString(PHPeclipsePlugin.EXTERNAL_PARSER_PREF)); final String command = form.format(arguments); final String parserResult = PHPStartApacheAction.getParserOutput(command, "External parser: "); try { // parse the buffer to find the errors and warnings createMarkers(parserResult, file); } catch (CoreException e) { PHPeclipsePlugin.log(e); } } /** * Put a new html block in the stack. */ public final void createNewHTMLCode() { final int currentPosition = token.sourceStart; if (currentPosition == htmlStart || currentPosition < htmlStart || currentPosition > jj_input_stream.getCurrentBuffer().length()) { return; } final String html = jj_input_stream.getCurrentBuffer().substring(htmlStart, currentPosition); pushOnAstNodes(new HTMLCode(html, htmlStart,currentPosition)); } /** Create a new task. */ public final void createNewTask(final int todoStart) { final String todo = jj_input_stream.getCurrentBuffer().substring(todoStart, jj_input_stream.getCurrentBuffer().indexOf("\n", todoStart)-1); if (!PARSER_DEBUG) { try { setMarker(fileToParse, todo, jj_input_stream.getBeginLine(), TASK, "Line "+jj_input_stream.getBeginLine()); } catch (CoreException e) { PHPeclipsePlugin.log(e); } } } private final void parse() throws ParseException { phpFile(); } final public void todo() throws ParseException { Token todoToken; todoToken = jj_consume_token(23); createNewTask(todoToken.sourceStart); } final public void phpTest() throws ParseException { Php(); jj_consume_token(0); } final public void phpFile() throws ParseException { try { label_1: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PHPSTARTSHORT: case PHPSTARTLONG: case PHPECHOSTART: case PHPEND: case CLASS: case FUNCTION: case IF: case ARRAY: case BREAK: case LIST: case PRINT: case ECHO: case INCLUDE: case REQUIRE: case INCLUDE_ONCE: case REQUIRE_ONCE: case GLOBAL: case DEFINE: case STATIC: case CONTINUE: case DO: case FOR: case NEW: case NULL: case RETURN: case SWITCH: case TRUE: case FALSE: case WHILE: case FOREACH: case AT: case BANG: case TILDE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: case LBRACE: case SEMICOLON: ; break; default: jj_la1[0] = jj_gen; break label_1; } PhpBlock(); } createNewHTMLCode(); } catch (TokenMgrError e) { PHPeclipsePlugin.log(e); errorStart = jj_input_stream.getBeginOffset(); errorEnd = jj_input_stream.getEndOffset(); errorMessage = e.getMessage(); errorLevel = ERROR; {if (true) throw generateParseException();} } } /** * A php block is a * or * or */ final public void PhpBlock() throws ParseException { final PHPEchoBlock phpEchoBlock; final Token token,phpEnd; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PHPECHOSTART: phpEchoBlock = phpEchoBlock(); pushOnAstNodes(phpEchoBlock); break; case PHPSTARTSHORT: case PHPSTARTLONG: case PHPEND: case CLASS: case FUNCTION: case IF: case ARRAY: case BREAK: case LIST: case PRINT: case ECHO: case INCLUDE: case REQUIRE: case INCLUDE_ONCE: case REQUIRE_ONCE: case GLOBAL: case DEFINE: case STATIC: case CONTINUE: case DO: case FOR: case NEW: case NULL: case RETURN: case SWITCH: case TRUE: case FALSE: case WHILE: case FOREACH: case AT: case BANG: case TILDE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: case LBRACE: case SEMICOLON: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PHPSTARTSHORT: case PHPSTARTLONG: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PHPSTARTLONG: jj_consume_token(PHPSTARTLONG); break; case PHPSTARTSHORT: token = jj_consume_token(PHPSTARTSHORT); try { setMarker(fileToParse, "You should use '' expected"; errorLevel = ERROR; errorStart = e.currentToken.sourceStart; errorEnd = e.currentToken.sourceEnd; processParseExceptionDebug(e); } break; default: jj_la1[3] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } final public PHPEchoBlock phpEchoBlock() throws ParseException { final Expression expr; final PHPEchoBlock echoBlock; final Token token, token2; token = jj_consume_token(PHPECHOSTART); createNewHTMLCode(); expr = Expression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case SEMICOLON: jj_consume_token(SEMICOLON); break; default: jj_la1[4] = jj_gen; ; } token2 = jj_consume_token(PHPEND); htmlStart = token2.sourceEnd; echoBlock = new PHPEchoBlock(expr,token.sourceStart,token2.sourceEnd); pushOnAstNodes(echoBlock); {if (true) return echoBlock;} throw new Error("Missing return statement in function"); } final public void Php() throws ParseException { label_2: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case CLASS: case FUNCTION: case IF: case ARRAY: case BREAK: case LIST: case PRINT: case ECHO: case INCLUDE: case REQUIRE: case INCLUDE_ONCE: case REQUIRE_ONCE: case GLOBAL: case DEFINE: case STATIC: case CONTINUE: case DO: case FOR: case NEW: case NULL: case RETURN: case SWITCH: case TRUE: case FALSE: case WHILE: case FOREACH: case AT: case BANG: case TILDE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: case LBRACE: case SEMICOLON: ; break; default: jj_la1[5] = jj_gen; break label_2; } BlockStatement(); } } final public ClassDeclaration ClassDeclaration() throws ParseException { final ClassDeclaration classDeclaration; Token className = null; final Token superclassName, token, extendsToken; String classNameImage = SYNTAX_ERROR_CHAR; String superclassNameImage = null; final int classEnd; token = jj_consume_token(CLASS); try { className = jj_consume_token(IDENTIFIER); classNameImage = className.image; } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', identifier expected"; errorLevel = ERROR; errorStart = token.sourceEnd+1; errorEnd = token.sourceEnd+1; processParseExceptionDebug(e); } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case EXTENDS: extendsToken = jj_consume_token(EXTENDS); try { superclassName = jj_consume_token(IDENTIFIER); superclassNameImage = superclassName.image; } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', identifier expected"; errorLevel = ERROR; errorStart = extendsToken.sourceEnd+1; errorEnd = extendsToken.sourceEnd+1; processParseExceptionDebug(e); superclassNameImage = SYNTAX_ERROR_CHAR; } break; default: jj_la1[6] = jj_gen; ; } int start, end; if (className == null) { start = token.sourceStart; end = token.sourceEnd; } else { start = className.sourceStart; end = className.sourceEnd; } if (superclassNameImage == null) { classDeclaration = new ClassDeclaration(currentSegment, classNameImage, start, end); } else { classDeclaration = new ClassDeclaration(currentSegment, classNameImage, superclassNameImage, start, end); } currentSegment.add(classDeclaration); currentSegment = classDeclaration; classEnd = ClassBody(classDeclaration); currentSegment = (OutlineableWithChildren) currentSegment.getParent(); classDeclaration.sourceEnd = classEnd; pushOnAstNodes(classDeclaration); {if (true) return classDeclaration;} throw new Error("Missing return statement in function"); } final public int ClassBody(final ClassDeclaration classDeclaration) throws ParseException { Token token; try { jj_consume_token(LBRACE); } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image + "'. '{' expected"; errorLevel = ERROR; errorStart = e.currentToken.sourceStart; errorEnd = e.currentToken.sourceEnd; processParseExceptionDebug(e); } label_3: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case FUNCTION: case VAR: ; break; default: jj_la1[7] = jj_gen; break label_3; } ClassBodyDeclaration(classDeclaration); } try { token = jj_consume_token(RBRACE); {if (true) return token.sourceEnd;} } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. 'var', 'function' or '}' expected"; errorLevel = ERROR; errorStart = e.currentToken.sourceStart; errorEnd = e.currentToken.sourceEnd; processParseExceptionDebug(e); {if (true) return this.token.sourceEnd;} } throw new Error("Missing return statement in function"); } /** * A class can contain only methods and fields. */ final public void ClassBodyDeclaration(final ClassDeclaration classDeclaration) throws ParseException { final MethodDeclaration method; final FieldDeclaration field; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case FUNCTION: method = MethodDeclaration(); method.analyzeCode(); classDeclaration.addMethod(method); break; case VAR: field = FieldDeclaration(); classDeclaration.addField(field); break; default: jj_la1[8] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } /** * A class field declaration : it's var VariableDeclarator() (, VariableDeclarator())*;. * it is only used by ClassBodyDeclaration() */ final public FieldDeclaration FieldDeclaration() throws ParseException { VariableDeclaration variableDeclaration; final VariableDeclaration[] list; final ArrayList arrayList = new ArrayList(); final Token token; Token token2 = null; int pos; token = jj_consume_token(VAR); variableDeclaration = VariableDeclaratorNoSuffix(); arrayList.add(variableDeclaration); pos = variableDeclaration.sourceEnd; label_4: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: ; break; default: jj_la1[9] = jj_gen; break label_4; } jj_consume_token(COMMA); variableDeclaration = VariableDeclaratorNoSuffix(); arrayList.add(variableDeclaration); outlineInfo.addVariable(variableDeclaration.name()); pos = variableDeclaration.sourceEnd; } try { token2 = jj_consume_token(SEMICOLON); } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected after variable declaration"; errorLevel = ERROR; errorStart = pos+1; errorEnd = pos+1; processParseExceptionDebug(e); } list = new VariableDeclaration[arrayList.size()]; arrayList.toArray(list); int end; if (token2 == null) { end = list[list.length-1].sourceEnd; } else { end = token2.sourceEnd; } {if (true) return new FieldDeclaration(list, token.sourceStart, end, currentSegment);} throw new Error("Missing return statement in function"); } /** * a strict variable declarator : there cannot be a suffix here. * It will be used by fields and formal parameters */ final public VariableDeclaration VariableDeclaratorNoSuffix() throws ParseException { final Token token, lbrace,rbrace; Expression expr, initializer = null; Token assignToken; Variable variable; jj_consume_token(DOLLAR); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case IDENTIFIER: token = jj_consume_token(IDENTIFIER); variable = new Variable(token.image,token.sourceStart,token.sourceEnd); break; case LBRACE: lbrace = jj_consume_token(LBRACE); expr = Expression(); rbrace = jj_consume_token(RBRACE); variable = new Variable(expr,lbrace.sourceStart,rbrace.sourceEnd); break; default: jj_la1[10] = jj_gen; jj_consume_token(-1); throw new ParseException(); } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ASSIGN: assignToken = jj_consume_token(ASSIGN); try { initializer = VariableInitializer(); } catch (ParseException e) { errorMessage = "Literal expression expected in variable initializer"; errorLevel = ERROR; errorStart = assignToken.sourceEnd +1; errorEnd = assignToken.sourceEnd +1; processParseExceptionDebug(e); } break; default: jj_la1[11] = jj_gen; ; } if (initializer == null) { {if (true) return new VariableDeclaration(currentSegment, variable, variable.sourceStart, variable.sourceEnd);} } {if (true) return new VariableDeclaration(currentSegment, variable, initializer, VariableDeclaration.EQUAL, variable.sourceStart);} throw new Error("Missing return statement in function"); } /** * this will be used by static statement */ final public VariableDeclaration VariableDeclarator() throws ParseException { final AbstractVariable variable; Expression initializer = null; final Token token; variable = VariableDeclaratorId(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ASSIGN: token = jj_consume_token(ASSIGN); try { initializer = VariableInitializer(); } catch (ParseException e) { errorMessage = "Literal expression expected in variable initializer"; errorLevel = ERROR; errorStart = token.sourceEnd+1; errorEnd = token.sourceEnd+1; processParseExceptionDebug(e); } break; default: jj_la1[12] = jj_gen; ; } if (initializer == null) { {if (true) return new VariableDeclaration(currentSegment, variable, variable.sourceStart, variable.sourceEnd);} } {if (true) return new VariableDeclaration(currentSegment, variable, initializer, VariableDeclaration.EQUAL, variable.sourceStart);} throw new Error("Missing return statement in function"); } /** * A Variable name. * @return the variable name (with suffix) */ final public AbstractVariable VariableDeclaratorId() throws ParseException { AbstractVariable var; try { var = Variable(); label_5: while (true) { if (jj_2_1(2)) { ; } else { break label_5; } var = VariableSuffix(var); } {if (true) return var;} } catch (ParseException e) { errorMessage = "'$' expected for variable identifier"; errorLevel = ERROR; errorStart = e.currentToken.sourceStart; errorEnd = e.currentToken.sourceEnd; {if (true) throw e;} } throw new Error("Missing return statement in function"); } final public Variable Variable() throws ParseException { Variable variable = null; final Token token; token = jj_consume_token(DOLLAR); variable = Var(); {if (true) return variable;} throw new Error("Missing return statement in function"); } final public Variable Var() throws ParseException { Variable variable = null; final Token token,token2; ConstantIdentifier constant; Expression expression; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case DOLLAR: token = jj_consume_token(DOLLAR); variable = Var(); {if (true) return new Variable(variable,variable.sourceStart,variable.sourceEnd);} break; case LBRACE: token = jj_consume_token(LBRACE); expression = Expression(); token2 = jj_consume_token(RBRACE); {if (true) return new Variable(expression, token.sourceStart, token2.sourceEnd);} break; case IDENTIFIER: token = jj_consume_token(IDENTIFIER); outlineInfo.addVariable('$' + token.image); {if (true) return new Variable(token.image,token.sourceStart,token.sourceEnd);} break; default: jj_la1[13] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public Expression VariableInitializer() throws ParseException { final Expression expr; final Token token, token2; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case NULL: case TRUE: case FALSE: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: expr = Literal(); {if (true) return expr;} break; case MINUS: token2 = jj_consume_token(MINUS); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case INTEGER_LITERAL: token = jj_consume_token(INTEGER_LITERAL); break; case FLOATING_POINT_LITERAL: token = jj_consume_token(FLOATING_POINT_LITERAL); break; default: jj_la1[14] = jj_gen; jj_consume_token(-1); throw new ParseException(); } {if (true) return new PrefixedUnaryExpression(new NumberLiteral(token), OperatorIds.MINUS, token2.sourceStart);} break; case PLUS: token2 = jj_consume_token(PLUS); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case INTEGER_LITERAL: token = jj_consume_token(INTEGER_LITERAL); break; case FLOATING_POINT_LITERAL: token = jj_consume_token(FLOATING_POINT_LITERAL); break; default: jj_la1[15] = jj_gen; jj_consume_token(-1); throw new ParseException(); } {if (true) return new PrefixedUnaryExpression(new NumberLiteral(token), OperatorIds.PLUS, token2.sourceStart);} break; case ARRAY: expr = ArrayDeclarator(); {if (true) return expr;} break; case IDENTIFIER: token = jj_consume_token(IDENTIFIER); {if (true) return new ConstantIdentifier(token);} break; default: jj_la1[16] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public ArrayVariableDeclaration ArrayVariable() throws ParseException { final Expression expr,expr2; expr = Expression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ARRAYASSIGN: jj_consume_token(ARRAYASSIGN); expr2 = Expression(); {if (true) return new ArrayVariableDeclaration(expr,expr2);} break; default: jj_la1[17] = jj_gen; ; } {if (true) return new ArrayVariableDeclaration(expr,jj_input_stream.getPosition());} throw new Error("Missing return statement in function"); } final public ArrayVariableDeclaration[] ArrayInitializer() throws ParseException { ArrayVariableDeclaration expr; final ArrayList list = new ArrayList(); jj_consume_token(LPAREN); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ARRAY: case LIST: case PRINT: case NEW: case NULL: case TRUE: case FALSE: case AT: case BANG: case TILDE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: expr = ArrayVariable(); list.add(expr); label_6: while (true) { if (jj_2_2(2)) { ; } else { break label_6; } jj_consume_token(COMMA); expr = ArrayVariable(); list.add(expr); } break; default: jj_la1[18] = jj_gen; ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: jj_consume_token(COMMA); list.add(null); break; default: jj_la1[19] = jj_gen; ; } jj_consume_token(RPAREN); final ArrayVariableDeclaration[] vars = new ArrayVariableDeclaration[list.size()]; list.toArray(vars); {if (true) return vars;} throw new Error("Missing return statement in function"); } /** * A Method Declaration. * function MetodDeclarator() Block() */ final public MethodDeclaration MethodDeclaration() throws ParseException { final MethodDeclaration functionDeclaration; final Block block; final OutlineableWithChildren seg = currentSegment; final Token token; token = jj_consume_token(FUNCTION); try { functionDeclaration = MethodDeclarator(token.sourceStart); outlineInfo.addVariable(functionDeclaration.name); } catch (ParseException e) { if (errorMessage != null) {if (true) throw e;} errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function identifier expected"; errorLevel = ERROR; errorStart = e.currentToken.sourceStart; errorEnd = e.currentToken.sourceEnd; {if (true) throw e;} } currentSegment = functionDeclaration; block = Block(); functionDeclaration.statements = block.statements; currentSegment = seg; {if (true) return functionDeclaration;} throw new Error("Missing return statement in function"); } /** * A MethodDeclarator. * [&] IDENTIFIER(parameters ...). * @return a function description for the outline */ final public MethodDeclaration MethodDeclarator(final int start) throws ParseException { Token identifier = null; Token reference = null; final ArrayList formalParameters = new ArrayList(); String identifierChar = SYNTAX_ERROR_CHAR; int end = start; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case BIT_AND: reference = jj_consume_token(BIT_AND); end = reference.sourceEnd; break; default: jj_la1[20] = jj_gen; ; } try { identifier = jj_consume_token(IDENTIFIER); identifierChar = identifier.image; end = identifier.sourceEnd; } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function identifier expected"; errorLevel = ERROR; errorStart = e.currentToken.sourceEnd; errorEnd = e.currentToken.next.sourceStart; processParseExceptionDebug(e); } end = FormalParameters(formalParameters); int nameStart, nameEnd; if (identifier == null) { if (reference == null) { nameStart = start + 9; nameEnd = start + 10; } else { nameStart = reference.sourceEnd + 1; nameEnd = reference.sourceEnd + 2; } } else { nameStart = identifier.sourceStart; nameEnd = identifier.sourceEnd; } {if (true) return new MethodDeclaration(currentSegment, identifierChar, formalParameters, reference != null, nameStart, nameEnd, start, end);} throw new Error("Missing return statement in function"); } /** * FormalParameters follows method identifier. * (FormalParameter()) */ final public int FormalParameters(final ArrayList parameters) throws ParseException { VariableDeclaration var; final Token token; Token tok = this.token; int end = tok.sourceEnd; try { tok = jj_consume_token(LPAREN); end = tok.sourceEnd; } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', '(' expected after function identifier"; errorLevel = ERROR; errorStart = e.currentToken.next.sourceStart; errorEnd = e.currentToken.next.sourceEnd; processParseExceptionDebug(e); } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case BIT_AND: case DOLLAR: var = FormalParameter(); parameters.add(var);end = var.sourceEnd; label_7: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: ; break; default: jj_la1[21] = jj_gen; break label_7; } jj_consume_token(COMMA); var = FormalParameter(); parameters.add(var);end = var.sourceEnd; } break; default: jj_la1[22] = jj_gen; ; } try { token = jj_consume_token(RPAREN); end = token.sourceEnd; } catch (ParseException e) { errorMessage = "')' expected"; errorLevel = ERROR; errorStart = e.currentToken.next.sourceStart; errorEnd = e.currentToken.next.sourceEnd; processParseExceptionDebug(e); } {if (true) return end;} throw new Error("Missing return statement in function"); } /** * A formal parameter. * $varname[=value] (,$varname[=value]) */ final public VariableDeclaration FormalParameter() throws ParseException { final VariableDeclaration variableDeclaration; Token token = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case BIT_AND: token = jj_consume_token(BIT_AND); break; default: jj_la1[23] = jj_gen; ; } variableDeclaration = VariableDeclaratorNoSuffix(); outlineInfo.addVariable('$'+variableDeclaration.name()); if (token != null) { variableDeclaration.setReference(true); } {if (true) return variableDeclaration;} throw new Error("Missing return statement in function"); } final public ConstantIdentifier Type() throws ParseException { final Token token; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case STRING: token = jj_consume_token(STRING); {if (true) return new ConstantIdentifier(token);} break; case BOOL: token = jj_consume_token(BOOL); {if (true) return new ConstantIdentifier(token);} break; case BOOLEAN: token = jj_consume_token(BOOLEAN); {if (true) return new ConstantIdentifier(token);} break; case REAL: token = jj_consume_token(REAL); {if (true) return new ConstantIdentifier(token);} break; case DOUBLE: token = jj_consume_token(DOUBLE); {if (true) return new ConstantIdentifier(token);} break; case FLOAT: token = jj_consume_token(FLOAT); {if (true) return new ConstantIdentifier(token);} break; case INT: token = jj_consume_token(INT); {if (true) return new ConstantIdentifier(token);} break; case INTEGER: token = jj_consume_token(INTEGER); {if (true) return new ConstantIdentifier(token);} break; case OBJECT: token = jj_consume_token(OBJECT); {if (true) return new ConstantIdentifier(token);} break; default: jj_la1[24] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public Expression Expression() throws ParseException { final Expression expr; Expression initializer = null; int assignOperator = -1; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ARRAY: case NEW: case NULL: case TRUE: case FALSE: case AT: case BANG: case TILDE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: expr = ConditionalExpression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ASSIGN: case PLUSASSIGN: case MINUSASSIGN: case STARASSIGN: case SLASHASSIGN: case ANDASSIGN: case ORASSIGN: case XORASSIGN: case DOTASSIGN: case REMASSIGN: case TILDEEQUAL: case LSHIFTASSIGN: case RSIGNEDSHIFTASSIGN: assignOperator = AssignmentOperator(); try { initializer = Expression(); } catch (ParseException e) { if (errorMessage != null) { {if (true) throw e;} } errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', expression expected"; errorLevel = ERROR; errorEnd = jj_input_stream.getPosition(); {if (true) throw e;} } break; default: jj_la1[25] = jj_gen; ; } if (assignOperator != -1) {// todo : change this, very very bad :( if (expr instanceof AbstractVariable) { {if (true) return new VariableDeclaration(currentSegment, (AbstractVariable) expr, initializer, expr.sourceStart, initializer.sourceEnd);} } String varName = expr.toStringExpression().substring(1); {if (true) return new VariableDeclaration(currentSegment, new Variable(varName, expr.sourceStart, expr.sourceEnd), expr.sourceStart, initializer.sourceEnd);} } {if (true) return expr;} break; case LIST: case PRINT: expr = ExpressionWBang(); {if (true) return expr;} break; default: jj_la1[26] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public Expression ExpressionWBang() throws ParseException { final Expression expr; final Token token; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case BANG: token = jj_consume_token(BANG); expr = ExpressionWBang(); {if (true) return new PrefixedUnaryExpression(expr,OperatorIds.NOT,token.sourceStart);} break; case LIST: case PRINT: expr = ExpressionNoBang(); {if (true) return expr;} break; default: jj_la1[27] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public Expression ExpressionNoBang() throws ParseException { Expression expr; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LIST: expr = ListExpression(); {if (true) return expr;} break; case PRINT: expr = PrintExpression(); {if (true) return expr;} break; default: jj_la1[28] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } /** * Any assignement operator. * @return the assignement operator id */ final public int AssignmentOperator() throws ParseException { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ASSIGN: jj_consume_token(ASSIGN); {if (true) return VariableDeclaration.EQUAL;} break; case STARASSIGN: jj_consume_token(STARASSIGN); {if (true) return VariableDeclaration.STAR_EQUAL;} break; case SLASHASSIGN: jj_consume_token(SLASHASSIGN); {if (true) return VariableDeclaration.SLASH_EQUAL;} break; case REMASSIGN: jj_consume_token(REMASSIGN); {if (true) return VariableDeclaration.REM_EQUAL;} break; case PLUSASSIGN: jj_consume_token(PLUSASSIGN); {if (true) return VariableDeclaration.PLUS_EQUAL;} break; case MINUSASSIGN: jj_consume_token(MINUSASSIGN); {if (true) return VariableDeclaration.MINUS_EQUAL;} break; case LSHIFTASSIGN: jj_consume_token(LSHIFTASSIGN); {if (true) return VariableDeclaration.LSHIFT_EQUAL;} break; case RSIGNEDSHIFTASSIGN: jj_consume_token(RSIGNEDSHIFTASSIGN); {if (true) return VariableDeclaration.RSIGNEDSHIFT_EQUAL;} break; case ANDASSIGN: jj_consume_token(ANDASSIGN); {if (true) return VariableDeclaration.AND_EQUAL;} break; case XORASSIGN: jj_consume_token(XORASSIGN); {if (true) return VariableDeclaration.XOR_EQUAL;} break; case ORASSIGN: jj_consume_token(ORASSIGN); {if (true) return VariableDeclaration.OR_EQUAL;} break; case DOTASSIGN: jj_consume_token(DOTASSIGN); {if (true) return VariableDeclaration.DOT_EQUAL;} break; case TILDEEQUAL: jj_consume_token(TILDEEQUAL); {if (true) return VariableDeclaration.TILDE_EQUAL;} break; default: jj_la1[29] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public Expression ConditionalExpression() throws ParseException { final Expression expr; Expression expr2 = null; Expression expr3 = null; expr = ConditionalOrExpression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case HOOK: jj_consume_token(HOOK); expr2 = Expression(); jj_consume_token(COLON); expr3 = ConditionalExpression(); break; default: jj_la1[30] = jj_gen; ; } if (expr3 == null) { {if (true) return expr;} } {if (true) return new ConditionalExpression(expr,expr2,expr3);} throw new Error("Missing return statement in function"); } final public Expression ConditionalOrExpression() throws ParseException { Expression expr,expr2; int operator; expr = ConditionalAndExpression(); label_8: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case OR_OR: case _ORL: ; break; default: jj_la1[31] = jj_gen; break label_8; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case OR_OR: jj_consume_token(OR_OR); operator = OperatorIds.OR_OR; break; case _ORL: jj_consume_token(_ORL); operator = OperatorIds.ORL; break; default: jj_la1[32] = jj_gen; jj_consume_token(-1); throw new ParseException(); } expr2 = ConditionalAndExpression(); expr = new BinaryExpression(expr,expr2,operator); } {if (true) return expr;} throw new Error("Missing return statement in function"); } final public Expression ConditionalAndExpression() throws ParseException { Expression expr,expr2; int operator; expr = ConcatExpression(); label_9: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case AND_AND: case _ANDL: ; break; default: jj_la1[33] = jj_gen; break label_9; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case AND_AND: jj_consume_token(AND_AND); operator = OperatorIds.AND_AND; break; case _ANDL: jj_consume_token(_ANDL); operator = OperatorIds.ANDL; break; default: jj_la1[34] = jj_gen; jj_consume_token(-1); throw new ParseException(); } expr2 = ConcatExpression(); expr = new BinaryExpression(expr,expr2,operator); } {if (true) return expr;} throw new Error("Missing return statement in function"); } final public Expression ConcatExpression() throws ParseException { Expression expr,expr2; expr = InclusiveOrExpression(); label_10: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case DOT: ; break; default: jj_la1[35] = jj_gen; break label_10; } jj_consume_token(DOT); expr2 = InclusiveOrExpression(); expr = new BinaryExpression(expr,expr2,OperatorIds.DOT); } {if (true) return expr;} throw new Error("Missing return statement in function"); } final public Expression InclusiveOrExpression() throws ParseException { Expression expr,expr2; expr = ExclusiveOrExpression(); label_11: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case BIT_OR: ; break; default: jj_la1[36] = jj_gen; break label_11; } jj_consume_token(BIT_OR); expr2 = ExclusiveOrExpression(); expr = new BinaryExpression(expr,expr2,OperatorIds.OR); } {if (true) return expr;} throw new Error("Missing return statement in function"); } final public Expression ExclusiveOrExpression() throws ParseException { Expression expr,expr2; expr = AndExpression(); label_12: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case XOR: ; break; default: jj_la1[37] = jj_gen; break label_12; } jj_consume_token(XOR); expr2 = AndExpression(); expr = new BinaryExpression(expr,expr2,OperatorIds.XOR); } {if (true) return expr;} throw new Error("Missing return statement in function"); } final public Expression AndExpression() throws ParseException { Expression expr,expr2; expr = EqualityExpression(); label_13: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case BIT_AND: ; break; default: jj_la1[38] = jj_gen; break label_13; } jj_consume_token(BIT_AND); expr2 = EqualityExpression(); expr = new BinaryExpression(expr,expr2,OperatorIds.AND); } {if (true) return expr;} throw new Error("Missing return statement in function"); } final public Expression EqualityExpression() throws ParseException { Expression expr,expr2; int operator; Token token; expr = RelationalExpression(); label_14: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case EQUAL_EQUAL: case NOT_EQUAL: case DIF: case BANGDOUBLEEQUAL: case TRIPLEEQUAL: ; break; default: jj_la1[39] = jj_gen; break label_14; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case EQUAL_EQUAL: token = jj_consume_token(EQUAL_EQUAL); operator = OperatorIds.EQUAL_EQUAL; break; case DIF: token = jj_consume_token(DIF); operator = OperatorIds.DIF; break; case NOT_EQUAL: token = jj_consume_token(NOT_EQUAL); operator = OperatorIds.DIF; break; case BANGDOUBLEEQUAL: token = jj_consume_token(BANGDOUBLEEQUAL); operator = OperatorIds.BANG_EQUAL_EQUAL; break; case TRIPLEEQUAL: token = jj_consume_token(TRIPLEEQUAL); operator = OperatorIds.EQUAL_EQUAL_EQUAL; break; default: jj_la1[40] = jj_gen; jj_consume_token(-1); throw new ParseException(); } try { expr2 = RelationalExpression(); } catch (ParseException e) { if (errorMessage != null) { {if (true) throw e;} } errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', expression expected"; errorLevel = ERROR; errorStart = token.sourceEnd +1; errorEnd = token.sourceEnd +1; expr2 = new ConstantIdentifier(SYNTAX_ERROR_CHAR,token.sourceEnd +1,token.sourceEnd +1); processParseExceptionDebug(e); } expr = new BinaryExpression(expr,expr2,operator); } {if (true) return expr;} throw new Error("Missing return statement in function"); } final public Expression RelationalExpression() throws ParseException { Expression expr,expr2; int operator; expr = ShiftExpression(); label_15: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case GT: case LT: case LE: case GE: ; break; default: jj_la1[41] = jj_gen; break label_15; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LT: jj_consume_token(LT); operator = OperatorIds.LESS; break; case GT: jj_consume_token(GT); operator = OperatorIds.GREATER; break; case LE: jj_consume_token(LE); operator = OperatorIds.LESS_EQUAL; break; case GE: jj_consume_token(GE); operator = OperatorIds.GREATER_EQUAL; break; default: jj_la1[42] = jj_gen; jj_consume_token(-1); throw new ParseException(); } expr2 = ShiftExpression(); expr = new BinaryExpression(expr,expr2,operator); } {if (true) return expr;} throw new Error("Missing return statement in function"); } final public Expression ShiftExpression() throws ParseException { Expression expr,expr2; int operator; expr = AdditiveExpression(); label_16: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LSHIFT: case RSIGNEDSHIFT: case RUNSIGNEDSHIFT: ; break; default: jj_la1[43] = jj_gen; break label_16; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LSHIFT: jj_consume_token(LSHIFT); operator = OperatorIds.LEFT_SHIFT; break; case RSIGNEDSHIFT: jj_consume_token(RSIGNEDSHIFT); operator = OperatorIds.RIGHT_SHIFT; break; case RUNSIGNEDSHIFT: jj_consume_token(RUNSIGNEDSHIFT); operator = OperatorIds.UNSIGNED_RIGHT_SHIFT; break; default: jj_la1[44] = jj_gen; jj_consume_token(-1); throw new ParseException(); } expr2 = AdditiveExpression(); expr = new BinaryExpression(expr,expr2,operator); } {if (true) return expr;} throw new Error("Missing return statement in function"); } final public Expression AdditiveExpression() throws ParseException { Expression expr,expr2; int operator; expr = MultiplicativeExpression(); label_17: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PLUS: case MINUS: ; break; default: jj_la1[45] = jj_gen; break label_17; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PLUS: jj_consume_token(PLUS); operator = OperatorIds.PLUS; break; case MINUS: jj_consume_token(MINUS); operator = OperatorIds.MINUS; break; default: jj_la1[46] = jj_gen; jj_consume_token(-1); throw new ParseException(); } expr2 = MultiplicativeExpression(); expr = new BinaryExpression(expr,expr2,operator); } {if (true) return expr;} throw new Error("Missing return statement in function"); } final public Expression MultiplicativeExpression() throws ParseException { Expression expr,expr2; int operator; try { expr = UnaryExpression(); } catch (ParseException e) { if (errorMessage != null) {if (true) throw e;} errorMessage = "unexpected token '"+e.currentToken.next.image+'\''; errorLevel = ERROR; errorStart = this.token.sourceStart; errorEnd = this.token.sourceEnd; {if (true) throw e;} } label_18: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case STAR: case SLASH: case REMAINDER: ; break; default: jj_la1[47] = jj_gen; break label_18; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case STAR: jj_consume_token(STAR); operator = OperatorIds.MULTIPLY; break; case SLASH: jj_consume_token(SLASH); operator = OperatorIds.DIVIDE; break; case REMAINDER: jj_consume_token(REMAINDER); operator = OperatorIds.REMAINDER; break; default: jj_la1[48] = jj_gen; jj_consume_token(-1); throw new ParseException(); } expr2 = UnaryExpression(); expr = new BinaryExpression(expr,expr2,operator); } {if (true) return expr;} throw new Error("Missing return statement in function"); } /** * An unary expression starting with @, & or nothing */ final public Expression UnaryExpression() throws ParseException { final Expression expr; /* expr = UnaryExpressionNoPrefix() //why did I had that ? {return new PrefixedUnaryExpression(expr,OperatorIds.AND,pos);} | */ expr = AtNotTildeUnaryExpression(); {if (true) return expr;} throw new Error("Missing return statement in function"); } final public Expression AtNotTildeUnaryExpression() throws ParseException { final Expression expr; final Token token; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case AT: token = jj_consume_token(AT); expr = AtNotTildeUnaryExpression(); {if (true) return new PrefixedUnaryExpression(expr,OperatorIds.AT,token.sourceStart);} break; case TILDE: token = jj_consume_token(TILDE); expr = AtNotTildeUnaryExpression(); {if (true) return new PrefixedUnaryExpression(expr,OperatorIds.TWIDDLE,token.sourceStart);} break; case BANG: token = jj_consume_token(BANG); expr = AtNotUnaryExpression(); {if (true) return new PrefixedUnaryExpression(expr,OperatorIds.NOT,token.sourceStart);} break; case ARRAY: case NEW: case NULL: case TRUE: case FALSE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: expr = UnaryExpressionNoPrefix(); {if (true) return expr;} break; default: jj_la1[49] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } /** * An expression prefixed (or not) by one or more @ and !. * @return the expression */ final public Expression AtNotUnaryExpression() throws ParseException { final Expression expr; final Token token; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case AT: token = jj_consume_token(AT); expr = AtNotUnaryExpression(); {if (true) return new PrefixedUnaryExpression(expr,OperatorIds.AT,token.sourceStart);} break; case BANG: token = jj_consume_token(BANG); expr = AtNotUnaryExpression(); {if (true) return new PrefixedUnaryExpression(expr,OperatorIds.NOT,token.sourceStart);} break; case ARRAY: case NEW: case NULL: case TRUE: case FALSE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: expr = UnaryExpressionNoPrefix(); {if (true) return expr;} break; default: jj_la1[50] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public Expression UnaryExpressionNoPrefix() throws ParseException { final Expression expr; final Token token; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PLUS: token = jj_consume_token(PLUS); expr = AtNotTildeUnaryExpression(); {if (true) return new PrefixedUnaryExpression(expr, OperatorIds.PLUS, token.sourceStart);} break; case MINUS: token = jj_consume_token(MINUS); expr = AtNotTildeUnaryExpression(); {if (true) return new PrefixedUnaryExpression(expr, OperatorIds.MINUS, token.sourceStart);} break; case PLUS_PLUS: case MINUS_MINUS: expr = PreIncDecExpression(); {if (true) return expr;} break; case ARRAY: case NEW: case NULL: case TRUE: case FALSE: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: expr = UnaryExpressionNotPlusMinus(); {if (true) return expr;} break; default: jj_la1[51] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public Expression PreIncDecExpression() throws ParseException { final Expression expr; final int operator; final Token token; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PLUS_PLUS: token = jj_consume_token(PLUS_PLUS); operator = OperatorIds.PLUS_PLUS; break; case MINUS_MINUS: token = jj_consume_token(MINUS_MINUS); operator = OperatorIds.MINUS_MINUS; break; default: jj_la1[52] = jj_gen; jj_consume_token(-1); throw new ParseException(); } expr = PrimaryExpression(); {if (true) return new PrefixedUnaryExpression(expr,operator,token.sourceStart);} throw new Error("Missing return statement in function"); } final public Expression UnaryExpressionNotPlusMinus() throws ParseException { final Expression expr; if (jj_2_3(2147483647)) { expr = CastExpression(); {if (true) return expr;} } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ARRAY: case NEW: case BIT_AND: case DOLLAR: case IDENTIFIER: expr = PostfixExpression(); {if (true) return expr;} break; case NULL: case TRUE: case FALSE: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: expr = Literal(); {if (true) return expr;} break; case LPAREN: jj_consume_token(LPAREN); expr = Expression(); try { jj_consume_token(RPAREN); } catch (ParseException e) { errorMessage = "')' expected"; errorLevel = ERROR; errorStart = expr.sourceEnd +1; errorEnd = expr.sourceEnd +1; processParseExceptionDebug(e); } {if (true) return expr;} break; default: jj_la1[53] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } throw new Error("Missing return statement in function"); } final public CastExpression CastExpression() throws ParseException { final ConstantIdentifier type; final Expression expr; final Token token,token1; token1 = jj_consume_token(LPAREN); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case STRING: case OBJECT: case BOOL: case BOOLEAN: case REAL: case DOUBLE: case FLOAT: case INT: case INTEGER: type = Type(); break; case ARRAY: token = jj_consume_token(ARRAY); type = new ConstantIdentifier(token); break; default: jj_la1[54] = jj_gen; jj_consume_token(-1); throw new ParseException(); } jj_consume_token(RPAREN); expr = UnaryExpression(); {if (true) return new CastExpression(type,expr,token1.sourceStart,expr.sourceEnd);} throw new Error("Missing return statement in function"); } final public Expression PostfixExpression() throws ParseException { final Expression expr; int operator = -1; Token token = null; expr = PrimaryExpression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PLUS_PLUS: case MINUS_MINUS: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PLUS_PLUS: token = jj_consume_token(PLUS_PLUS); operator = OperatorIds.PLUS_PLUS; break; case MINUS_MINUS: token = jj_consume_token(MINUS_MINUS); operator = OperatorIds.MINUS_MINUS; break; default: jj_la1[55] = jj_gen; jj_consume_token(-1); throw new ParseException(); } break; default: jj_la1[56] = jj_gen; ; } if (operator == -1) { {if (true) return expr;} } {if (true) return new PostfixedUnaryExpression(expr,operator,token.sourceEnd);} throw new Error("Missing return statement in function"); } final public Expression PrimaryExpression() throws ParseException { Expression expr; Token token = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case NEW: case BIT_AND: case DOLLAR: case IDENTIFIER: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case BIT_AND: token = jj_consume_token(BIT_AND); break; default: jj_la1[57] = jj_gen; ; } expr = refPrimaryExpression(token); {if (true) return expr;} break; case ARRAY: expr = ArrayDeclarator(); {if (true) return expr;} break; default: jj_la1[58] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public Expression refPrimaryExpression(final Token reference) throws ParseException { Expression expr; Expression expr2 = null; final Token identifier; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case IDENTIFIER: identifier = jj_consume_token(IDENTIFIER); expr = new ConstantIdentifier(identifier); label_19: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case STATICCLASSACCESS: ; break; default: jj_la1[59] = jj_gen; break label_19; } jj_consume_token(STATICCLASSACCESS); expr2 = ClassIdentifier(); expr = new ClassAccess(expr, expr2, ClassAccess.STATIC); } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LPAREN: expr2 = Arguments(expr); break; default: jj_la1[60] = jj_gen; ; } if (expr2 == null) { if (reference != null) { ParseException e = generateParseException(); errorMessage = "you cannot use a constant by reference"; errorLevel = ERROR; errorStart = reference.sourceStart; errorEnd = reference.sourceEnd; processParseExceptionDebug(e); } {if (true) return expr;} } {if (true) return expr2;} break; case DOLLAR: expr = VariableDeclaratorId(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LPAREN: expr = Arguments(expr); break; default: jj_la1[61] = jj_gen; ; } {if (true) return expr;} break; case NEW: token = jj_consume_token(NEW); expr = ClassIdentifier(); int start; if (reference == null) { start = token.sourceStart; } else { start = reference.sourceStart; } expr = new ClassInstantiation(expr, reference != null, start); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LPAREN: expr = Arguments(expr); break; default: jj_la1[62] = jj_gen; ; } {if (true) return expr;} break; default: jj_la1[63] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } /** * An array declarator. * array(vars) * @return an array */ final public ArrayInitializer ArrayDeclarator() throws ParseException { final ArrayVariableDeclaration[] vars; final Token token; token = jj_consume_token(ARRAY); vars = ArrayInitializer(); {if (true) return new ArrayInitializer(vars, token.sourceStart, this.token.sourceEnd);} throw new Error("Missing return statement in function"); } final public Expression ClassIdentifier() throws ParseException { final Expression expr; final Token token; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case IDENTIFIER: token = jj_consume_token(IDENTIFIER); {if (true) return new ConstantIdentifier(token);} break; case STRING: case OBJECT: case BOOL: case BOOLEAN: case REAL: case DOUBLE: case FLOAT: case INT: case INTEGER: expr = Type(); {if (true) return expr;} break; case DOLLAR: expr = VariableDeclaratorId(); {if (true) return expr;} break; default: jj_la1[64] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } /** * Used by Variabledeclaratorid and primarysuffix */ final public AbstractVariable VariableSuffix(final AbstractVariable prefix) throws ParseException { Expression expression = null; final Token classAccessToken,lbrace,rbrace; Token token; int pos; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case CLASSACCESS: classAccessToken = jj_consume_token(CLASSACCESS); try { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LBRACE: lbrace = jj_consume_token(LBRACE); expression = Expression(); rbrace = jj_consume_token(RBRACE); expression = new Variable(expression, lbrace.sourceStart, rbrace.sourceEnd); break; case IDENTIFIER: token = jj_consume_token(IDENTIFIER); expression = new ConstantIdentifier(token.image,token.sourceStart,token.sourceEnd); break; case DOLLAR: expression = Variable(); break; default: jj_la1[65] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function call or field access expected"; errorLevel = ERROR; errorStart = classAccessToken.sourceEnd +1; errorEnd = classAccessToken.sourceEnd +1; processParseExceptionDebug(e); } {if (true) return new ClassAccess(prefix, expression, ClassAccess.NORMAL);} break; case LBRACKET: token = jj_consume_token(LBRACKET); pos = token.sourceEnd+1; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ARRAY: case LIST: case PRINT: case NEW: case NULL: case TRUE: case FALSE: case STRING: case OBJECT: case BOOL: case BOOLEAN: case REAL: case DOUBLE: case FLOAT: case INT: case INTEGER: case AT: case BANG: case TILDE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ARRAY: case LIST: case PRINT: case NEW: case NULL: case TRUE: case FALSE: case AT: case BANG: case TILDE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: expression = Expression(); pos = expression.sourceEnd+1; break; case STRING: case OBJECT: case BOOL: case BOOLEAN: case REAL: case DOUBLE: case FLOAT: case INT: case INTEGER: expression = Type(); pos = expression.sourceEnd+1; break; default: jj_la1[66] = jj_gen; jj_consume_token(-1); throw new ParseException(); } break; default: jj_la1[67] = jj_gen; ; } try { token = jj_consume_token(RBRACKET); pos = token.sourceEnd; } catch (ParseException e) { errorMessage = "']' expected"; errorLevel = ERROR; errorStart = pos; errorEnd = pos; processParseExceptionDebug(e); } {if (true) return new ArrayDeclarator(prefix,expression,pos);} break; case LBRACE: token = jj_consume_token(LBRACE); pos = token.sourceEnd+1; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ARRAY: case LIST: case PRINT: case NEW: case NULL: case TRUE: case FALSE: case STRING: case OBJECT: case BOOL: case BOOLEAN: case REAL: case DOUBLE: case FLOAT: case INT: case INTEGER: case AT: case BANG: case TILDE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ARRAY: case LIST: case PRINT: case NEW: case NULL: case TRUE: case FALSE: case AT: case BANG: case TILDE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: expression = Expression(); pos = expression.sourceEnd+1; break; case STRING: case OBJECT: case BOOL: case BOOLEAN: case REAL: case DOUBLE: case FLOAT: case INT: case INTEGER: expression = Type(); pos = expression.sourceEnd+1; break; default: jj_la1[68] = jj_gen; jj_consume_token(-1); throw new ParseException(); } break; default: jj_la1[69] = jj_gen; ; } try { token = jj_consume_token(RBRACE); pos = token.sourceEnd; } catch (ParseException e) { errorMessage = "']' expected"; errorLevel = ERROR; errorStart = pos; errorEnd = pos; processParseExceptionDebug(e); } {if (true) return new ArrayDeclarator(prefix,expression,pos);} break; default: jj_la1[70] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public Literal Literal() throws ParseException { final Token token; StringLiteral literal; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case INTEGER_LITERAL: token = jj_consume_token(INTEGER_LITERAL); {if (true) return new NumberLiteral(token);} break; case FLOATING_POINT_LITERAL: token = jj_consume_token(FLOATING_POINT_LITERAL); {if (true) return new NumberLiteral(token);} break; case STRING_LITERAL: token = jj_consume_token(STRING_LITERAL); {if (true) return new StringLiteral(token);} break; case TRUE: token = jj_consume_token(TRUE); {if (true) return new TrueLiteral(token);} break; case FALSE: token = jj_consume_token(FALSE); {if (true) return new FalseLiteral(token);} break; case NULL: token = jj_consume_token(NULL); {if (true) return new NullLiteral(token);} break; case DOUBLEQUOTE: literal = evaluableString(); {if (true) return literal;} break; default: jj_la1[71] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public StringLiteral evaluableString() throws ParseException { ArrayList list = new ArrayList(); Token start,end; Token token,lbrace,rbrace; AbstractVariable var; Expression expr; start = jj_consume_token(DOUBLEQUOTE); label_20: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case DOLLARS: ; break; default: jj_la1[72] = jj_gen; break label_20; } jj_consume_token(DOLLARS); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case IDENTIFIER: token = jj_consume_token(IDENTIFIER); list.add(new Variable(token.image, token.sourceStart, token.sourceEnd)); break; case LBRACE1: lbrace = jj_consume_token(LBRACE1); token = jj_consume_token(ID); list.add(new Variable(token.image, token.sourceStart, token.sourceEnd)); rbrace = jj_consume_token(RBRACE1); break; default: jj_la1[73] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } end = jj_consume_token(DOUBLEQUOTE2); AbstractVariable[] vars = new AbstractVariable[list.size()]; list.toArray(vars); {if (true) return new StringLiteral(jj_input_stream.getCurrentBuffer().substring(start.sourceEnd,end.sourceStart), start.sourceStart, end.sourceEnd, vars);} throw new Error("Missing return statement in function"); } final public FunctionCall Arguments(final Expression func) throws ParseException { Expression[] args = null; final Token token,lparen; lparen = jj_consume_token(LPAREN); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ARRAY: case LIST: case PRINT: case NEW: case NULL: case TRUE: case FALSE: case AT: case BANG: case TILDE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: args = ArgumentList(); break; default: jj_la1[74] = jj_gen; ; } try { token = jj_consume_token(RPAREN); {if (true) return new FunctionCall(func,args,token.sourceEnd);} } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ')' expected to close the argument list"; errorLevel = ERROR; if (args == null) { errorStart = lparen.sourceEnd+1; errorEnd = lparen.sourceEnd+2; } else { errorStart = args[args.length-1].sourceEnd+1; errorEnd = args[args.length-1].sourceEnd+2; } processParseExceptionDebug(e); } int sourceEnd = (args == null && args.length != 0) ? lparen.sourceEnd+1 : args[args.length-1].sourceEnd; {if (true) return new FunctionCall(func,args,sourceEnd);} throw new Error("Missing return statement in function"); } /** * An argument list is a list of arguments separated by comma : * argumentDeclaration() (, argumentDeclaration)* * @return an array of arguments */ final public Expression[] ArgumentList() throws ParseException { Expression arg; final ArrayList list = new ArrayList(); int pos; Token token; arg = Expression(); list.add(arg);pos = arg.sourceEnd; label_21: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: ; break; default: jj_la1[75] = jj_gen; break label_21; } token = jj_consume_token(COMMA); pos = token.sourceEnd; try { arg = Expression(); list.add(arg); pos = arg.sourceEnd; } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. An expression expected after a comma in argument list"; errorLevel = ERROR; errorStart = pos+1; errorEnd = pos+1; processParseException(e); } } final Expression[] arguments = new Expression[list.size()]; list.toArray(arguments); {if (true) return arguments;} throw new Error("Missing return statement in function"); } /** * A Statement without break. * @return a statement */ final public Statement StatementNoBreak() throws ParseException { final Statement statement; Token token = null; if (jj_2_4(2)) { statement = expressionStatement(); {if (true) return statement;} } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case IDENTIFIER: statement = LabeledStatement(); {if (true) return statement;} break; case LBRACE: statement = Block(); {if (true) return statement;} break; case SEMICOLON: statement = EmptyStatement(); {if (true) return statement;} break; case SWITCH: statement = SwitchStatement(); {if (true) return statement;} break; case IF: statement = IfStatement(); {if (true) return statement;} break; case WHILE: statement = WhileStatement(); {if (true) return statement;} break; case DO: statement = DoStatement(); {if (true) return statement;} break; case FOR: statement = ForStatement(); {if (true) return statement;} break; case FOREACH: statement = ForeachStatement(); {if (true) return statement;} break; case CONTINUE: statement = ContinueStatement(); {if (true) return statement;} break; case RETURN: statement = ReturnStatement(); {if (true) return statement;} break; case ECHO: statement = EchoStatement(); {if (true) return statement;} break; case INCLUDE: case REQUIRE: case INCLUDE_ONCE: case REQUIRE_ONCE: case AT: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case AT: token = jj_consume_token(AT); break; default: jj_la1[76] = jj_gen; ; } statement = IncludeStatement(); if (token != null) { ((InclusionStatement)statement).silent = true; statement.sourceStart = token.sourceStart; } {if (true) return statement;} break; case STATIC: statement = StaticStatement(); {if (true) return statement;} break; case GLOBAL: statement = GlobalStatement(); {if (true) return statement;} break; case DEFINE: statement = defineStatement(); currentSegment.add((Outlineable)statement);{if (true) return statement;} break; default: jj_la1[77] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } throw new Error("Missing return statement in function"); } /** * A statement expression. * expression ; * @return an expression */ final public Statement expressionStatement() throws ParseException { final Statement statement; final Token token; statement = Expression(); try { token = jj_consume_token(SEMICOLON); statement.sourceEnd = token.sourceEnd; } catch (ParseException e) { if (e.currentToken.next.kind != PHPParserConstants.PHPEND) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected"; errorLevel = ERROR; errorStart = statement.sourceEnd+1; errorEnd = statement.sourceEnd+1; processParseExceptionDebug(e); } } {if (true) return statement;} throw new Error("Missing return statement in function"); } final public Define defineStatement() throws ParseException { Expression defineName,defineValue; final Token defineToken; Token token; int pos; defineToken = jj_consume_token(DEFINE); pos = defineToken.sourceEnd+1; try { token = jj_consume_token(LPAREN); pos = token.sourceEnd+1; } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', '(' expected"; errorLevel = ERROR; errorStart = pos; errorEnd = pos; processParseExceptionDebug(e); } try { defineName = Expression(); pos = defineName.sourceEnd+1; } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', expression expected"; errorLevel = ERROR; errorStart = pos; errorEnd = pos; processParseExceptionDebug(e); defineName = new StringLiteral(SYNTAX_ERROR_CHAR,pos,pos); } try { token = jj_consume_token(COMMA); pos = defineName.sourceEnd+1; } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ',' expected"; errorLevel = ERROR; errorStart = pos; errorEnd = pos; processParseExceptionDebug(e); } try { defineValue = Expression(); pos = defineValue.sourceEnd+1; } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', expression expected"; errorLevel = ERROR; errorStart = pos; errorEnd = pos; processParseExceptionDebug(e); defineValue = new StringLiteral(SYNTAX_ERROR_CHAR,pos,pos); } try { token = jj_consume_token(RPAREN); pos = token.sourceEnd+1; } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ')' expected"; errorLevel = ERROR; errorStart = pos; errorEnd = pos; processParseExceptionDebug(e); } {if (true) return new Define(currentSegment, defineName, defineValue, defineToken.sourceStart, pos);} throw new Error("Missing return statement in function"); } /** * A Normal statement. */ final public Statement Statement() throws ParseException { final Statement statement; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case IF: case ARRAY: case LIST: case PRINT: case ECHO: case INCLUDE: case REQUIRE: case INCLUDE_ONCE: case REQUIRE_ONCE: case GLOBAL: case DEFINE: case STATIC: case CONTINUE: case DO: case FOR: case NEW: case NULL: case RETURN: case SWITCH: case TRUE: case FALSE: case WHILE: case FOREACH: case AT: case BANG: case TILDE: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case BIT_AND: case INTEGER_LITERAL: case FLOATING_POINT_LITERAL: case STRING_LITERAL: case DOUBLEQUOTE: case DOLLAR: case IDENTIFIER: case LPAREN: case LBRACE: case SEMICOLON: statement = StatementNoBreak(); {if (true) return statement;} break; case BREAK: statement = BreakStatement(); {if (true) return statement;} break; default: jj_la1[78] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } /** * An html block inside a php syntax. */ final public HTMLBlock htmlBlock() throws ParseException { final int startIndex = nodePtr; final AstNode[] blockNodes; final int nbNodes; final Token phpEnd; phpEnd = jj_consume_token(PHPEND); htmlStart = phpEnd.sourceEnd; label_22: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PHPECHOSTART: ; break; default: jj_la1[79] = jj_gen; break label_22; } phpEchoBlock(); } try { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PHPSTARTLONG: jj_consume_token(PHPSTARTLONG); break; case PHPSTARTSHORT: jj_consume_token(PHPSTARTSHORT); break; default: jj_la1[80] = jj_gen; jj_consume_token(-1); throw new ParseException(); } createNewHTMLCode(); } catch (ParseException e) { errorMessage = "unexpected end of file , ' 100) { jj_gc = 0; for (int i = 0; i < jj_2_rtns.length; i++) { JJCalls c = jj_2_rtns[i]; while (c != null) { if (c.gen < jj_gen) c.first = null; c = c.next; } } } return token; } token = oldToken; jj_kind = kind; throw generateParseException(); } final private boolean jj_scan_token(int kind) { if (jj_scanpos == jj_lastpos) { jj_la--; if (jj_scanpos.next == null) { jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); } else { jj_lastpos = jj_scanpos = jj_scanpos.next; } } else { jj_scanpos = jj_scanpos.next; } if (jj_rescan) { int i = 0; Token tok = token; while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } if (tok != null) jj_add_error_token(kind, i); } return (jj_scanpos.kind != kind); } final public Token getNextToken() { if (token.next != null) token = token.next; else token = token.next = token_source.getNextToken(); jj_ntk = -1; jj_gen++; return token; } final public Token getToken(int index) { Token t = lookingAhead ? jj_scanpos : token; for (int i = 0; i < index; i++) { if (t.next != null) t = t.next; else t = t.next = token_source.getNextToken(); } return t; } final private int jj_ntk() { if ((jj_nt=token.next) == null) return (jj_ntk = (token.next=token_source.getNextToken()).kind); else return (jj_ntk = jj_nt.kind); } private java.util.Vector jj_expentries = new java.util.Vector(); private int[] jj_expentry; private int jj_kind = -1; private int[] jj_lasttokens = new int[100]; private int jj_endpos; private void jj_add_error_token(int kind, int pos) { if (pos >= 100) return; if (pos == jj_endpos + 1) { jj_lasttokens[jj_endpos++] = kind; } else if (jj_endpos != 0) { jj_expentry = new int[jj_endpos]; for (int i = 0; i < jj_endpos; i++) { jj_expentry[i] = jj_lasttokens[i]; } boolean exists = false; for (java.util.Enumeration enum = jj_expentries.elements(); enum.hasMoreElements();) { int[] oldentry = (int[])(enum.nextElement()); if (oldentry.length == jj_expentry.length) { exists = true; for (int i = 0; i < jj_expentry.length; i++) { if (oldentry[i] != jj_expentry[i]) { exists = false; break; } } if (exists) break; } } if (!exists) jj_expentries.addElement(jj_expentry); if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; } } public ParseException generateParseException() { jj_expentries.removeAllElements(); boolean[] la1tokens = new boolean[160]; for (int i = 0; i < 160; i++) { la1tokens[i] = false; } if (jj_kind >= 0) { la1tokens[jj_kind] = true; jj_kind = -1; } for (int i = 0; i < 128; i++) { if (jj_la1[i] == jj_gen) { for (int j = 0; j < 32; j++) { if ((jj_la1_0[i] & (1< jj_gen) { jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; switch (i) { case 0: jj_3_1(); break; case 1: jj_3_2(); break; case 2: jj_3_3(); break; case 3: jj_3_4(); break; case 4: jj_3_5(); break; } } p = p.next; } while (p != null); } jj_rescan = false; } final private void jj_save(int index, int xla) { JJCalls p = jj_2_rtns[index]; while (p.gen > jj_gen) { if (p.next == null) { p = p.next = new JJCalls(); break; } p = p.next; } p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; } static final class JJCalls { int gen; Token first; int arg; JJCalls next; } }