in jflex/src/main/java/jflex/generator/Emitter.java [774:941]
private void emitLexFunctHeader(String functionName) {
if (scanner.cupCompatible() || scanner.cup2Compatible()) {
print(" @Override");
// force public, because we have to implement cup/cup2 interface
print(" public ");
} else {
print(" " + visibility + " ");
}
if (scanner.tokenType() == null) {
if (scanner.isInteger()) print("int");
else if (scanner.isIntWrap()) print("Integer");
else print("Yytoken");
} else print(scanner.tokenType());
print(" ");
print(functionName);
print("() throws java.io.IOException");
for (String thrown : scanner.lexThrow()) {
print("\n , ");
print(thrown);
}
if (scanner.scanErrorException() != null) {
print(",\n ");
print(scanner.scanErrorException());
}
println("\n {");
skel.emitNext();
println(" int [] zzTransL = ZZ_TRANS;");
println(" int [] zzRowMapL = ZZ_ROWMAP;");
println(" int [] zzAttrL = ZZ_ATTRIBUTE;");
skel.emitNext();
if (scanner.charCount()) {
println(" yychar+= zzMarkedPosL-zzStartRead;");
println("");
}
if (scanner.lineCount() || scanner.columnCount()) {
println(" boolean zzR = false;");
println(" int zzCh;");
println(" int zzCharCount;");
println(" for (zzCurrentPosL = zzStartRead ;");
println(" zzCurrentPosL < zzMarkedPosL ;");
println(" zzCurrentPosL += zzCharCount ) {");
println(" zzCh = Character.codePointAt(zzBufferL, zzCurrentPosL, zzMarkedPosL);");
println(" zzCharCount = Character.charCount(zzCh);");
println(" switch (zzCh) {");
println(" case '\\u000B': // fall through");
println(" case '\\u000C': // fall through");
println(" case '\\u0085': // fall through");
println(" case '\\u2028': // fall through");
println(" case '\\u2029':");
if (scanner.lineCount()) println(" yyline++;");
if (scanner.columnCount()) println(" yycolumn = 0;");
println(" zzR = false;");
println(" break;");
println(" case '\\r':");
if (scanner.lineCount()) println(" yyline++;");
if (scanner.columnCount()) println(" yycolumn = 0;");
println(" zzR = true;");
println(" break;");
println(" case '\\n':");
println(" if (zzR)");
println(" zzR = false;");
println(" else {");
if (scanner.lineCount()) println(" yyline++;");
if (scanner.columnCount()) println(" yycolumn = 0;");
println(" }");
println(" break;");
println(" default:");
println(" zzR = false;");
if (scanner.columnCount()) println(" yycolumn += zzCharCount;");
println(" }");
println(" }");
println();
if (scanner.lineCount()) {
println(" if (zzR) {");
println(" // peek one character ahead if it is");
println(" // (if we have counted one line too much)");
println(" boolean zzPeek;");
println(" if (zzMarkedPosL < zzEndReadL)");
println(" zzPeek = zzBufferL[zzMarkedPosL] == '\\n';");
println(" else if (zzAtEOF)");
println(" zzPeek = false;");
println(" else {");
println(" boolean eof = zzRefill();");
println(" zzEndReadL = zzEndRead;");
println(" zzMarkedPosL = zzMarkedPos;");
println(" zzBufferL = zzBuffer;");
println(" if (eof)");
println(" zzPeek = false;");
println(" else");
println(" zzPeek = zzBufferL[zzMarkedPosL] == '\\n';");
println(" }");
println(" if (zzPeek) yyline--;");
println(" }");
}
}
if (scanner.bolUsed()) {
// zzMarkedPos > zzStartRead <=> last match was not empty
// if match was empty, last value of zzAtBOL can be used
// zzStartRead is always >= 0
println(" if (zzMarkedPosL > zzStartRead) {");
println(" switch (zzBufferL[zzMarkedPosL-1]) {");
println(" case '\\n':");
println(" case '\\u000B': // fall through");
println(" case '\\u000C': // fall through");
println(" case '\\u0085': // fall through");
println(" case '\\u2028': // fall through");
println(" case '\\u2029': // fall through");
println(" zzAtBOL = true;");
println(" break;");
println(" case '\\r': ");
println(" if (zzMarkedPosL < zzEndReadL)");
println(" zzAtBOL = zzBufferL[zzMarkedPosL] != '\\n';");
println(" else if (zzAtEOF)");
println(" zzAtBOL = false;");
println(" else {");
println(" boolean eof = zzRefill();");
println(" zzMarkedPosL = zzMarkedPos;");
println(" zzEndReadL = zzEndRead;");
println(" zzBufferL = zzBuffer;");
println(" if (eof) ");
println(" zzAtBOL = false;");
println(" else ");
println(" zzAtBOL = zzBufferL[zzMarkedPosL] != '\\n';");
println(" }");
println(" break;");
println(" default:");
println(" zzAtBOL = false;");
println(" }");
println(" }");
}
skel.emitNext();
if (scanner.bolUsed()) {
println(" if (zzAtBOL)");
println(" zzState = ZZ_LEXSTATE[zzLexicalState+1];");
println(" else");
println(" zzState = ZZ_LEXSTATE[zzLexicalState];");
println();
} else {
println(" zzState = ZZ_LEXSTATE[zzLexicalState];");
println();
}
println(" // set up zzAction for empty match case:");
println(" int zzAttributes = zzAttrL[zzState];");
println(" if ( (zzAttributes & 1) == 1 ) {");
println(" zzAction = zzState;");
println(" }");
println();
skel.emitNext();
}