in jflex/src/main/java/jflex/generator/Emitter.java [1166:1229]
private void emitEOFVal() {
EOFActions eofActions = parser.getEOFActions();
if (eofCode != null) println(" zzDoEOF();");
if (eofActions.numActions() > 0) {
println(" switch (zzLexicalState) {");
// pick a start value for break case labels.
// must be larger than any value of a lex state:
int last = dfa.numStates();
for (String name : scanner.stateNames()) {
int num = scanner.getStateNumber(name);
Action action = eofActions.getAction(num);
if (action != null) {
println(" case " + name + ": {");
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: <<EOF>>\");");
print(" System.out.println(\"action [" + action.priority + "] { ");
print(escapify(action.content));
println(" }\");");
}
println(" " + action.content);
println(" } // fall though");
println(" case " + (++last) + ": break;");
}
}
println(" default:");
}
Action defaultAction = eofActions.getDefault();
if (defaultAction != null) {
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: <<EOF>>\");");
print(" System.out.println(\"action [" + defaultAction.priority + "] { ");
print(escapify(defaultAction.content));
println(" }\");");
}
println(" " + defaultAction.content);
println(" }");
} else if (scanner.eofVal() != null) println(" { " + scanner.eofVal() + " }");
else if (scanner.isInteger()) {
if (scanner.tokenType() != null) {
Out.error(ErrorMessages.INT_AND_TYPE);
throw new GeneratorException();
}
println(" return YYEOF;");
} else println(" return null;");
if (eofActions.numActions() > 0) println(" }");
}