Parser.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package de.jplag.text;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileReader;
  7. import java.util.HashSet;
  8. import antlr.Token;
  9. import de.jplag.AbstractParser;
  10. import de.jplag.InputState;
  11. import de.jplag.ParserToken;
  12. import de.jplag.TokenConstants;
  13. import de.jplag.TokenList;
  14. /**
  15. * @Changed by Emeric Kwemou 29.01.2005
  16. *
  17. */
  18. public class Parser extends AbstractParser implements TokenConstants {
  19. protected TokenStructure tokenStructure = new TokenStructure();
  20. private TokenList struct;
  21. private String currentFile;
  22. private HashSet<String> filter = null;
  23. public void initializeFilter(String fileName) throws FileNotFoundException {
  24. File file = new File(fileName);
  25. filter = new HashSet<String>();
  26. try {
  27. BufferedReader reader = new BufferedReader(new FileReader(file));
  28. String line;
  29. while ((line = reader.readLine()) != null) {
  30. filter.add(line.trim().toLowerCase());
  31. }
  32. System.out.println("Filter: " + filter.size() + " words read.");
  33. reader.close();
  34. } catch (Exception e) {
  35. System.out.println("Error reading filter file!");
  36. System.out.println(e);
  37. if (e instanceof FileNotFoundException)
  38. throw (FileNotFoundException) e;
  39. }
  40. }
  41. public TokenList parse(File dir, String files[]) {
  42. struct = new TokenList();
  43. errors = 0;
  44. for (int i = 0; i < files.length; i++) {
  45. getProgram().print("", "Parsing file " + files[i]);
  46. if (!parseFile(dir, files[i]))
  47. errors++;
  48. struct.addToken(new TextToken(FILE_END, files[i], this));
  49. }
  50. TokenList tmp = struct;
  51. struct = null;
  52. this.parseEnd();
  53. return tmp;
  54. }
  55. public boolean parseFile(File dir, String file) {
  56. InputState inputState = null;
  57. try {
  58. FileInputStream fis = new FileInputStream(new File(dir, file));
  59. currentFile = file;
  60. // Create a scanner that reads from the input stream passed to us
  61. inputState = new InputState(fis);
  62. TextLexer lexer = new TextLexer(inputState);
  63. lexer.setFilename(file);
  64. lexer.setTokenObjectClass("de.jplag.ParserToken");
  65. // Create a parser that reads from the scanner
  66. TextParser parser = new TextParser(lexer);
  67. parser.setFilename(file);
  68. parser.parser = this;// Added by Emeric 26.01.05 BAD
  69. // start parsing at the compilationUnit rule
  70. parser.file();
  71. // close file
  72. fis.close();
  73. } catch (Exception e) {
  74. getProgram().addError(" Parsing Error in '" + file +
  75. "' (line " + (inputState != null ? "" + inputState.getLine()
  76. : "") + "):\n " + e.getMessage());
  77. return false;
  78. }
  79. return true;
  80. }
  81. public void add(Token tok) {
  82. ParserToken ptok = (ParserToken) tok;
  83. if (filter != null && filter.contains(tok.getText().toLowerCase()))
  84. return;
  85. struct.addToken(new TextToken(tok.getText(), currentFile, ptok
  86. .getLine(), ptok.getColumn(), ptok.getLength(), this));
  87. }
  88. private boolean runOut = false;
  89. public void outOfSerials() {
  90. if (runOut)
  91. return;
  92. runOut = true;
  93. errors++;
  94. program.print("ERROR: Out of serials!", null);
  95. System.out.println("de.jplag.text.Parser: ERROR: Out of serials!");
  96. }
  97. }