/* User code */ import java.io.*; // For FileInputStream and its exceptions. /* ========================================================================= */ class Token { public String type; public String spelling; public Token(String t) { type = t; } public Token(String t, String s) { type = t; spelling = s; } public String toString() { if (spelling != null) return "\"" + spelling + "\""; else return type; } } /* ========================================================================= */ class P2 { public static void main(String[] args) throws FileNotFoundException, IOException { FileInputStream fis = new FileInputStream(args[0]); Lexer L = new Lexer(fis); Token T = null; do { T = L.next(); System.out.println(T); } while (T.type != "Eof"); } } /* ========================================================================= */ class Lexer { private final int YY_BUFFER_SIZE = 512; private final int YY_F = -1; private final int YY_NO_STATE = -1; private final int YY_NOT_ACCEPT = 0; private final int YY_START = 1; private final int YY_END = 2; private final int YY_NO_ANCHOR = 4; private final char YYEOF = '\uFFFF'; private java.io.BufferedReader yy_reader; private int yy_buffer_index; private int yy_buffer_read; private int yy_buffer_start; private int yy_buffer_end; private char yy_buffer[]; private int yy_lexical_state; Lexer (java.io.Reader reader) { this (); if (null == reader) { throw (new Error("Error: Bad input stream initializer.")); } yy_reader = new java.io.BufferedReader(reader); } Lexer (java.io.InputStream instream) { this (); if (null == instream) { throw (new Error("Error: Bad input stream initializer.")); } yy_reader = new java.io.BufferedReader(new java.io.InputStreamReader(instream)); } private Lexer () { yy_buffer = new char[YY_BUFFER_SIZE]; yy_buffer_read = 0; yy_buffer_index = 0; yy_buffer_start = 0; yy_buffer_end = 0; yy_lexical_state = YYINITIAL; } private boolean yy_eof_done = false; private final int YYINITIAL = 0; private final int yy_state_dtrans[] = { 0 }; private void yybegin (int state) { yy_lexical_state = state; } private char yy_advance () throws java.io.IOException { int next_read; int i; int j; if (yy_buffer_index < yy_buffer_read) { return yy_buffer[yy_buffer_index++]; } if (0 != yy_buffer_start) { i = yy_buffer_start; j = 0; while (i < yy_buffer_read) { yy_buffer[j] = yy_buffer[i]; ++i; ++j; } yy_buffer_end = yy_buffer_end - yy_buffer_start; yy_buffer_start = 0; yy_buffer_read = j; yy_buffer_index = j; next_read = yy_reader.read(yy_buffer, yy_buffer_read, yy_buffer.length - yy_buffer_read); if (-1 == next_read) { return YYEOF; } yy_buffer_read = yy_buffer_read + next_read; } while (yy_buffer_index >= yy_buffer_read) { if (yy_buffer_index >= yy_buffer.length) { yy_buffer = yy_double(yy_buffer); } next_read = yy_reader.read(yy_buffer, yy_buffer_read, yy_buffer.length - yy_buffer_read); if (-1 == next_read) { return YYEOF; } yy_buffer_read = yy_buffer_read + next_read; } return yy_buffer[yy_buffer_index++]; } private void yy_move_start () { ++yy_buffer_start; } private void yy_pushback () { --yy_buffer_end; } private void yy_mark_start () { yy_buffer_start = yy_buffer_index; } private void yy_mark_end () { yy_buffer_end = yy_buffer_index; } private void yy_to_mark () { yy_buffer_index = yy_buffer_end; } private java.lang.String yytext () { return (new java.lang.String(yy_buffer, yy_buffer_start, yy_buffer_end - yy_buffer_start)); } private int yylength () { return yy_buffer_end - yy_buffer_start; } private char[] yy_double (char buf[]) { int i; char newbuf[]; newbuf = new char[2*buf.length]; for (i = 0; i < buf.length; ++i) { newbuf[i] = buf[i]; } return newbuf; } private final int YY_E_INTERNAL = 0; private final int YY_E_MATCH = 1; private java.lang.String yy_error_string[] = { "Error: Internal error.\n", "Error: Unmatched input.\n" }; private void yy_error (int code,boolean fatal) { java.lang.System.out.print(yy_error_string[code]); java.lang.System.out.flush(); if (fatal) { throw new Error("Fatal Error.\n"); } } private int yy_acpt[] = { YY_NOT_ACCEPT, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NOT_ACCEPT, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NOT_ACCEPT, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR, YY_NO_ANCHOR }; private int yy_cmap[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 9, 0, 10, 11, 12, 8, 13, 8, 8, 8, 14, 8, 8, 15, 8, 16, 17, 8, 8, 18, 19, 20, 21, 8, 8, 8, 8, 8, 22, 0, 23, 0, 0 }; private int yy_rmap[] = { 0, 1, 1, 1, 1, 2, 3, 1, 1, 4, 3, 3, 3, 3, 3, 5, 6, 7, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }; private int yy_nxt[][] = { { 1, 2, 2, 3, 4, 1, 16, 5, 6, 1, 6, 38, 33, 6, 24, 6, 6, 6, 6, 36, 29, 6, 7, 8 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, -1, -1 }, { 9, 9, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 }, { 15, 15, 15, 15, 15, 19, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, { -1, -1, -1, -1, -1, 15, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 10, 6, -1, -1 }, { 15, 15, 15, 15, 15, 15, 18, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 11, 6, 6, 6, 6, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 12, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 13, 6, 6, 6, 6, 6, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 14, 6, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 17, 6, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 20, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 21, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 22, 6, 6, 6, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 23, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 25, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 26, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 27, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 28, 6, 6, 6, 6, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 30, 6, 6, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 31, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 32, 6, 6, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 34, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 35, 6, 6, 6, 6, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 37, 6, 6, 6, 6, -1, -1 } }; public Token next () throws java.io.IOException { char yy_lookahead; int yy_anchor = YY_NO_ANCHOR; int yy_state = yy_state_dtrans[yy_lexical_state]; int yy_next_state = YY_NO_STATE; int yy_last_accept_state = YY_NO_STATE; boolean yy_initial = true; int yy_this_accept; yy_mark_start(); yy_this_accept = yy_acpt[yy_state]; if (YY_NOT_ACCEPT != yy_this_accept) { yy_last_accept_state = yy_state; yy_mark_end(); } while (true) { yy_lookahead = yy_advance(); yy_next_state = YY_F; if (YYEOF != yy_lookahead) { yy_next_state = yy_nxt[yy_rmap[yy_state]][yy_cmap[yy_lookahead]]; } if (YY_F != yy_next_state) { yy_state = yy_next_state; yy_initial = false; yy_this_accept = yy_acpt[yy_state]; if (YY_NOT_ACCEPT != yy_this_accept) { yy_last_accept_state = yy_state; yy_mark_end(); } } else { if (YYEOF == yy_lookahead && true == yy_initial) { return new Token("Eof"); } else if (YY_NO_STATE == yy_last_accept_state) { throw (new Error("Lexical Error: Unmatched Input.")); } else { yy_to_mark(); yy_anchor = yy_acpt[yy_last_accept_state]; if (0 != (YY_END & yy_anchor)) { yy_pushback(); } if (0 != (YY_START & yy_anchor)) { yy_move_start(); } switch (yy_last_accept_state) { case 1: { return new Token("Err"); } case -2: break; case 2: { } case -3: break; case 3: { return new Token("L-paren"); } case -4: break; case 4: { return new Token("R-paren"); } case -5: break; case 5: { return new Token("Num", yytext()); } case -6: break; case 6: { return new Token("Id", yytext()); } case -7: break; case 7: { return new Token("L-brace"); } case -8: break; case 8: { return new Token("R-brace"); } case -9: break; case 9: { } case -10: break; case 10: { return new Token("Int"); } case -11: break; case 11: { return new Token("Bool", yytext()); } case -12: break; case 12: { return new Token("Class"); } case -13: break; case 13: { return new Token("Static"); } case -14: break; case 14: { return new Token("Boolean"); } case -15: break; case 16: { return new Token("Err"); } case -16: break; case 17: { return new Token("Id", yytext()); } case -17: break; case 18: { } case -18: break; case 20: { return new Token("Id", yytext()); } case -19: break; case 21: { return new Token("Id", yytext()); } case -20: break; case 22: { return new Token("Id", yytext()); } case -21: break; case 23: { return new Token("Id", yytext()); } case -22: break; case 24: { return new Token("Id", yytext()); } case -23: break; case 25: { return new Token("Id", yytext()); } case -24: break; case 26: { return new Token("Id", yytext()); } case -25: break; case 27: { return new Token("Id", yytext()); } case -26: break; case 28: { return new Token("Id", yytext()); } case -27: break; case 29: { return new Token("Id", yytext()); } case -28: break; case 30: { return new Token("Id", yytext()); } case -29: break; case 31: { return new Token("Id", yytext()); } case -30: break; case 32: { return new Token("Id", yytext()); } case -31: break; case 33: { return new Token("Id", yytext()); } case -32: break; case 34: { return new Token("Id", yytext()); } case -33: break; case 35: { return new Token("Id", yytext()); } case -34: break; case 36: { return new Token("Id", yytext()); } case -35: break; case 37: { return new Token("Id", yytext()); } case -36: break; case 38: { return new Token("Id", yytext()); } case -37: break; default: yy_error(YY_E_INTERNAL,false); case -1: } yy_initial = true; yy_state = yy_state_dtrans[yy_lexical_state]; yy_next_state = YY_NO_STATE; yy_last_accept_state = YY_NO_STATE; yy_mark_start(); yy_this_accept = yy_acpt[yy_state]; if (YY_NOT_ACCEPT != yy_this_accept) { yy_last_accept_state = yy_state; } } } } } }