[NOTHING CHANGED] Assorted fixes #48
@@ -14,47 +14,4 @@
|
|||||||
<name>luaj-core</name>
|
<name>luaj-core</name>
|
||||||
<description>Core code for LuaJ</description>
|
<description>Core code for LuaJ</description>
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>com.helger.maven</groupId>
|
|
||||||
<artifactId>ph-javacc-maven-plugin</artifactId>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>generate-grammar</id>
|
|
||||||
<phase>generate-sources</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>javacc</goal>
|
|
||||||
</goals>
|
|
||||||
<configuration>
|
|
||||||
<jdkVersion>1.8</jdkVersion>
|
|
||||||
<javadocFriendlyComments>true</javadocFriendlyComments>
|
|
||||||
<packageName>org.luaj.vm2.parser</packageName>
|
|
||||||
<sourceDirectory>src/main/javacc</sourceDirectory>
|
|
||||||
<outputDirectory>${project.build.directory}/generated-sources/javacc</outputDirectory>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
|
||||||
<artifactId>build-helper-maven-plugin</artifactId>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>add-source</id>
|
|
||||||
<phase>generate-sources</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>add-source</goal>
|
|
||||||
</goals>
|
|
||||||
<configuration>
|
|
||||||
<sources>
|
|
||||||
<source>${project.build.directory}/generated-sources/javacc</source>
|
|
||||||
</sources>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,240 +0,0 @@
|
|||||||
/* Generated By:JavaCC: Do not edit this line. LuaParserConstants.java */
|
|
||||||
package org.luaj.vm2.parser;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Token literal values and constants.
|
|
||||||
* Generated by org.javacc.parser.OtherFilesGen#start()
|
|
||||||
*/
|
|
||||||
public interface LuaParserConstants {
|
|
||||||
|
|
||||||
/** End of File. */
|
|
||||||
int EOF = 0;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int COMMENT = 17;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LONGCOMMENT0 = 18;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LONGCOMMENT1 = 19;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LONGCOMMENT2 = 20;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LONGCOMMENT3 = 21;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LONGCOMMENTN = 22;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LONGSTRING0 = 23;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LONGSTRING1 = 24;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LONGSTRING2 = 25;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LONGSTRING3 = 26;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LONGSTRINGN = 27;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int AND = 29;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int BREAK = 30;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int DO = 31;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int ELSE = 32;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int ELSEIF = 33;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int END = 34;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int FALSE = 35;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int FOR = 36;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int FUNCTION = 37;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int GOTO = 38;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int IF = 39;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int IN = 40;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LOCAL = 41;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int NIL = 42;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int NOT = 43;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int OR = 44;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int RETURN = 45;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int REPEAT = 46;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int THEN = 47;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int TRUE = 48;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int UNTIL = 49;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int WHILE = 50;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int NAME = 51;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int NUMBER = 52;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int FLOAT = 53;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int FNUM = 54;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int DIGIT = 55;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int EXP = 56;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int HEX = 57;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int HEXNUM = 58;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int HEXDIGIT = 59;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int HEXEXP = 60;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int STRING = 61;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int CHARSTRING = 62;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int QUOTED = 63;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int DECIMAL = 64;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int DBCOLON = 65;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int UNICODE = 66;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int CHAR = 67;
|
|
||||||
/** RegularExpression Id. */
|
|
||||||
int LF = 68;
|
|
||||||
|
|
||||||
/** Lexical state. */
|
|
||||||
int DEFAULT = 0;
|
|
||||||
/** Lexical state. */
|
|
||||||
int IN_COMMENT = 1;
|
|
||||||
/** Lexical state. */
|
|
||||||
int IN_LC0 = 2;
|
|
||||||
/** Lexical state. */
|
|
||||||
int IN_LC1 = 3;
|
|
||||||
/** Lexical state. */
|
|
||||||
int IN_LC2 = 4;
|
|
||||||
/** Lexical state. */
|
|
||||||
int IN_LC3 = 5;
|
|
||||||
/** Lexical state. */
|
|
||||||
int IN_LCN = 6;
|
|
||||||
/** Lexical state. */
|
|
||||||
int IN_LS0 = 7;
|
|
||||||
/** Lexical state. */
|
|
||||||
int IN_LS1 = 8;
|
|
||||||
/** Lexical state. */
|
|
||||||
int IN_LS2 = 9;
|
|
||||||
/** Lexical state. */
|
|
||||||
int IN_LS3 = 10;
|
|
||||||
/** Lexical state. */
|
|
||||||
int IN_LSN = 11;
|
|
||||||
|
|
||||||
/** Literal token values. */
|
|
||||||
String[] tokenImage = {
|
|
||||||
"<EOF>",
|
|
||||||
"\" \"",
|
|
||||||
"\"\\t\"",
|
|
||||||
"\"\\n\"",
|
|
||||||
"\"\\r\"",
|
|
||||||
"\"\\f\"",
|
|
||||||
"\"--[[\"",
|
|
||||||
"\"--[=[\"",
|
|
||||||
"\"--[==[\"",
|
|
||||||
"\"--[===[\"",
|
|
||||||
"<token of kind 10>",
|
|
||||||
"\"[[\"",
|
|
||||||
"\"[=[\"",
|
|
||||||
"\"[==[\"",
|
|
||||||
"\"[===[\"",
|
|
||||||
"<token of kind 15>",
|
|
||||||
"\"--\"",
|
|
||||||
"<COMMENT>",
|
|
||||||
"\"]]\"",
|
|
||||||
"\"]=]\"",
|
|
||||||
"\"]==]\"",
|
|
||||||
"\"]===]\"",
|
|
||||||
"<LONGCOMMENTN>",
|
|
||||||
"\"]]\"",
|
|
||||||
"\"]=]\"",
|
|
||||||
"\"]==]\"",
|
|
||||||
"\"]===]\"",
|
|
||||||
"<LONGSTRINGN>",
|
|
||||||
"<token of kind 28>",
|
|
||||||
"\"and\"",
|
|
||||||
"\"break\"",
|
|
||||||
"\"do\"",
|
|
||||||
"\"else\"",
|
|
||||||
"\"elseif\"",
|
|
||||||
"\"end\"",
|
|
||||||
"\"false\"",
|
|
||||||
"\"for\"",
|
|
||||||
"\"function\"",
|
|
||||||
"\"goto\"",
|
|
||||||
"\"if\"",
|
|
||||||
"\"in\"",
|
|
||||||
"\"local\"",
|
|
||||||
"\"nil\"",
|
|
||||||
"\"not\"",
|
|
||||||
"\"or\"",
|
|
||||||
"\"return\"",
|
|
||||||
"\"repeat\"",
|
|
||||||
"\"then\"",
|
|
||||||
"\"true\"",
|
|
||||||
"\"until\"",
|
|
||||||
"\"while\"",
|
|
||||||
"<NAME>",
|
|
||||||
"<NUMBER>",
|
|
||||||
"<FLOAT>",
|
|
||||||
"<FNUM>",
|
|
||||||
"<DIGIT>",
|
|
||||||
"<EXP>",
|
|
||||||
"<HEX>",
|
|
||||||
"<HEXNUM>",
|
|
||||||
"<HEXDIGIT>",
|
|
||||||
"<HEXEXP>",
|
|
||||||
"<STRING>",
|
|
||||||
"<CHARSTRING>",
|
|
||||||
"<QUOTED>",
|
|
||||||
"<DECIMAL>",
|
|
||||||
"\"::\"",
|
|
||||||
"<UNICODE>",
|
|
||||||
"<CHAR>",
|
|
||||||
"<LF>",
|
|
||||||
"\"#\"",
|
|
||||||
"\";\"",
|
|
||||||
"\"=\"",
|
|
||||||
"\",\"",
|
|
||||||
"\".\"",
|
|
||||||
"\":\"",
|
|
||||||
"\"(\"",
|
|
||||||
"\")\"",
|
|
||||||
"\"[\"",
|
|
||||||
"\"]\"",
|
|
||||||
"\"...\"",
|
|
||||||
"\"{\"",
|
|
||||||
"\"}\"",
|
|
||||||
"\"+\"",
|
|
||||||
"\"-\"",
|
|
||||||
"\"*\"",
|
|
||||||
"\"/\"",
|
|
||||||
"\"^\"",
|
|
||||||
"\"%\"",
|
|
||||||
"\"..\"",
|
|
||||||
"\"<\"",
|
|
||||||
"\"<=\"",
|
|
||||||
"\">\"",
|
|
||||||
"\">=\"",
|
|
||||||
"\"==\"",
|
|
||||||
"\"~=\"",
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,187 +0,0 @@
|
|||||||
/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 5.0 */
|
|
||||||
/* JavaCCOptions:KEEP_LINE_COL=null */
|
|
||||||
package org.luaj.vm2.parser;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This exception is thrown when parse errors are encountered.
|
|
||||||
* You can explicitly create objects of this exception type by
|
|
||||||
* calling the method generateParseException in the generated
|
|
||||||
* parser.
|
|
||||||
*
|
|
||||||
* You can modify this class to customize your error reporting
|
|
||||||
* mechanisms so long as you retain the public fields.
|
|
||||||
*/
|
|
||||||
public class ParseException extends Exception {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The version identifier for this Serializable class.
|
|
||||||
* Increment only if the <i>serialized</i> form of the
|
|
||||||
* class changes.
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This constructor is used by the method "generateParseException"
|
|
||||||
* in the generated parser. Calling this constructor generates
|
|
||||||
* a new object of this type with the fields "currentToken",
|
|
||||||
* "expectedTokenSequences", and "tokenImage" set.
|
|
||||||
*/
|
|
||||||
public ParseException(Token currentTokenVal,
|
|
||||||
int[][] expectedTokenSequencesVal,
|
|
||||||
String[] tokenImageVal
|
|
||||||
)
|
|
||||||
{
|
|
||||||
super(initialise(currentTokenVal, expectedTokenSequencesVal, tokenImageVal));
|
|
||||||
currentToken = currentTokenVal;
|
|
||||||
expectedTokenSequences = expectedTokenSequencesVal;
|
|
||||||
tokenImage = tokenImageVal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The following constructors are for use by you for whatever
|
|
||||||
* purpose you can think of. Constructing the exception in this
|
|
||||||
* manner makes the exception behave in the normal way - i.e., as
|
|
||||||
* documented in the class "Throwable". The fields "errorToken",
|
|
||||||
* "expectedTokenSequences", and "tokenImage" do not contain
|
|
||||||
* relevant information. The JavaCC generated code does not use
|
|
||||||
* these constructors.
|
|
||||||
*/
|
|
||||||
|
|
||||||
public ParseException() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Constructor with message. */
|
|
||||||
public ParseException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the last token that has been consumed successfully. If
|
|
||||||
* this object has been created due to a parse error, the token
|
|
||||||
* followng this token will (therefore) be the first error token.
|
|
||||||
*/
|
|
||||||
public Token currentToken;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Each entry in this array is an array of integers. Each array
|
|
||||||
* of integers represents a sequence of tokens (by their ordinal
|
|
||||||
* values) that is expected at this point of the parse.
|
|
||||||
*/
|
|
||||||
public int[][] expectedTokenSequences;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a reference to the "tokenImage" array of the generated
|
|
||||||
* parser within which the parse error occurred. This array is
|
|
||||||
* defined in the generated ...Constants interface.
|
|
||||||
*/
|
|
||||||
public String[] tokenImage;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* It uses "currentToken" and "expectedTokenSequences" to generate a parse
|
|
||||||
* error message and returns it. If this object has been created
|
|
||||||
* due to a parse error, and you do not catch it (it gets thrown
|
|
||||||
* from the parser) the correct error message
|
|
||||||
* gets displayed.
|
|
||||||
*/
|
|
||||||
private static String initialise(Token currentToken,
|
|
||||||
int[][] expectedTokenSequences,
|
|
||||||
String[] tokenImage) {
|
|
||||||
String eol = System.getProperty("line.separator", "\n");
|
|
||||||
StringBuffer expected = new StringBuffer();
|
|
||||||
int maxSize = 0;
|
|
||||||
for (int i = 0; i < expectedTokenSequences.length; i++) {
|
|
||||||
if (maxSize < expectedTokenSequences[i].length) {
|
|
||||||
maxSize = expectedTokenSequences[i].length;
|
|
||||||
}
|
|
||||||
for (int j = 0; j < expectedTokenSequences[i].length; j++) {
|
|
||||||
expected.append(tokenImage[expectedTokenSequences[i][j]]).append(' ');
|
|
||||||
}
|
|
||||||
if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
|
|
||||||
expected.append("...");
|
|
||||||
}
|
|
||||||
expected.append(eol).append(" ");
|
|
||||||
}
|
|
||||||
String retval = "Encountered \"";
|
|
||||||
Token tok = currentToken.next;
|
|
||||||
for (int i = 0; i < maxSize; i++) {
|
|
||||||
if (i != 0) retval += " ";
|
|
||||||
if (tok.kind == 0) {
|
|
||||||
retval += tokenImage[0];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
retval += " " + tokenImage[tok.kind];
|
|
||||||
retval += " \"";
|
|
||||||
retval += add_escapes(tok.image);
|
|
||||||
retval += " \"";
|
|
||||||
tok = tok.next;
|
|
||||||
}
|
|
||||||
retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
|
|
||||||
retval += "." + eol;
|
|
||||||
if (expectedTokenSequences.length == 1) {
|
|
||||||
retval += "Was expecting:" + eol + " ";
|
|
||||||
} else {
|
|
||||||
retval += "Was expecting one of:" + eol + " ";
|
|
||||||
}
|
|
||||||
retval += expected.toString();
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The end of line string for this machine.
|
|
||||||
*/
|
|
||||||
protected String eol = System.getProperty("line.separator", "\n");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used to convert raw characters to their escaped version
|
|
||||||
* when these raw version cannot be used as part of an ASCII
|
|
||||||
* string literal.
|
|
||||||
*/
|
|
||||||
static String add_escapes(String str) {
|
|
||||||
StringBuffer retval = new StringBuffer();
|
|
||||||
char ch;
|
|
||||||
for (int i = 0; i < str.length(); i++) {
|
|
||||||
switch (str.charAt(i))
|
|
||||||
{
|
|
||||||
case 0 :
|
|
||||||
continue;
|
|
||||||
case '\b':
|
|
||||||
retval.append("\\b");
|
|
||||||
continue;
|
|
||||||
case '\t':
|
|
||||||
retval.append("\\t");
|
|
||||||
continue;
|
|
||||||
case '\n':
|
|
||||||
retval.append("\\n");
|
|
||||||
continue;
|
|
||||||
case '\f':
|
|
||||||
retval.append("\\f");
|
|
||||||
continue;
|
|
||||||
case '\r':
|
|
||||||
retval.append("\\r");
|
|
||||||
continue;
|
|
||||||
case '\"':
|
|
||||||
retval.append("\\\"");
|
|
||||||
continue;
|
|
||||||
case '\'':
|
|
||||||
retval.append("\\\'");
|
|
||||||
continue;
|
|
||||||
case '\\':
|
|
||||||
retval.append("\\\\");
|
|
||||||
continue;
|
|
||||||
default:
|
|
||||||
if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
|
|
||||||
String s = "0000" + Integer.toString(ch, 16);
|
|
||||||
retval.append("\\u" + s.substring(s.length() - 4, s.length()));
|
|
||||||
} else {
|
|
||||||
retval.append(ch);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return retval.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
/* JavaCC - OriginalChecksum=ef246095a930e4915c0d4bbf4c9880ad (do not edit this line) */
|
|
||||||
@@ -1,469 +0,0 @@
|
|||||||
/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 5.0 */
|
|
||||||
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
|
|
||||||
package org.luaj.vm2.parser;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An implementation of interface CharStream, where the stream is assumed to
|
|
||||||
* contain only ASCII characters (without unicode processing).
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class SimpleCharStream
|
|
||||||
{
|
|
||||||
/** Whether parser is static. */
|
|
||||||
public static final boolean staticFlag = false;
|
|
||||||
int bufsize;
|
|
||||||
int available;
|
|
||||||
int tokenBegin;
|
|
||||||
/** Position in buffer. */
|
|
||||||
public int bufpos = -1;
|
|
||||||
protected int bufline[];
|
|
||||||
protected int bufcolumn[];
|
|
||||||
|
|
||||||
protected int column = 0;
|
|
||||||
protected int line = 1;
|
|
||||||
|
|
||||||
protected boolean prevCharIsCR = false;
|
|
||||||
protected boolean prevCharIsLF = false;
|
|
||||||
|
|
||||||
protected java.io.Reader inputStream;
|
|
||||||
|
|
||||||
protected char[] buffer;
|
|
||||||
protected int maxNextCharInd = 0;
|
|
||||||
protected int inBuf = 0;
|
|
||||||
protected int tabSize = 1;
|
|
||||||
|
|
||||||
public void setTabSize(int i) { tabSize = i; }
|
|
||||||
public int getTabSize(int i) { return tabSize; }
|
|
||||||
|
|
||||||
|
|
||||||
protected void ExpandBuff(boolean wrapAround)
|
|
||||||
{
|
|
||||||
char[] newbuffer = new char[bufsize + 2048];
|
|
||||||
int newbufline[] = new int[bufsize + 2048];
|
|
||||||
int newbufcolumn[] = new int[bufsize + 2048];
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (wrapAround)
|
|
||||||
{
|
|
||||||
System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
|
|
||||||
System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);
|
|
||||||
buffer = newbuffer;
|
|
||||||
|
|
||||||
System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
|
|
||||||
System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
|
|
||||||
bufline = newbufline;
|
|
||||||
|
|
||||||
System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
|
|
||||||
System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
|
|
||||||
bufcolumn = newbufcolumn;
|
|
||||||
|
|
||||||
maxNextCharInd = (bufpos += (bufsize - tokenBegin));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
|
|
||||||
buffer = newbuffer;
|
|
||||||
|
|
||||||
System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
|
|
||||||
bufline = newbufline;
|
|
||||||
|
|
||||||
System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
|
|
||||||
bufcolumn = newbufcolumn;
|
|
||||||
|
|
||||||
maxNextCharInd = (bufpos -= tokenBegin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Throwable t)
|
|
||||||
{
|
|
||||||
throw new Error(t.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bufsize += 2048;
|
|
||||||
available = bufsize;
|
|
||||||
tokenBegin = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void FillBuff() throws java.io.IOException
|
|
||||||
{
|
|
||||||
if (maxNextCharInd == available)
|
|
||||||
{
|
|
||||||
if (available == bufsize)
|
|
||||||
{
|
|
||||||
if (tokenBegin > 2048)
|
|
||||||
{
|
|
||||||
bufpos = maxNextCharInd = 0;
|
|
||||||
available = tokenBegin;
|
|
||||||
}
|
|
||||||
else if (tokenBegin < 0)
|
|
||||||
bufpos = maxNextCharInd = 0;
|
|
||||||
else
|
|
||||||
ExpandBuff(false);
|
|
||||||
}
|
|
||||||
else if (available > tokenBegin)
|
|
||||||
available = bufsize;
|
|
||||||
else if ((tokenBegin - available) < 2048)
|
|
||||||
ExpandBuff(true);
|
|
||||||
else
|
|
||||||
available = tokenBegin;
|
|
||||||
}
|
|
||||||
|
|
||||||
int i;
|
|
||||||
try {
|
|
||||||
if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1)
|
|
||||||
{
|
|
||||||
inputStream.close();
|
|
||||||
throw new java.io.IOException();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
maxNextCharInd += i;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
catch(java.io.IOException e) {
|
|
||||||
--bufpos;
|
|
||||||
backup(0);
|
|
||||||
if (tokenBegin == -1)
|
|
||||||
tokenBegin = bufpos;
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Start. */
|
|
||||||
public char BeginToken() throws java.io.IOException
|
|
||||||
{
|
|
||||||
tokenBegin = -1;
|
|
||||||
char c = readChar();
|
|
||||||
tokenBegin = bufpos;
|
|
||||||
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void UpdateLineColumn(char c)
|
|
||||||
{
|
|
||||||
column++;
|
|
||||||
|
|
||||||
if (prevCharIsLF)
|
|
||||||
{
|
|
||||||
prevCharIsLF = false;
|
|
||||||
line += (column = 1);
|
|
||||||
}
|
|
||||||
else if (prevCharIsCR)
|
|
||||||
{
|
|
||||||
prevCharIsCR = false;
|
|
||||||
if (c == '\n')
|
|
||||||
{
|
|
||||||
prevCharIsLF = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
line += (column = 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case '\r' :
|
|
||||||
prevCharIsCR = true;
|
|
||||||
break;
|
|
||||||
case '\n' :
|
|
||||||
prevCharIsLF = true;
|
|
||||||
break;
|
|
||||||
case '\t' :
|
|
||||||
column--;
|
|
||||||
column += (tabSize - (column % tabSize));
|
|
||||||
break;
|
|
||||||
default :
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
bufline[bufpos] = line;
|
|
||||||
bufcolumn[bufpos] = column;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Read a character. */
|
|
||||||
public char readChar() throws java.io.IOException
|
|
||||||
{
|
|
||||||
if (inBuf > 0)
|
|
||||||
{
|
|
||||||
--inBuf;
|
|
||||||
|
|
||||||
if (++bufpos == bufsize)
|
|
||||||
bufpos = 0;
|
|
||||||
|
|
||||||
return buffer[bufpos];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (++bufpos >= maxNextCharInd)
|
|
||||||
FillBuff();
|
|
||||||
|
|
||||||
char c = buffer[bufpos];
|
|
||||||
|
|
||||||
UpdateLineColumn(c);
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
* @see #getEndColumn
|
|
||||||
*/
|
|
||||||
|
|
||||||
public int getColumn() {
|
|
||||||
return bufcolumn[bufpos];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
* @see #getEndLine
|
|
||||||
*/
|
|
||||||
|
|
||||||
public int getLine() {
|
|
||||||
return bufline[bufpos];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get token end column number. */
|
|
||||||
public int getEndColumn() {
|
|
||||||
return bufcolumn[bufpos];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get token end line number. */
|
|
||||||
public int getEndLine() {
|
|
||||||
return bufline[bufpos];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get token beginning column number. */
|
|
||||||
public int getBeginColumn() {
|
|
||||||
return bufcolumn[tokenBegin];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get token beginning line number. */
|
|
||||||
public int getBeginLine() {
|
|
||||||
return bufline[tokenBegin];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Backup a number of characters. */
|
|
||||||
public void backup(int amount) {
|
|
||||||
|
|
||||||
inBuf += amount;
|
|
||||||
if ((bufpos -= amount) < 0)
|
|
||||||
bufpos += bufsize;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Constructor. */
|
|
||||||
public SimpleCharStream(java.io.Reader dstream, int startline,
|
|
||||||
int startcolumn, int buffersize)
|
|
||||||
{
|
|
||||||
inputStream = dstream;
|
|
||||||
line = startline;
|
|
||||||
column = startcolumn - 1;
|
|
||||||
|
|
||||||
available = bufsize = buffersize;
|
|
||||||
buffer = new char[buffersize];
|
|
||||||
bufline = new int[buffersize];
|
|
||||||
bufcolumn = new int[buffersize];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Constructor. */
|
|
||||||
public SimpleCharStream(java.io.Reader dstream, int startline,
|
|
||||||
int startcolumn)
|
|
||||||
{
|
|
||||||
this(dstream, startline, startcolumn, 4096);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Constructor. */
|
|
||||||
public SimpleCharStream(java.io.Reader dstream)
|
|
||||||
{
|
|
||||||
this(dstream, 1, 1, 4096);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Reinitialise. */
|
|
||||||
public void ReInit(java.io.Reader dstream, int startline,
|
|
||||||
int startcolumn, int buffersize)
|
|
||||||
{
|
|
||||||
inputStream = dstream;
|
|
||||||
line = startline;
|
|
||||||
column = startcolumn - 1;
|
|
||||||
|
|
||||||
if (buffer == null || buffersize != buffer.length)
|
|
||||||
{
|
|
||||||
available = bufsize = buffersize;
|
|
||||||
buffer = new char[buffersize];
|
|
||||||
bufline = new int[buffersize];
|
|
||||||
bufcolumn = new int[buffersize];
|
|
||||||
}
|
|
||||||
prevCharIsLF = prevCharIsCR = false;
|
|
||||||
tokenBegin = inBuf = maxNextCharInd = 0;
|
|
||||||
bufpos = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Reinitialise. */
|
|
||||||
public void ReInit(java.io.Reader dstream, int startline,
|
|
||||||
int startcolumn)
|
|
||||||
{
|
|
||||||
ReInit(dstream, startline, startcolumn, 4096);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Reinitialise. */
|
|
||||||
public void ReInit(java.io.Reader dstream)
|
|
||||||
{
|
|
||||||
ReInit(dstream, 1, 1, 4096);
|
|
||||||
}
|
|
||||||
/** Constructor. */
|
|
||||||
public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
|
|
||||||
int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
|
|
||||||
{
|
|
||||||
this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Constructor. */
|
|
||||||
public SimpleCharStream(java.io.InputStream dstream, int startline,
|
|
||||||
int startcolumn, int buffersize)
|
|
||||||
{
|
|
||||||
this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Constructor. */
|
|
||||||
public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
|
|
||||||
int startcolumn) throws java.io.UnsupportedEncodingException
|
|
||||||
{
|
|
||||||
this(dstream, encoding, startline, startcolumn, 4096);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Constructor. */
|
|
||||||
public SimpleCharStream(java.io.InputStream dstream, int startline,
|
|
||||||
int startcolumn)
|
|
||||||
{
|
|
||||||
this(dstream, startline, startcolumn, 4096);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Constructor. */
|
|
||||||
public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
|
|
||||||
{
|
|
||||||
this(dstream, encoding, 1, 1, 4096);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Constructor. */
|
|
||||||
public SimpleCharStream(java.io.InputStream dstream)
|
|
||||||
{
|
|
||||||
this(dstream, 1, 1, 4096);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Reinitialise. */
|
|
||||||
public void ReInit(java.io.InputStream dstream, String encoding, int startline,
|
|
||||||
int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
|
|
||||||
{
|
|
||||||
ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Reinitialise. */
|
|
||||||
public void ReInit(java.io.InputStream dstream, int startline,
|
|
||||||
int startcolumn, int buffersize)
|
|
||||||
{
|
|
||||||
ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Reinitialise. */
|
|
||||||
public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
|
|
||||||
{
|
|
||||||
ReInit(dstream, encoding, 1, 1, 4096);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Reinitialise. */
|
|
||||||
public void ReInit(java.io.InputStream dstream)
|
|
||||||
{
|
|
||||||
ReInit(dstream, 1, 1, 4096);
|
|
||||||
}
|
|
||||||
/** Reinitialise. */
|
|
||||||
public void ReInit(java.io.InputStream dstream, String encoding, int startline,
|
|
||||||
int startcolumn) throws java.io.UnsupportedEncodingException
|
|
||||||
{
|
|
||||||
ReInit(dstream, encoding, startline, startcolumn, 4096);
|
|
||||||
}
|
|
||||||
/** Reinitialise. */
|
|
||||||
public void ReInit(java.io.InputStream dstream, int startline,
|
|
||||||
int startcolumn)
|
|
||||||
{
|
|
||||||
ReInit(dstream, startline, startcolumn, 4096);
|
|
||||||
}
|
|
||||||
/** Get token literal value. */
|
|
||||||
public String GetImage()
|
|
||||||
{
|
|
||||||
if (bufpos >= tokenBegin)
|
|
||||||
return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
|
|
||||||
else
|
|
||||||
return new String(buffer, tokenBegin, bufsize - tokenBegin) +
|
|
||||||
new String(buffer, 0, bufpos + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get the suffix. */
|
|
||||||
public char[] GetSuffix(int len)
|
|
||||||
{
|
|
||||||
char[] ret = new char[len];
|
|
||||||
|
|
||||||
if ((bufpos + 1) >= len)
|
|
||||||
System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
|
|
||||||
len - bufpos - 1);
|
|
||||||
System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Reset buffer when finished. */
|
|
||||||
public void Done()
|
|
||||||
{
|
|
||||||
buffer = null;
|
|
||||||
bufline = null;
|
|
||||||
bufcolumn = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method to adjust line and column numbers for the start of a token.
|
|
||||||
*/
|
|
||||||
public void adjustBeginLineColumn(int newLine, int newCol)
|
|
||||||
{
|
|
||||||
int start = tokenBegin;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
if (bufpos >= tokenBegin)
|
|
||||||
{
|
|
||||||
len = bufpos - tokenBegin + inBuf + 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
len = bufsize - tokenBegin + bufpos + 1 + inBuf;
|
|
||||||
}
|
|
||||||
|
|
||||||
int i = 0, j = 0, k = 0;
|
|
||||||
int nextColDiff = 0, columnDiff = 0;
|
|
||||||
|
|
||||||
while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
|
|
||||||
{
|
|
||||||
bufline[j] = newLine;
|
|
||||||
nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
|
|
||||||
bufcolumn[j] = newCol + columnDiff;
|
|
||||||
columnDiff = nextColDiff;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i < len)
|
|
||||||
{
|
|
||||||
bufline[j] = newLine++;
|
|
||||||
bufcolumn[j] = newCol + columnDiff;
|
|
||||||
|
|
||||||
while (i++ < len)
|
|
||||||
{
|
|
||||||
if (bufline[j = start % bufsize] != bufline[++start % bufsize])
|
|
||||||
bufline[j] = newLine++;
|
|
||||||
else
|
|
||||||
bufline[j] = newLine;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
line = bufline[j];
|
|
||||||
column = bufcolumn[j];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
/* JavaCC - OriginalChecksum=ab0c629eabd887d4c88cec51eb5e6477 (do not edit this line) */
|
|
||||||
@@ -1,131 +0,0 @@
|
|||||||
/* Generated By:JavaCC: Do not edit this line. Token.java Version 5.0 */
|
|
||||||
/* JavaCCOptions:TOKEN_EXTENDS=,KEEP_LINE_COL=null,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
|
|
||||||
package org.luaj.vm2.parser;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Describes the input token stream.
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class Token implements java.io.Serializable {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The version identifier for this Serializable class.
|
|
||||||
* Increment only if the <i>serialized</i> form of the
|
|
||||||
* class changes.
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An integer that describes the kind of this token. This numbering
|
|
||||||
* system is determined by JavaCCParser, and a table of these numbers is
|
|
||||||
* stored in the file ...Constants.java.
|
|
||||||
*/
|
|
||||||
public int kind;
|
|
||||||
|
|
||||||
/** The line number of the first character of this Token. */
|
|
||||||
public int beginLine;
|
|
||||||
/** The column number of the first character of this Token. */
|
|
||||||
public int beginColumn;
|
|
||||||
/** The line number of the last character of this Token. */
|
|
||||||
public int endLine;
|
|
||||||
/** The column number of the last character of this Token. */
|
|
||||||
public int endColumn;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The string image of the token.
|
|
||||||
*/
|
|
||||||
public String image;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A reference to the next regular (non-special) token from the input
|
|
||||||
* stream. If this is the last token from the input stream, or if the
|
|
||||||
* token manager has not read tokens beyond this one, this field is
|
|
||||||
* set to null. This is true only if this token is also a regular
|
|
||||||
* token. Otherwise, see below for a description of the contents of
|
|
||||||
* this field.
|
|
||||||
*/
|
|
||||||
public Token next;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This field is used to access special tokens that occur prior to this
|
|
||||||
* token, but after the immediately preceding regular (non-special) token.
|
|
||||||
* If there are no such special tokens, this field is set to null.
|
|
||||||
* When there are more than one such special token, this field refers
|
|
||||||
* to the last of these special tokens, which in turn refers to the next
|
|
||||||
* previous special token through its specialToken field, and so on
|
|
||||||
* until the first special token (whose specialToken field is null).
|
|
||||||
* The next fields of special tokens refer to other special tokens that
|
|
||||||
* immediately follow it (without an intervening regular token). If there
|
|
||||||
* is no such token, this field is null.
|
|
||||||
*/
|
|
||||||
public Token specialToken;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An optional attribute value of the Token.
|
|
||||||
* Tokens which are not used as syntactic sugar will often contain
|
|
||||||
* meaningful values that will be used later on by the compiler or
|
|
||||||
* interpreter. This attribute value is often different from the image.
|
|
||||||
* Any subclass of Token that actually wants to return a non-null value can
|
|
||||||
* override this method as appropriate.
|
|
||||||
*/
|
|
||||||
public Object getValue() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* No-argument constructor
|
|
||||||
*/
|
|
||||||
public Token() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new token for the specified Image.
|
|
||||||
*/
|
|
||||||
public Token(int kind)
|
|
||||||
{
|
|
||||||
this(kind, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new token for the specified Image and Kind.
|
|
||||||
*/
|
|
||||||
public Token(int kind, String image)
|
|
||||||
{
|
|
||||||
this.kind = kind;
|
|
||||||
this.image = image;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the image.
|
|
||||||
*/
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return image;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a new Token object, by default. However, if you want, you
|
|
||||||
* can create and return subclass objects based on the value of ofKind.
|
|
||||||
* Simply add the cases to the switch for all those special cases.
|
|
||||||
* For example, if you have a subclass of Token called IDToken that
|
|
||||||
* you want to create if ofKind is ID, simply add something like :
|
|
||||||
*
|
|
||||||
* case MyParserConstants.ID : return new IDToken(ofKind, image);
|
|
||||||
*
|
|
||||||
* to the following switch statement. Then you can cast matchedToken
|
|
||||||
* variable to the appropriate type and use sit in your lexical actions.
|
|
||||||
*/
|
|
||||||
public static Token newToken(int ofKind, String image)
|
|
||||||
{
|
|
||||||
switch(ofKind)
|
|
||||||
{
|
|
||||||
default : return new Token(ofKind, image);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Token newToken(int ofKind)
|
|
||||||
{
|
|
||||||
return newToken(ofKind, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
/* JavaCC - OriginalChecksum=70d73add5771158f10d1ae81755e7cfc (do not edit this line) */
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 5.0 */
|
|
||||||
/* JavaCCOptions: */
|
|
||||||
package org.luaj.vm2.parser;
|
|
||||||
|
|
||||||
/** Token Manager Error. */
|
|
||||||
public class TokenMgrError extends Error
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The version identifier for this Serializable class.
|
|
||||||
* Increment only if the <i>serialized</i> form of the
|
|
||||||
* class changes.
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Ordinals for various reasons why an Error of this type can be thrown.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Lexical error occurred.
|
|
||||||
*/
|
|
||||||
static final int LEXICAL_ERROR = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An attempt was made to create a second instance of a static token manager.
|
|
||||||
*/
|
|
||||||
static final int STATIC_LEXER_ERROR = 1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tried to change to an invalid lexical state.
|
|
||||||
*/
|
|
||||||
static final int INVALID_LEXICAL_STATE = 2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Detected (and bailed out of) an infinite loop in the token manager.
|
|
||||||
*/
|
|
||||||
static final int LOOP_DETECTED = 3;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates the reason why the exception is thrown. It will have
|
|
||||||
* one of the above 4 values.
|
|
||||||
*/
|
|
||||||
int errorCode;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Replaces unprintable characters by their escaped (or unicode escaped)
|
|
||||||
* equivalents in the given string
|
|
||||||
*/
|
|
||||||
protected static final String addEscapes(String str) {
|
|
||||||
StringBuffer retval = new StringBuffer();
|
|
||||||
char ch;
|
|
||||||
for (int i = 0; i < str.length(); i++) {
|
|
||||||
switch (str.charAt(i))
|
|
||||||
{
|
|
||||||
case 0 :
|
|
||||||
continue;
|
|
||||||
case '\b':
|
|
||||||
retval.append("\\b");
|
|
||||||
continue;
|
|
||||||
case '\t':
|
|
||||||
retval.append("\\t");
|
|
||||||
continue;
|
|
||||||
case '\n':
|
|
||||||
retval.append("\\n");
|
|
||||||
continue;
|
|
||||||
case '\f':
|
|
||||||
retval.append("\\f");
|
|
||||||
continue;
|
|
||||||
case '\r':
|
|
||||||
retval.append("\\r");
|
|
||||||
continue;
|
|
||||||
case '\"':
|
|
||||||
retval.append("\\\"");
|
|
||||||
continue;
|
|
||||||
case '\'':
|
|
||||||
retval.append("\\\'");
|
|
||||||
continue;
|
|
||||||
case '\\':
|
|
||||||
retval.append("\\\\");
|
|
||||||
continue;
|
|
||||||
default:
|
|
||||||
if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
|
|
||||||
String s = "0000" + Integer.toString(ch, 16);
|
|
||||||
retval.append("\\u" + s.substring(s.length() - 4, s.length()));
|
|
||||||
} else {
|
|
||||||
retval.append(ch);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return retval.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a detailed message for the Error when it is thrown by the
|
|
||||||
* token manager to indicate a lexical error.
|
|
||||||
* Parameters :
|
|
||||||
* EOFSeen : indicates if EOF caused the lexical error
|
|
||||||
* curLexState : lexical state in which this error occurred
|
|
||||||
* errorLine : line number when the error occurred
|
|
||||||
* errorColumn : column number when the error occurred
|
|
||||||
* errorAfter : prefix that was seen before this error occurred
|
|
||||||
* curchar : the offending character
|
|
||||||
* Note: You can customize the lexical error message by modifying this method.
|
|
||||||
*/
|
|
||||||
protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
|
|
||||||
return("Lexical error at line " +
|
|
||||||
errorLine + ", column " +
|
|
||||||
errorColumn + ". Encountered: " +
|
|
||||||
(EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
|
|
||||||
"after : \"" + addEscapes(errorAfter) + "\"");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* You can also modify the body of this method to customize your error messages.
|
|
||||||
* For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
|
|
||||||
* of end-users concern, so you can return something like :
|
|
||||||
*
|
|
||||||
* "Internal Error : Please file a bug report .... "
|
|
||||||
*
|
|
||||||
* from this method for such cases in the release version of your parser.
|
|
||||||
*/
|
|
||||||
public String getMessage() {
|
|
||||||
return super.getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Constructors of various flavors follow.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** No arg constructor. */
|
|
||||||
public TokenMgrError() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Constructor with message and reason. */
|
|
||||||
public TokenMgrError(String message, int reason) {
|
|
||||||
super(message);
|
|
||||||
errorCode = reason;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Full Constructor. */
|
|
||||||
public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
|
|
||||||
this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* JavaCC - OriginalChecksum=bd3720425dc7b44a5223b12676db358c (do not edit this line) */
|
|
||||||
@@ -20,11 +20,11 @@ options {
|
|||||||
DEBUG_LOOKAHEAD = false;
|
DEBUG_LOOKAHEAD = false;
|
||||||
DEBUG_PARSER = false;
|
DEBUG_PARSER = false;
|
||||||
DEBUG_TOKEN_MANAGER = false;
|
DEBUG_TOKEN_MANAGER = false;
|
||||||
OUTPUT_DIRECTORY = "org/luaj/vm2/parser";
|
OUTPUT_DIRECTORY = "org/luaj/vm2/parser/lua51";
|
||||||
}
|
}
|
||||||
|
|
||||||
PARSER_BEGIN(LuaParser)
|
PARSER_BEGIN(LuaParser)
|
||||||
package org.luaj.vm2.parser;
|
package org.luaj.vm2.parser.lua51;
|
||||||
|
|
||||||
public class LuaParser {
|
public class LuaParser {
|
||||||
|
|
||||||
@@ -20,11 +20,11 @@ options {
|
|||||||
DEBUG_LOOKAHEAD = false;
|
DEBUG_LOOKAHEAD = false;
|
||||||
DEBUG_PARSER = false;
|
DEBUG_PARSER = false;
|
||||||
DEBUG_TOKEN_MANAGER = false;
|
DEBUG_TOKEN_MANAGER = false;
|
||||||
OUTPUT_DIRECTORY = "org/luaj/vm2/parser";
|
OUTPUT_DIRECTORY = "org/luaj/vm2/parser/lua52";
|
||||||
}
|
}
|
||||||
|
|
||||||
PARSER_BEGIN(LuaParser)
|
PARSER_BEGIN(LuaParser)
|
||||||
package org.luaj.vm2.parser;
|
package org.luaj.vm2.parser.lua52;
|
||||||
|
|
||||||
public class LuaParser {
|
public class LuaParser {
|
||||||
|
|
||||||
Reference in New Issue
Block a user