in jflex/src/main/java/jflex/generator/Emitter.java [1085:1164]
private void emitActions() {
println(" switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {");
int i = actionTable.size() + 1;
for (Map.Entry<Action, Integer> entry : actionTable.entrySet()) {
Action action = entry.getKey();
int label = entry.getValue();
println(" case " + label + ":");
if (action.lookAhead() == Action.Kind.FIXED_BASE) {
println(" // lookahead expression with fixed base length");
println(" zzMarkedPos = Character.offsetByCodePoints");
println(
" (zzBufferL, zzStartRead, zzEndRead - zzStartRead, zzStartRead, "
+ action.getLookLength()
+ ");");
}
if (action.lookAhead() == Action.Kind.FIXED_LOOK
|| action.lookAhead() == Action.Kind.FINITE_CHOICE) {
println(" // lookahead expression with fixed lookahead length");
println(" zzMarkedPos = Character.offsetByCodePoints");
println(
" (zzBufferL, zzStartRead, zzEndRead - zzStartRead, zzMarkedPos, -"
+ action.getLookLength()
+ ");");
}
if (action.lookAhead() == Action.Kind.GENERAL_LOOK) {
println(" // general lookahead, find correct zzMarkedPos");
println(" { int zzFState = " + dfa.entryState(action.getEntryState()) + ";");
println(" int zzFPos = zzStartRead;");
println(" if (zzFin.length <= zzBufferL.length) {");
println(" zzFin = new boolean[zzBufferL.length+1];");
println(" }");
println(" boolean zzFinL[] = zzFin;");
println(" while (zzFState != -1 && zzFPos < zzMarkedPos) {");
println(" zzFinL[zzFPos] = ((zzAttrL[zzFState] & 1) == 1);");
println(" zzInput = Character.codePointAt(zzBufferL, zzFPos, zzMarkedPos);");
println(" zzFPos += Character.charCount(zzInput);");
println(" zzFState = zzTransL[ zzRowMapL[zzFState] + zzCMap(zzInput) ];");
println(" }");
println(" if (zzFState != -1) {");
println(" zzFinL[zzFPos++] = ((zzAttrL[zzFState] & 1) == 1);");
println(" }");
println(" while (zzFPos <= zzMarkedPos) {");
println(" zzFinL[zzFPos++] = false;");
println(" }");
println();
println(" zzFState = " + dfa.entryState(action.getEntryState() + 1) + ";");
println(" zzFPos = zzMarkedPos;");
println(" while (!zzFinL[zzFPos] || (zzAttrL[zzFState] & 1) != 1) {");
println(
" zzInput = Character.codePointBefore(zzBufferL, zzFPos, zzStartRead);");
println(" zzFPos -= Character.charCount(zzInput);");
println(" zzFState = zzTransL[ zzRowMapL[zzFState] + zzCMap(zzInput) ];");
println(" };");
println(" zzMarkedPos = zzFPos;");
println(" }");
}
if (scanner.debugOption()) {
print(" System.out.println(");
if (scanner.lineCount()) print("\"line: \"+(yyline+1)+\" \"+");
if (scanner.columnCount()) print("\"col: \"+(yycolumn+1)+\" \"+");
if (scanner.charCount()) print("\"char: \"+yychar+\" \"+");
println("\"match: --\"+zzToPrintable(yytext())+\"--\");");
print(" System.out.println(\"action [" + action.priority + "] { ");
print(escapify(action.content));
println(" }\");");
}
println(" { " + action.content);
println(" }");
println(" // fall through");
println(" case " + (i++) + ": break;");
}
}