package jplag.chars; import java.io.*; import jplag.Structure; public class Parser extends jplag.Parser implements jplag.TokenConstants { private Structure struct; public static void main(String args[]) { System.out.println("parsing: " + args[0]); Parser parser = new Parser(); parser.struct = new Structure(); parser.parseFile(new File("."), args[0]); System.out.println(parser.struct); } public jplag.Structure parse(File dir, String files[]) { struct = new Structure(); errors = 0; for (int i = 0; i < files.length; i++) { getProgram().print(null, "Parsing file " + files[i] + "\n"); if (!parseFile(dir, files[i])) errors++; struct.addToken(new CharToken(FILE_END, files[i], this)); } //System.err.println(struct.toString()); if (errors == 0) program.print(null, "OK"); else program.print(null, errors + " ERROR" + (errors > 1 ? "S" : "")); this.parseEnd(); return struct; } public boolean parseFile(File dir, String file) { char[] buffer = new char[4096]; int type; int length; int offset = 0; try { FileReader fis = new FileReader(new File(dir, file)); do { length = fis.read(buffer); for (int i = 0; i < length; i++) { if (buffer[i] <= 127 && (type = mapping[buffer[i]]) > 1) { struct.addToken(new CharToken(type, file, offset + i, this)); } //System.out.print(buffer[i]); } offset += length; } while (length != -1); // close file fis.close(); } catch (Exception e) { e.printStackTrace(); return false; } return true; } private char[] reversedMapping = null; public char reverseMapping(int i) { if (reversedMapping == null) { int size = 0; for (int j = 0; j < mapping.length; j++) if (mapping[j] > size) size = mapping[j]; reversedMapping = new char[size + 1]; for (int j = 0; j <= size; j++) { reversedMapping[j] = 0; for (int k = 0; k < mapping.length; k++) if (mapping[k] == j) { reversedMapping[j] = (char) k; break; } } } return reversedMapping[i]; } private int[] mapping = { -1, // 0 (nul) -1, // 1 (soh) -1, // 2 (stx) -1, // 3 (etx) -1, // 4 (eot) -1, // 5 (enq) -1, // 6 (ack) -1, // 7 (bel) -1, // 8 (bs) -1, // 9 (ht) -1, // 10 (nl) -1, // 11 (vt) -1, // 12 (np) -1, // 13 (cr) -1, // 14 (so) -1, // 15 (si) -1, // 16 (dle) -1, // 17 (dc1) -1, // 18 (dc2) -1, // 19 (dc3) -1, // 20 (dc4) -1, // 21 (nak) -1, // 22 (syn) -1, // 23 (etb) -1, // 24 (can) -1, // 25 (em) -1, // 26 (sub) -1, // 27 (esc) -1, // 28 (fs) -1, // 29 (gs) -1, // 30 (rs) -1, // 31 (us) -1, // 32 (sp) -1, // 33 ! -1, // 34 " -1, // 35 # -1, // 36 $ -1, // 37 % -1, // 38 & -1, // 39 ' -1, // 40 ( -1, // 41 ) -1, // 42 * -1, // 43 + -1, // 44 , -1, // 45 - -1, // 46 . -1, // 47 / 27, // 48 0 28, // 49 1 29, // 50 2 30, // 51 3 31, // 52 4 32, // 53 5 33, // 54 6 34, // 55 7 35, // 56 8 36, // 57 9 -1, // 58 : -1, // 59 ; -1, // 60 < -1, // 61 = -1, // 62 > -1, // 63 ? -1, // 64 @ 2, // 65 A 3, // 66 B 4, // 67 C 5, // 68 D 6, // 69 E 7, // 70 F 8, // 71 G 9, // 72 H 10, // 73 I 11, // 74 J 12, // 75 K 13, // 76 L 14, // 77 M 15, // 78 N 16, // 79 O 17, // 80 P 18, // 81 Q 19, // 82 R 20, // 83 S 21, // 84 T 22, // 85 U 23, // 86 V 24, // 87 W 25, // 88 X 26, // 89 Y 27, // 90 Z -1, // 91 [ -1, // 92 \ -1, // 93 ] -1, // 94 ^ -1, // 95 _ -1, // 96 ` 2, // 97 a 3, // 98 b 4, // 99 c 5, // 100 d 6, // 101 e 7, // 102 f 8, // 103 g 9, // 104 h 10, // 105 i 11, // 106 j 12, // 107 k 13, // 108 l 14, // 109 m 15, // 110 n 16, // 111 o 17, // 112 p 18, // 113 q 19, // 114 r 20, // 115 s 21, // 116 t 22, // 117 u 23, // 118 v 24, // 119 w 25, // 120 x 26, // 121 y 27, // 122 z -1, // 123 { -1, // 124 | -1, // 125 } -1, // 126 ~ -1, // 127 (del) }; }