AS3 highlighter.

Refactoring of highligter.
This commit is contained in:
Jindra Petřík
2025-05-29 09:14:15 +02:00
parent bbeeef4fc5
commit 90d975d69c
23 changed files with 3780 additions and 568 deletions

View File

@@ -34,4 +34,15 @@ public class AVM2ParseException extends ParseException {
public AVM2ParseException(String text, long line) {
super(text, line);
}
/**
* Constructor.
*
* @param text Text
* @param line Line
* @param position Position
*/
public AVM2ParseException(String text, long line, long position) {
super(text, line, position);
}
}

View File

@@ -266,12 +266,12 @@ public class ActionScript3Parser {
s = lex();
} while (s.type == SymbolType.COMMA);
if (s.type == SymbolType.USHIFT_RIGHT) {
s = new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN);
s = new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.GREATER_THAN);
lexer.pushback(s);
lexer.pushback(s);
}
if (s.type == SymbolType.SHIFT_RIGHT) {
s = new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN);
s = new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.GREATER_THAN);
lexer.pushback(s);
}
expected(s, lexer.yyline(), SymbolType.GREATER_THAN);
@@ -442,8 +442,8 @@ public class ActionScript3Parser {
if (s.type == SymbolType.BRACKET_OPEN) {
lexer.pushback(s);
if (attrBracket) {
lexer.pushback(new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, "@"));
lexer.pushback(new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, "."));
lexer.pushback(new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, "@"));
lexer.pushback(new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.DOT, "."));
}
ret = member(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, ret, registerVars, inFunction, inMethod, variables, abc);
} else {
@@ -2609,7 +2609,7 @@ public class ActionScript3Parser {
if (!abc.hasFloat4Support()) {
//parse again as method call
lexer.yypushbackstr(lexer.yytext().substring("float4".length()));
lexer.pushback(new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, "float4"));
lexer.pushback(new ParsedSymbol(-1, SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, "float4"));
ret = name(allOpenedNamespaces, thisType, pkg, needsActivation, false, openedNamespaces, registerVars, inFunction, inMethod, variables, importedClasses, abc);
} else {
ret = new Float4ValueAVM2Item(null, null, (Float4) s.value);
@@ -2653,7 +2653,7 @@ public class ActionScript3Parser {
s = lex();
if (s.type == SymbolType.XML_STARTTAG_BEGIN) {
lexer.yypushbackstr(s.value.toString().substring(1), ActionScriptLexer.YYINITIAL);
s = new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN);
s = new ParsedSymbol(-1, SymbolGroup.OPERATOR, SymbolType.LOWER_THAN);
}
if (s.type == SymbolType.FUNCTION) {
s = lexer.lex();

View File

@@ -1,16 +1,18 @@
/* The following code was generated by JFlex 1.6.0 */
/*
* Copyright (C) 2010-2025 JPEXS, All rights reserved.
*
* Copyright (C) 2010-2016 JPEXS, All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
*
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
@@ -1099,6 +1101,8 @@ public final class ActionScriptLexer {
private static String xmlTagName = "";
private int startPos = -1;
public int yychar() {
return yychar;
}
@@ -1470,47 +1474,47 @@ public final class ActionScriptLexer {
case 186: break;
case 2:
{ yyline++;
if (enableWhiteSpace) { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); }
if (enableWhiteSpace) { return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); }
}
case 187: break;
case 3:
{ if (enableWhiteSpace) { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); }
{ if (enableWhiteSpace) { return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); }
}
case 188: break;
case 4:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext());
}
case 189: break;
case 5:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext());
}
case 190: break;
case 6:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext());
}
case 191: break;
case 7:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DOT, yytext());
}
case 192: break;
case 8:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext());
}
case 193: break;
case 9:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NOT, yytext());
}
case 194: break;
case 10:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.MINUS, yytext());
}
case 195: break;
case 11:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext());
}
case 196: break;
case 12:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.COLON, yytext());
}
case 197: break;
case 13:
@@ -1519,94 +1523,97 @@ public final class ActionScriptLexer {
ival = ival.substring(0, ival.length() - 1);
}
try{
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(ival));
return new ParsedSymbol(yychar(), SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(ival));
} catch(NumberFormatException nfe){
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(ival));
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(ival));
}
}
case 198: break;
case 14:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext());
}
case 199: break;
case 15:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext());
}
case 200: break;
case 16:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext());
}
case 201: break;
case 17:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext());
}
case 202: break;
case 18:
{ string.setLength(0);
{ startPos = yychar();
string.setLength(0);
yybegin(STRING);
}
case 203: break;
case 19:
{ string.setLength(0);
{ startPos = yychar();
string.setLength(0);
yybegin(CHARLITERAL);
}
case 204: break;
case 20:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext());
}
case 205: break;
case 21:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.COMMA, yytext());
}
case 206: break;
case 22:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext());
}
case 207: break;
case 23:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.PLUS, yytext());
}
case 208: break;
case 24:
{ string.setLength(0);
{ startPos = yychar();
string.setLength(0);
yybegin(OIDENTIFIER);
}
case 209: break;
case 25:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext());
}
case 210: break;
case 26:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext());
}
case 211: break;
case 27:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext());
}
case 212: break;
case 28:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext());
}
case 213: break;
case 29:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext());
}
case 214: break;
case 30:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BITAND, yytext());
}
case 215: break;
case 31:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.BITOR, yytext());
}
case 216: break;
case 32:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.XOR, yytext());
}
case 217: break;
case 33:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.MODULO, yytext());
}
case 218: break;
case 34:
@@ -1622,7 +1629,7 @@ public final class ActionScriptLexer {
// length also includes the trailing quote
String tos = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, tos);
return new ParsedSymbol(startPos, SymbolGroup.STRING, SymbolType.STRING, tos);
}
case 221: break;
case 37:
@@ -1632,7 +1639,7 @@ public final class ActionScriptLexer {
case 38:
{ yybegin(YYINITIAL);
// length also includes the trailing quote
return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString());
return new ParsedSymbol(startPos, SymbolGroup.STRING, SymbolType.STRING, string.toString());
}
case 223: break;
case 39:
@@ -1641,9 +1648,9 @@ public final class ActionScriptLexer {
case 224: break;
case 40:
{ yybegin(XML);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1651,9 +1658,9 @@ public final class ActionScriptLexer {
case 225: break;
case 41:
{ yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1661,9 +1668,9 @@ public final class ActionScriptLexer {
case 226: break;
case 42:
{ yybegin(XML);
pushback(new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1671,7 +1678,7 @@ public final class ActionScriptLexer {
case 227: break;
case 43:
{ yybegin(YYINITIAL);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext());
}
case 228: break;
case 44:
@@ -1680,9 +1687,9 @@ public final class ActionScriptLexer {
case 229: break;
case 45:
{ yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1696,7 +1703,7 @@ public final class ActionScriptLexer {
{ yybegin(YYINITIAL);
repeatNum = 1;
// length also includes the trailing quote
return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString());
return new ParsedSymbol(startPos, SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString());
}
case 232: break;
case 48:
@@ -1704,81 +1711,82 @@ public final class ActionScriptLexer {
}
case 233: break;
case 49:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext());
}
case 234: break;
case 50:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext());
}
case 235: break;
case 51:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext());
}
case 236: break;
case 52:
{ return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext());
}
case 237: break;
case 53:
{ String dval = yytext();
if (dval.endsWith("m")) {
dval = dval.substring(0, dval.length() - 1);
return new ParsedSymbol(SymbolGroup.DECIMAL, SymbolType.DECIMAL, new Decimal128(dval));
return new ParsedSymbol(yychar(), SymbolGroup.DECIMAL, SymbolType.DECIMAL, new Decimal128(dval));
}
if (dval.endsWith("f")) {
dval = dval.substring(0, dval.length() - 1);
return new ParsedSymbol(SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(dval));
return new ParsedSymbol(yychar(), SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(dval));
}
if (dval.endsWith("d")) {
dval = dval.substring(0, dval.length() - 1);
}
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(dval));
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(dval));
}
case 238: break;
case 54:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.FILTER, yytext());
}
case 239: break;
case 55:
{ yybegin(XMLOPENTAG);
{ startPos = yychar();
yybegin(XMLOPENTAG);
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext());
}
case 240: break;
case 56:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext());
}
case 241: break;
case 57:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext());
}
case 242: break;
case 58:
{ return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext());
}
case 243: break;
case 59:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext());
}
case 244: break;
case 60:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext());
}
case 245: break;
case 61:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext());
}
case 246: break;
case 62:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext());
}
case 247: break;
case 63:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext());
}
case 248: break;
case 64:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext());
}
case 249: break;
case 65:
@@ -1786,84 +1794,84 @@ public final class ActionScriptLexer {
if (fval.endsWith("f")) {
fval = fval.substring(0, fval.length() - 1);
}
return new ParsedSymbol(SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(fval));
return new ParsedSymbol(yychar(), SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(fval));
}
case 250: break;
case 66:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NULL_DOT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NULL_DOT, yytext());
}
case 251: break;
case 67:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NULL_COALESCE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NULL_COALESCE, yytext());
}
case 252: break;
case 68:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext());
}
case 253: break;
case 69:
{ try {
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext(), 8));
return new ParsedSymbol(yychar(), SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext(), 8));
} catch (NumberFormatException nfe) {
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext(), 8).doubleValue());
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext(), 8).doubleValue());
}
}
case 254: break;
case 70:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.DO, yytext());
}
case 255: break;
case 71:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.AS, yytext());
}
case 256: break;
case 72:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext());
}
case 257: break;
case 73:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext());
}
case 258: break;
case 74:
{ return new ParsedSymbol(SymbolGroup.NAMESPACESUFFIX, SymbolType.NAMESPACESUFFIX, Integer.parseInt(yytext().substring(1)));
{ return new ParsedSymbol(yychar(), SymbolGroup.NAMESPACESUFFIX, SymbolType.NAMESPACESUFFIX, Integer.parseInt(yytext().substring(1)));
}
case 259: break;
case 75:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IF, yytext());
}
case 260: break;
case 76:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.IS, yytext());
}
case 261: break;
case 77:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IN, yytext());
}
case 262: break;
case 78:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext());
}
case 263: break;
case 79:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.AND, yytext());
}
case 264: break;
case 80:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext());
}
case 265: break;
case 81:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.OR, yytext());
}
case 266: break;
case 82:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext());
}
case 267: break;
case 83:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext());
}
case 268: break;
case 84:
@@ -1904,9 +1912,9 @@ public final class ActionScriptLexer {
case 277: break;
case 93:
{ yybegin(XML);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1914,9 +1922,9 @@ public final class ActionScriptLexer {
case 278: break;
case 94:
{ yybegin(XMLOPENTAGATTRIB);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1924,12 +1932,12 @@ public final class ActionScriptLexer {
case 279: break;
case 95:
{ yybegin(XMLOPENTAG);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext());
}
case 280: break;
case 96:
{ yybegin(XMLOPENTAG);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE_SINGLEQUOTED, yytext());
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE_SINGLEQUOTED, yytext());
}
case 281: break;
case 97:
@@ -1937,14 +1945,14 @@ public final class ActionScriptLexer {
string.append(yytext());
String tos = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR, tos);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_INSTR, tos);
}
case 282: break;
case 98:
{ yybegin(XMLOPENTAG);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1952,9 +1960,9 @@ public final class ActionScriptLexer {
case 283: break;
case 99:
{ yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -1993,90 +2001,90 @@ public final class ActionScriptLexer {
}
case 292: break;
case 108:
{ return new ParsedSymbol(SymbolGroup.REGEXP, SymbolType.REGEXP, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.REGEXP, SymbolType.REGEXP, yytext());
}
case 293: break;
case 109:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.REST, yytext());
}
case 294: break;
case 110:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext());
}
case 295: break;
case 111:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext());
}
case 296: break;
case 112:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext());
}
case 297: break;
case 113:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext());
}
case 298: break;
case 114:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext());
}
case 299: break;
case 115:
{ try {
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext().substring(2), 16));
return new ParsedSymbol(yychar(), SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext().substring(2), 16));
} catch (NumberFormatException nfe) {
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext().substring(2), 16).doubleValue());
return new ParsedSymbol(yychar(), SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext().substring(2), 16).doubleValue());
}
}
case 300: break;
case 116:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.USE, yytext());
}
case 301: break;
case 117:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FOR, yytext());
}
case 302: break;
case 118:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.TRY, yytext());
}
case 303: break;
case 119:
{ return new ParsedSymbol(SymbolGroup.PREPROCESSOR, SymbolType.PREPROCESSOR, yytext().substring(2));
{ return new ParsedSymbol(yychar(), SymbolGroup.PREPROCESSOR, SymbolType.PREPROCESSOR, yytext().substring(2));
}
case 304: break;
case 120:
{ String verbatimString = yytext();
verbatimString = verbatimString.substring(2, verbatimString.length() - 1);
return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, verbatimString);
return new ParsedSymbol(yychar(), SymbolGroup.STRING, SymbolType.STRING, verbatimString);
}
case 305: break;
case 121:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.SET, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.SET, yytext());
}
case 306: break;
case 122:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.NEW, yytext());
}
case 307: break;
case 123:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.VAR, yytext());
}
case 308: break;
case 124:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.GET, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.GET, yytext());
}
case 309: break;
case 125:
{ return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext());
}
case 310: break;
case 126:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_AND, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_AND, yytext());
}
case 311: break;
case 127:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_OR, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_OR, yytext());
}
case 312: break;
case 128:
@@ -2084,7 +2092,7 @@ public final class ActionScriptLexer {
yybegin(XML);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_CDATA, ret);
}
case 313: break;
case 129:
@@ -2092,14 +2100,14 @@ public final class ActionScriptLexer {
yybegin(XML);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
}
case 314: break;
case 130:
{ yybegin(YYINITIAL);
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext()));
pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -2111,7 +2119,7 @@ public final class ActionScriptLexer {
String tos = string.toString();
string.setLength(0);
string.append(yytext());
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, tos);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_TEXT, tos);
}
string.append(yytext());
}
@@ -2121,7 +2129,7 @@ public final class ActionScriptLexer {
yybegin(YYINITIAL);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret);
return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_CDATA, ret);
}
case 317: break;
case 133:
@@ -2129,7 +2137,7 @@ public final class ActionScriptLexer {
yybegin(YYINITIAL);
String ret = string.toString();
string.setLength(0);
return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
return new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_COMMENT, ret);
}
case 318: break;
case 134:
@@ -2137,39 +2145,39 @@ public final class ActionScriptLexer {
}
case 319: break;
case 135:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext());
}
case 320: break;
case 136:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CASE, yytext());
}
case 321: break;
case 137:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.TRUE, yytext());
}
case 322: break;
case 138:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.THIS, yytext());
}
case 323: break;
case 139:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.ELSE, yytext());
}
case 324: break;
case 140:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext());
}
case 325: break;
case 141:
{ return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext());
}
case 326: break;
case 142:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.WITH, yytext());
}
case 327: break;
case 143:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.VOID, yytext());
}
case 328: break;
case 144:
@@ -2178,9 +2186,9 @@ public final class ActionScriptLexer {
}
case 329: break;
case 145:
{ pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext()));
{ pushback(new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext()));
if (string.length() > 0){
pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
pushback(new ParsedSymbol(startPos, SymbolGroup.XML, SymbolType.XML_TEXT, string.toString()));
string.setLength(0);
}
return lex();
@@ -2188,7 +2196,7 @@ public final class ActionScriptLexer {
case 330: break;
case 146:
{ String ret = string.toString(); string.setLength(0); string.append(yytext()); yybegin(XMLCOMMENT);
if (!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret);
if (!ret.isEmpty()) return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_TEXT, ret);
}
case 331: break;
case 147:
@@ -2201,115 +2209,115 @@ public final class ActionScriptLexer {
}
case 333: break;
case 149:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CLASS, yytext());
}
case 334: break;
case 150:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CONST, yytext());
}
case 335: break;
case 151:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CATCH, yytext());
}
case 336: break;
case 152:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FALSE, yytext());
}
case 337: break;
case 153:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext());
}
case 338: break;
case 154:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.THROW, yytext());
}
case 339: break;
case 155:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.BREAK, yytext());
}
case 340: break;
case 156:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.SUPER, yytext());
}
case 341: break;
case 157:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.WHILE, yytext());
}
case 342: break;
case 158:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.DELETE, yytext());
}
case 343: break;
case 159:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext());
}
case 344: break;
case 160:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.RETURN, yytext());
}
case 345: break;
case 161:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext());
}
case 346: break;
case 162:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext());
}
case 347: break;
case 163:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext());
}
case 348: break;
case 164:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext());
}
case 349: break;
case 165:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext());
}
case 350: break;
case 166:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext());
}
case 351: break;
case 167:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext());
}
case 352: break;
case 168:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext());
}
case 353: break;
case 169:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext());
}
case 354: break;
case 170:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext());
}
case 355: break;
case 171:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext());
}
case 356: break;
case 172:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext());
}
case 357: break;
case 173:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext());
}
case 358: break;
case 174:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext());
}
case 359: break;
case 175:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext());
}
case 360: break;
case 176:
{ return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext());
}
case 361: break;
case 177:
@@ -2317,32 +2325,32 @@ public final class ActionScriptLexer {
}
case 362: break;
case 178:
{ return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext());
}
case 363: break;
case 179:
{ return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext());
}
case 364: break;
case 180:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext());
}
case 365: break;
case 181:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext());
}
case 366: break;
case 182:
{ String ret = string.toString(); string.setLength(0); string.append(yytext() ); yybegin(XMLCDATA);
if (!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret);
if (!ret.isEmpty()) return new ParsedSymbol(yychar(), SymbolGroup.XML, SymbolType.XML_TEXT, ret);
}
case 367: break;
case 183:
{ return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext());
}
case 368: break;
case 184:
{ return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext());
{ return new ParsedSymbol(yychar(), SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext());
}
case 369: break;
case 185:
@@ -2356,14 +2364,14 @@ public final class ActionScriptLexer {
}
fvalues[i] = Float.parseFloat(fval);
}
return new ParsedSymbol(SymbolGroup.FLOAT4, SymbolType.FLOAT4, new Float4(fvalues));
return new ParsedSymbol(yychar(), SymbolGroup.FLOAT4, SymbolType.FLOAT4, new Float4(fvalues));
}
case 370: break;
default:
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true;
{
return new ParsedSymbol(SymbolGroup.EOF, SymbolType.EOF, null);
return new ParsedSymbol(yychar(), SymbolGroup.EOF, SymbolType.EOF, null);
}
}
else {

View File

@@ -37,13 +37,20 @@ public class ParsedSymbol {
* Type
*/
public SymbolType type;
/**
* Position in source text
*/
public int position;
/**
* Constructor.
* @param position Position
* @param group Group
* @param type Type
*/
public ParsedSymbol(SymbolGroup group, SymbolType type) {
public ParsedSymbol(int position, SymbolGroup group, SymbolType type) {
this.position = position;
this.group = group;
this.type = type;
this.value = null;
@@ -51,11 +58,13 @@ public class ParsedSymbol {
/**
* Constructor.
* @param position Position
* @param group Group
* @param type Type
* @param value Value
*/
public ParsedSymbol(SymbolGroup group, SymbolType type, Object value) {
public ParsedSymbol(int position, SymbolGroup group, SymbolType type, Object value) {
this.position = position;
this.group = group;
this.type = type;
this.value = value;

View File

@@ -14,21 +14,26 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.action.parser.script;
import com.jpexs.decompiler.flash.simpleparser.Variable;
import com.jpexs.decompiler.flash.simpleparser.SimpleParseException;
import com.jpexs.decompiler.flash.simpleparser.Type;
import com.jpexs.decompiler.flash.simpleparser.Scope;
import com.jpexs.decompiler.flash.simpleparser.CatchScope;
import com.jpexs.decompiler.flash.simpleparser.ClassScope;
import com.jpexs.decompiler.flash.simpleparser.VariableOrScope;
import com.jpexs.decompiler.flash.simpleparser.FunctionScope;
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.action.parser.ActionParseException;
import com.jpexs.decompiler.flash.action.parser.script.ActionScriptLexer;
import com.jpexs.decompiler.flash.action.parser.script.LexBufferer;
import com.jpexs.decompiler.flash.action.parser.script.ParsedSymbol;
import com.jpexs.decompiler.flash.action.parser.script.SymbolGroup;
import com.jpexs.decompiler.flash.action.parser.script.SymbolType;
import com.jpexs.decompiler.flash.simpleparser.SimpleParser;
import com.jpexs.decompiler.flash.types.CLIPACTIONRECORD;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.helpers.CancellableWorker;
import com.jpexs.helpers.Reference;
import java.io.IOException;
import java.io.StringReader;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
@@ -40,25 +45,25 @@ import java.util.Map;
*
* @author JPEXS
*/
public class ActionScript2VariableParser {
public class ActionScript2SimpleParser implements SimpleParser {
/**
* Swf version
*/
private final int swfVersion;
/**
* Constructor
*
* @param swf Swf
*/
public ActionScript2VariableParser(SWF swf) {
public ActionScript2SimpleParser(SWF swf) {
this.swfVersion = swf.version;
}
private final boolean debugMode = false;
private void commands(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, int forinlevel, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private void commands(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, int forinlevel, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
if (debugMode) {
System.out.println("commands:");
}
@@ -70,7 +75,7 @@ public class ActionScript2VariableParser {
}
}
private String type(List<ActionVariableParseException> errors, boolean definition, List<VariableOrScope> variables) throws IOException, InterruptedException, ActionParseException {
private String type(List<SimpleParseException> errors, boolean definition, List<VariableOrScope> variables) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol s = lex();
if (!expectedIdentifier(errors, s, lexer.yyline())) {
return null;
@@ -96,7 +101,7 @@ public class ActionScript2VariableParser {
return ret;
}
private boolean expected(List<ActionVariableParseException> errors, ParsedSymbol symb, int line, Object... expected) throws IOException {
private boolean expected(List<SimpleParseException> errors, ParsedSymbol symb, int line, Object... expected) throws IOException {
boolean found = false;
for (Object t : expected) {
if (symb.type == t) {
@@ -116,13 +121,13 @@ public class ActionScript2VariableParser {
expStr += e;
first = false;
}
errors.add(new ActionVariableParseException("" + expStr + " expected but " + symb.type + " found", line, symb.position));
errors.add(new SimpleParseException("" + expStr + " expected but " + symb.type + " found", line, symb.position));
return false;
}
return true;
}
private ParsedSymbol expectedType(List<ActionVariableParseException> errors, Object... type) throws IOException, InterruptedException, ActionParseException {
private ParsedSymbol expectedType(List<SimpleParseException> errors, Object... type) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol symb = lex();
if (!expected(errors, symb, lexer.yyline(), type)) {
return null;
@@ -130,7 +135,7 @@ public class ActionScript2VariableParser {
return symb;
}
private ParsedSymbol lex() throws IOException, InterruptedException, ActionParseException {
private ParsedSymbol lex() throws IOException, InterruptedException, SimpleParseException, ActionParseException, ActionParseException {
if (CancellableWorker.isInterrupted()) {
throw new InterruptedException();
}
@@ -141,7 +146,7 @@ public class ActionScript2VariableParser {
return ret;
}
private List<GraphTargetItem> call(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private List<GraphTargetItem> call(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
List<GraphTargetItem> ret = new ArrayList<>();
ParsedSymbol s = lex();
while (s.type != SymbolType.PARENT_CLOSE) {
@@ -155,7 +160,7 @@ public class ActionScript2VariableParser {
return ret;
}
private void function(List<ActionVariableParseException> errors, boolean withBody, String functionName, int functionNamePosition, boolean isMethod, List<VariableOrScope> variables, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private void function(List<SimpleParseException> errors, boolean withBody, String functionName, int functionNamePosition, boolean isMethod, List<VariableOrScope> variables, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol s;
expectedType(errors, SymbolType.PARENT_OPEN);
s = lex();
@@ -205,7 +210,7 @@ public class ActionScript2VariableParser {
variables.add(new FunctionScope(subvariables));
}
private boolean traits(List<ActionVariableParseException> errors, boolean isInterface, String className, List<VariableOrScope> variables, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean traits(List<SimpleParseException> errors, boolean isInterface, String className, List<VariableOrScope> variables, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol s;
@@ -263,7 +268,7 @@ public class ActionScript2VariableParser {
return true;
}
private boolean expressionCommands(List<ActionVariableParseException> errors, ParsedSymbol s, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean expressionCommands(List<SimpleParseException> errors, ParsedSymbol s, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
if (debugMode) {
System.out.println("expressionCommands:");
}
@@ -383,7 +388,7 @@ public class ActionScript2VariableParser {
} else if (s.value.equals("POST")) {
//empty
} else {
errors.add(new ActionVariableParseException("Invalid method, \"GET\" or \"POST\" expected.", lexer.yyline(), s.position));
errors.add(new SimpleParseException("Invalid method, \"GET\" or \"POST\" expected.", lexer.yyline(), s.position));
}
} else {
lexer.pushback(s);
@@ -481,7 +486,7 @@ public class ActionScript2VariableParser {
} else if (s.value.equals("GET")) {
//empty
} else {
errors.add(new ActionVariableParseException("Invalid method, \"GET\" or \"POST\" expected.", lexer.yyline(), s.position));
errors.add(new SimpleParseException("Invalid method, \"GET\" or \"POST\" expected.", lexer.yyline(), s.position));
}
} else {
lexer.pushback(s);
@@ -674,20 +679,20 @@ public class ActionScript2VariableParser {
SymbolType.NUMBER_OP, SymbolType.STRING_OP);
}
private boolean expectedIdentifier(List<ActionVariableParseException> errors, ParsedSymbol s, int line, Object... exceptions) throws IOException {
private boolean expectedIdentifier(List<SimpleParseException> errors, ParsedSymbol s, int line, Object... exceptions) throws IOException {
for (Object ex : exceptions) {
if (s.isType(ex)) {
return true;
}
}
if (!isIdentifier(s)) {
errors.add(new ActionVariableParseException(SymbolType.IDENTIFIER + " expected but " + s.type + " found", line, s.position));
errors.add(new SimpleParseException(SymbolType.IDENTIFIER + " expected but " + s.type + " found", line, s.position));
return false;
}
return true;
}
private boolean command(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, int forinlevel, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean command(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, int forinlevel, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
LexBufferer buf = new LexBufferer();
lexer.addListener(buf);
if (debugMode) {
@@ -791,7 +796,7 @@ public class ActionScript2VariableParser {
break;
case FUNCTION:
s = lexer.lex();
if (expectedIdentifier(errors, s, lexer.yyline())) {
if (expectedIdentifier(errors, s, lexer.yyline())) {
function(errors, true, s.value.toString(), s.position, false, variables, inTellTarget, hasEval);
}
break;
@@ -1004,7 +1009,7 @@ public class ActionScript2VariableParser {
ret = true;
break;
default:
errors.add(new ActionVariableParseException("Unknown directive: #" + s.value, lexer.yyline(), s.position));
errors.add(new SimpleParseException("Unknown directive: #" + s.value, lexer.yyline(), s.position));
}
break;
default:
@@ -1023,11 +1028,11 @@ public class ActionScript2VariableParser {
if ((s != null) && (s.type != SymbolType.SEMICOLON)) {
lexer.pushback(s);
}
return ret;
}
private boolean expression(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, boolean allowComma, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean expression(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, boolean allowComma, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
if (debugMode) {
System.out.println("expression:");
}
@@ -1049,7 +1054,7 @@ public class ActionScript2VariableParser {
return true;
}
private ParsedSymbol peekLex() throws IOException, InterruptedException, ActionParseException {
private ParsedSymbol peekLex() throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol lookahead = lex();
lexer.pushback(lookahead);
return lookahead;
@@ -1082,7 +1087,7 @@ public class ActionScript2VariableParser {
return s.type.getPrecedence();
}
private boolean expression1(List<ActionVariableParseException> errors, boolean lhs, int min_precedence, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean expression1(List<SimpleParseException> errors, boolean lhs, int min_precedence, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol op;
boolean rhs;
ParsedSymbol lookahead = peekLex();
@@ -1185,7 +1190,7 @@ public class ActionScript2VariableParser {
return lhs;
}
private int brackets(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private int brackets(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol s = lex();
int arrCnt = 0;
if (s.type == SymbolType.BRACKET_OPEN) {
@@ -1209,7 +1214,7 @@ public class ActionScript2VariableParser {
return arrCnt;
}
private boolean handleVariable(List<ActionVariableParseException> errors, ParsedSymbol s, boolean ret, List<VariableOrScope> variables, Reference<Boolean> allowMemberOrCall, boolean inFunction, boolean inMethod, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean handleVariable(List<SimpleParseException> errors, ParsedSymbol s, boolean ret, List<VariableOrScope> variables, Reference<Boolean> allowMemberOrCall, boolean inFunction, boolean inMethod, boolean inTellTarget, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
if (s.value.equals("not")) {
expressionPrimary(errors, inFunction, inMethod, inTellTarget, false, variables, true, hasEval);
ret = true;
@@ -1256,7 +1261,7 @@ public class ActionScript2VariableParser {
return ret;
}
private boolean expressionPrimary(List<ActionVariableParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, boolean allowCall, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean expressionPrimary(List<SimpleParseException> errors, boolean inFunction, boolean inMethod, boolean inTellTarget, boolean allowRemainder, List<VariableOrScope> variables, boolean allowCall, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
if (debugMode) {
System.out.println("primary:");
}
@@ -1303,7 +1308,7 @@ public class ActionScript2VariableParser {
//errors.add(new ActionVariableParseException("Compiling §§" + s.value + " is not available, sorry", lexer.yyline()));
break;
default:
errors.add(new ActionVariableParseException("Unknown preprocessor instruction: §§" + s.value, lexer.yyline(), s.position));
errors.add(new SimpleParseException("Unknown preprocessor instruction: §§" + s.value, lexer.yyline(), s.position));
}
expectedType(errors, SymbolType.PARENT_CLOSE);
@@ -1415,7 +1420,7 @@ public class ActionScript2VariableParser {
case PARENT_OPEN:
boolean pexpr = expression(errors, inFunction, inMethod, inTellTarget, true, variables, true, hasEval);
if (!pexpr) {
errors.add(new ActionVariableParseException("Expression expected", lexer.yyline(), s.position));
errors.add(new SimpleParseException("Expression expected", lexer.yyline(), s.position));
}
expectedType(errors, SymbolType.PARENT_CLOSE);
allowMemberOrCall = true;
@@ -1490,7 +1495,7 @@ public class ActionScript2VariableParser {
return ret;
}
private boolean memberOrCall(List<ActionVariableParseException> errors, boolean ret, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, boolean allowCall, Reference<Boolean> hasEval) throws IOException, InterruptedException, ActionParseException {
private boolean memberOrCall(List<SimpleParseException> errors, boolean ret, boolean inFunction, boolean inMethod, boolean inTellTarget, List<VariableOrScope> variables, boolean allowCall, Reference<Boolean> hasEval) throws IOException, InterruptedException, SimpleParseException, ActionParseException {
ParsedSymbol op = lex();
while (op.isType(SymbolType.PARENT_OPEN, SymbolType.BRACKET_OPEN, SymbolType.DOT)) {
if (op.type == SymbolType.PARENT_OPEN) {
@@ -1531,108 +1536,106 @@ public class ActionScript2VariableParser {
private ActionScriptLexer lexer = null;
/**
* Convert a string to a high-level model.
*
* @param str The string to convert
* @throws ActionParseException On parse error
* @throws IOException On I/O error
* @throws InterruptedException On interrupt
*/
@Override
public void parse(
String str,
String str,
Map<Integer, List<Integer>> definitionPosToReferences,
Map<Integer, Integer> referenceToDefinition,
List<ActionVariableParseException> errors
) throws ActionParseException, IOException, InterruptedException {
lexer = new ActionScriptLexer(new StringReader(str));
if (swfVersion >= ActionScriptLexer.SWF_VERSION_CASE_SENSITIVE) {
lexer.setCaseSensitiveIdentifiers(true);
}
ParsedSymbol symb = lexer.lex();
boolean inOnHandler = false;
if (symb.type == SymbolType.IDENTIFIER && ("on".equals(symb.value) || "onClipEvent".equals(symb.value))) {
expectedType(errors, SymbolType.PARENT_OPEN);
symb = lexer.lex();
boolean condEmpty = true;
while (symb.type == SymbolType.IDENTIFIER) {
condEmpty = false;
switch ((String) symb.value) {
case "press":
break;
case "release":
break;
case "releaseOutside":
break;
case "rollOver":
break;
case "rollOut":
break;
case "dragOut":
break;
case "dragOver":
break;
case "keyPress":
symb = lexer.lex();
expected(errors, symb, lexer.yyline(), SymbolType.STRING);
Integer key = CLIPACTIONRECORD.stringToKey((String) symb.value);
if (key == null) {
errors.add(new ActionVariableParseException("Invalid key", lexer.yyline(), symb.position));
}
break;
case "keyUp":
break;
case "keyDown":
break;
case "mouseUp":
break;
case "mouseDown":
break;
case "mouseMove":
break;
case "unload":
break;
case "enterFrame":
break;
case "load":
break;
case "data":
break;
default:
errors.add(new ActionVariableParseException("Unrecognized event type", lexer.yyline(), symb.position));
}
symb = lexer.lex();
if (symb.type == SymbolType.PARENT_CLOSE) {
break;
}
expected(errors, symb, lexer.yyline(), SymbolType.COMMA);
symb = lexer.lex();
List<SimpleParseException> errors
) throws SimpleParseException, IOException, InterruptedException {
try {
lexer = new ActionScriptLexer(new StringReader(str));
if (swfVersion >= ActionScriptLexer.SWF_VERSION_CASE_SENSITIVE) {
lexer.setCaseSensitiveIdentifiers(true);
}
expected(errors, symb, lexer.yyline(), SymbolType.PARENT_CLOSE);
if (condEmpty) {
errors.add(new ActionVariableParseException("condition must be non empty", lexer.yyline(), symb.position));
ParsedSymbol symb = lexer.lex();
boolean inOnHandler = false;
if (symb.type == SymbolType.IDENTIFIER && ("on".equals(symb.value) || "onClipEvent".equals(symb.value))) {
expectedType(errors, SymbolType.PARENT_OPEN);
symb = lexer.lex();
boolean condEmpty = true;
while (symb.type == SymbolType.IDENTIFIER) {
condEmpty = false;
switch ((String) symb.value) {
case "press":
break;
case "release":
break;
case "releaseOutside":
break;
case "rollOver":
break;
case "rollOut":
break;
case "dragOut":
break;
case "dragOver":
break;
case "keyPress":
symb = lexer.lex();
expected(errors, symb, lexer.yyline(), SymbolType.STRING);
Integer key = CLIPACTIONRECORD.stringToKey((String) symb.value);
if (key == null) {
errors.add(new SimpleParseException("Invalid key", lexer.yyline(), symb.position));
}
break;
case "keyUp":
break;
case "keyDown":
break;
case "mouseUp":
break;
case "mouseDown":
break;
case "mouseMove":
break;
case "unload":
break;
case "enterFrame":
break;
case "load":
break;
case "data":
break;
default:
errors.add(new SimpleParseException("Unrecognized event type", lexer.yyline(), symb.position));
}
symb = lexer.lex();
if (symb.type == SymbolType.PARENT_CLOSE) {
break;
}
expected(errors, symb, lexer.yyline(), SymbolType.COMMA);
symb = lexer.lex();
}
expected(errors, symb, lexer.yyline(), SymbolType.PARENT_CLOSE);
if (condEmpty) {
errors.add(new SimpleParseException("condition must be non empty", lexer.yyline(), symb.position));
}
expectedType(errors, SymbolType.CURLY_OPEN);
inOnHandler = true;
} else {
lexer.pushback(symb);
}
expectedType(errors, SymbolType.CURLY_OPEN);
inOnHandler = true;
} else {
lexer.pushback(symb);
}
List<VariableOrScope> vars = new ArrayList<>();
Reference<Boolean> hasEval = new Reference<>(false);
commands(errors, false, false, 0, false, vars, hasEval);
Map<String, Integer> varNameToDefinitionPosition = new LinkedHashMap<>();
List<VariableOrScope> vars = new ArrayList<>();
Reference<Boolean> hasEval = new Reference<>(false);
commands(errors, false, false, 0, false, vars, hasEval);
Map<String, Integer> varNameToDefinitionPosition = new LinkedHashMap<>();
parseVariablesList(new ArrayList<>(), vars, definitionPosToReferences, referenceToDefinition, varNameToDefinitionPosition);
parseVariablesList(new ArrayList<>(), vars, definitionPosToReferences, referenceToDefinition, varNameToDefinitionPosition);
if (inOnHandler) {
expectedType(errors, SymbolType.CURLY_CLOSE);
}
if (inOnHandler) {
expectedType(errors, SymbolType.CURLY_CLOSE);
}
if (lexer.lex().type != SymbolType.EOF) {
errors.add(new ActionVariableParseException("Parsing finished before end of the file", lexer.yyline(), lexer.yychar()));
if (lexer.lex().type != SymbolType.EOF) {
errors.add(new SimpleParseException("Parsing finished before end of the file", lexer.yyline(), lexer.yychar()));
}
} catch (ActionParseException ex) {
errors.add(new SimpleParseException(ex.getMessage(), ex.line, ex.position));
}
}
@@ -1699,19 +1702,19 @@ public class ActionScript2VariableParser {
}
}
private void versionRequired(List<ActionVariableParseException> errors, ParsedSymbol s, int min) throws ActionParseException {
private void versionRequired(List<SimpleParseException> errors, ParsedSymbol s, int min) throws SimpleParseException {
versionRequired(errors, s.value.toString(), min, Integer.MAX_VALUE, s.position);
}
private void versionRequired(List<ActionVariableParseException> errors, String type, int min, int max, long position) throws ActionParseException {
private void versionRequired(List<SimpleParseException> errors, String type, int min, int max, long position) throws SimpleParseException {
if (min == max && swfVersion != min) {
errors.add(new ActionVariableParseException(type + " requires SWF version " + min, lexer.yyline(), position));
errors.add(new SimpleParseException(type + " requires SWF version " + min, lexer.yyline(), position));
}
if (swfVersion < min) {
errors.add(new ActionVariableParseException(type + " requires at least SWF version " + min, lexer.yyline(), position));
errors.add(new SimpleParseException(type + " requires at least SWF version " + min, lexer.yyline(), position));
}
if (swfVersion > max) {
errors.add(new ActionVariableParseException(type + " requires SWF version lower than " + max, lexer.yyline(), position));
errors.add(new SimpleParseException(type + " requires SWF version lower than " + max, lexer.yyline(), position));
}
}
}

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
import java.util.ArrayList;
import java.util.List;

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
import java.util.ArrayList;
import java.util.List;

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
import java.util.ArrayList;
import java.util.List;

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
import java.util.List;

View File

@@ -14,23 +14,23 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
import com.jpexs.decompiler.flash.ParseException;
/**
* Exception for action parsing errors
* Exception for Simple parsing errors
*
* @author JPEXS
*/
public class ActionVariableParseException extends ParseException {
public class SimpleParseException extends ParseException {
/**
* Constructs a new parse exception.
* @param text Text of the exception
* @param line Line number where the exception occurred
*/
public ActionVariableParseException(String text, long line) {
public SimpleParseException(String text, long line) {
super(text, line);
}
@@ -40,7 +40,7 @@ public class ActionVariableParseException extends ParseException {
* @param line Line number where the exception occurred
* @param position Position where the exception occured
*/
public ActionVariableParseException(String text, long line, long position) {
public SimpleParseException(String text, long line, long position) {
super(text, line, position);
}
}

View File

@@ -0,0 +1,46 @@
/*
* Copyright (C) 2010-2025 JPEXS, All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.simpleparser;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
*
* @author JPEXS
*/
public interface SimpleParser {
/**
* Parses document.
*
* @param str The string to convert
* @param definitionPosToReferences Definition position to references
* @param referenceToDefinition Reference to definition
* @param errors Errors
* @throws SimpleParseException On parse error
* @throws IOException On I/O error
* @throws InterruptedException On interrupt
*/
public void parse(
String str,
Map<Integer, List<Integer>> definitionPosToReferences,
Map<Integer, Integer> referenceToDefinition,
List<SimpleParseException> errors
) throws SimpleParseException, IOException, InterruptedException;
}

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
/**
*

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
/**
*

View File

@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.action.parser.script.variables;
package com.jpexs.decompiler.flash.simpleparser;
/**
*