Parser.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. package jplag.chars;
  2. import java.io.File;
  3. import java.io.FileReader;
  4. import jplag.TokenList;
  5. public class Parser extends jplag.Parser implements jplag.TokenConstants {
  6. private TokenList struct;
  7. public jplag.TokenList parse(File dir, String files[]) {
  8. struct = new TokenList();
  9. errors = 0;
  10. for (int i = 0; i < files.length; i++) {
  11. getProgram().print(null, "Parsing file " + files[i] + "\n");
  12. if (!parseFile(dir, files[i]))
  13. errors++;
  14. struct.addToken(new CharToken(FILE_END, files[i], this));
  15. }
  16. //System.err.println(struct.toString());
  17. if (errors == 0)
  18. program.print(null, "OK");
  19. else
  20. program.print(null, errors + " ERROR" + (errors > 1 ? "S" : ""));
  21. this.parseEnd();
  22. return struct;
  23. }
  24. private boolean parseFile(File dir, String file) {
  25. char[] buffer = new char[4096];
  26. int type;
  27. int length;
  28. int offset = 0;
  29. try {
  30. FileReader fis = new FileReader(new File(dir, file));
  31. do {
  32. length = fis.read(buffer);
  33. for (int i = 0; i < length; i++) {
  34. if (buffer[i] <= 127 && (type = mapping[buffer[i]]) > 1) {
  35. struct.addToken(new CharToken(type, file, offset + i,
  36. this));
  37. }
  38. //System.out.print(buffer[i]);
  39. }
  40. offset += length;
  41. } while (length != -1);
  42. // close file
  43. fis.close();
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. return false;
  47. }
  48. return true;
  49. }
  50. private char[] reversedMapping = null;
  51. public char reverseMapping(int i) {
  52. if (reversedMapping == null) {
  53. int size = 0;
  54. for (int j = 0; j < mapping.length; j++)
  55. if (mapping[j] > size)
  56. size = mapping[j];
  57. reversedMapping = new char[size + 1];
  58. for (int j = 0; j <= size; j++) {
  59. reversedMapping[j] = 0;
  60. for (int k = 0; k < mapping.length; k++)
  61. if (mapping[k] == j) {
  62. reversedMapping[j] = (char) k;
  63. break;
  64. }
  65. }
  66. }
  67. return reversedMapping[i];
  68. }
  69. private int[] mapping = { -1, // 0 (nul)
  70. -1, // 1 (soh)
  71. -1, // 2 (stx)
  72. -1, // 3 (etx)
  73. -1, // 4 (eot)
  74. -1, // 5 (enq)
  75. -1, // 6 (ack)
  76. -1, // 7 (bel)
  77. -1, // 8 (bs)
  78. -1, // 9 (ht)
  79. -1, // 10 (nl)
  80. -1, // 11 (vt)
  81. -1, // 12 (np)
  82. -1, // 13 (cr)
  83. -1, // 14 (so)
  84. -1, // 15 (si)
  85. -1, // 16 (dle)
  86. -1, // 17 (dc1)
  87. -1, // 18 (dc2)
  88. -1, // 19 (dc3)
  89. -1, // 20 (dc4)
  90. -1, // 21 (nak)
  91. -1, // 22 (syn)
  92. -1, // 23 (etb)
  93. -1, // 24 (can)
  94. -1, // 25 (em)
  95. -1, // 26 (sub)
  96. -1, // 27 (esc)
  97. -1, // 28 (fs)
  98. -1, // 29 (gs)
  99. -1, // 30 (rs)
  100. -1, // 31 (us)
  101. -1, // 32 (sp)
  102. -1, // 33 !
  103. -1, // 34 "
  104. -1, // 35 #
  105. -1, // 36 $
  106. -1, // 37 %
  107. -1, // 38 &
  108. -1, // 39 '
  109. -1, // 40 (
  110. -1, // 41 )
  111. -1, // 42 *
  112. -1, // 43 +
  113. -1, // 44 ,
  114. -1, // 45 -
  115. -1, // 46 .
  116. -1, // 47 /
  117. 27, // 48 0
  118. 28, // 49 1
  119. 29, // 50 2
  120. 30, // 51 3
  121. 31, // 52 4
  122. 32, // 53 5
  123. 33, // 54 6
  124. 34, // 55 7
  125. 35, // 56 8
  126. 36, // 57 9
  127. -1, // 58 :
  128. -1, // 59 ;
  129. -1, // 60 <
  130. -1, // 61 =
  131. -1, // 62 >
  132. -1, // 63 ?
  133. -1, // 64 @
  134. 2, // 65 A
  135. 3, // 66 B
  136. 4, // 67 C
  137. 5, // 68 D
  138. 6, // 69 E
  139. 7, // 70 F
  140. 8, // 71 G
  141. 9, // 72 H
  142. 10, // 73 I
  143. 11, // 74 J
  144. 12, // 75 K
  145. 13, // 76 L
  146. 14, // 77 M
  147. 15, // 78 N
  148. 16, // 79 O
  149. 17, // 80 P
  150. 18, // 81 Q
  151. 19, // 82 R
  152. 20, // 83 S
  153. 21, // 84 T
  154. 22, // 85 U
  155. 23, // 86 V
  156. 24, // 87 W
  157. 25, // 88 X
  158. 26, // 89 Y
  159. 27, // 90 Z
  160. -1, // 91 [
  161. -1, // 92 \
  162. -1, // 93 ]
  163. -1, // 94 ^
  164. -1, // 95 _
  165. -1, // 96 `
  166. 2, // 97 a
  167. 3, // 98 b
  168. 4, // 99 c
  169. 5, // 100 d
  170. 6, // 101 e
  171. 7, // 102 f
  172. 8, // 103 g
  173. 9, // 104 h
  174. 10, // 105 i
  175. 11, // 106 j
  176. 12, // 107 k
  177. 13, // 108 l
  178. 14, // 109 m
  179. 15, // 110 n
  180. 16, // 111 o
  181. 17, // 112 p
  182. 18, // 113 q
  183. 19, // 114 r
  184. 20, // 115 s
  185. 21, // 116 t
  186. 22, // 117 u
  187. 23, // 118 v
  188. 24, // 119 w
  189. 25, // 120 x
  190. 26, // 121 y
  191. 27, // 122 z
  192. -1, // 123 {
  193. -1, // 124 |
  194. -1, // 125 }
  195. -1, // 126 ~
  196. -1, // 127 (del)
  197. };
  198. }