/** * */ package xhail.core.parser; /** * @author stefano * */ public enum InputStates implements State { INITIAL { public boolean process(Context context) { statement = ""; context.setState(NORMAL); return false; } }, NORMAL { public boolean process(Context context) { int ch = context.read(); switch (ch) { case -1: context.append(statement); context.setState(EOF); break; case '\n': case '\r': case '\f': break; case '\t': case ' ': if (!statement.isEmpty() && (statement.endsWith("not") || // statement.endsWith("#compute") || // statement.endsWith("#const") || // statement.endsWith("#display") || // statement.endsWith("#domain") || // statement.endsWith("#example") || // statement.endsWith("#external") || // statement.endsWith("#hide") || // statement.endsWith("#modeb") || // statement.endsWith("#modeh") || // statement.endsWith("#show") || // false)) statement += " "; break; case '\"': statement += (char) ch; context.setState(STRING); break; case '.': statement += (char) ch; context.setState(DOT); break; case '%': context.setState(COMMENT); break; default: statement += (char) ch; } return false; } }, DOT { public boolean process(Context context) { int ch = context.read(); switch (ch) { case -1: context.append(statement); context.setState(EOF); break; case '\n': case '\r': case '\f': case '\t': case ' ': context.append(statement); statement = ""; context.setState(NORMAL); break; case '\"': context.append(statement); statement = "" + (char) ch; context.setState(STRING); break; case '.': statement += (char) ch; context.setState(NORMAL); break; case '%': context.append(statement); statement = ""; context.setState(COMMENT); break; default: context.append(statement); statement = "" + (char) ch; context.setState(NORMAL); } return false; } }, STRING { public boolean process(Context context) { int ch = context.read(); switch (ch) { case -1: context.append(statement); context.setState(EOF); break; case '\\': statement += (char) ch; context.setState(ESCAPE); break; case '\"': statement += (char) ch; context.setState(NORMAL); break; default: statement += (char) ch; } return false; } }, ESCAPE { public boolean process(Context context) { int ch = context.read(); switch (ch) { case -1: context.append(statement); context.setState(EOF); break; default: statement += (char) ch; context.setState(STRING); } return false; } }, COMMENT { public boolean process(Context context) { int ch = context.read(); switch (ch) { case -1: context.append(statement); context.setState(EOF); break; case '\n': context.setState(NORMAL); break; case '*': context.setState(COMMENT_MULTI); break; default: context.setState(COMMENT_SINGLE); } return false; } }, COMMENT_SINGLE { public boolean process(Context context) { int ch = context.read(); switch (ch) { case -1: context.append(statement); context.setState(EOF); break; case '\n': context.setState(NORMAL); break; default: } return false; } }, COMMENT_MULTI { public boolean process(Context context) { int ch = context.read(); switch (ch) { case -1: context.append(statement); context.setState(EOF); break; case '*': context.setState(COMMENT_OVER); break; default: } return false; } }, COMMENT_OVER { public boolean process(Context context) { int ch = context.read(); switch (ch) { case -1: context.append(statement); context.setState(EOF); break; case '%': context.setState(NORMAL); break; case '*': break; default: context.setState(COMMENT_MULTI); } return false; } }, EOF { public boolean process(Context context) { context.setState(EOF); return true; } }; private static String statement = ""; @Override public boolean process(Context context) { System.out.println("Hello world!"); return true; } }