| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package de.jplag.text;
- import java.io.File;
- import java.io.FileInputStream;
- import java.util.Hashtable;
- import antlr.Token;
- import de.jplag.AbstractParser;
- import de.jplag.TokenConstants;
- import de.jplag.TokenList;
- public class Parser extends AbstractParser {
- private final Hashtable<String, Integer> table = new Hashtable<>();
- protected int serial = 1; // 0 is FILE_END token
- private TokenList tokens;
- private String currentFile;
- private boolean runOut = false;
- /**
- * Creates the parser.
- */
- public Parser() {
- super();
- }
- public TokenList parse(File directory, String[] files) {
- tokens = new TokenList();
- errors = 0;
- for (String file : files) {
- logger.trace("Parsing file {}", file);
- if (!parseFile(directory, file))
- errors++;
- tokens.addToken(new TextToken(TokenConstants.FILE_END, file, this));
- }
- TokenList tmp = tokens;
- tokens = null;
- return tmp;
- }
- public void add(Token token) {
- ParserToken parserToken = (ParserToken) token;
- tokens.addToken(new TextToken(token.getText(), currentFile, parserToken.getLine(), parserToken.getColumn(), parserToken.getLength(), this));
- }
- public void outOfSerials() {
- if (runOut)
- return;
- runOut = true;
- errors++;
- logger.error("Out of serials!");
- }
- private boolean parseFile(File directory, String file) {
- InputState inputState = null;
- try {
- FileInputStream inputStream = new FileInputStream(new File(directory, file));
- currentFile = file;
- // Create a scanner that reads from the input stream passed to us
- inputState = new InputState(inputStream);
- TextLexer lexer = new TextLexer(inputState);
- lexer.setFilename(file);
- lexer.setTokenObjectClass("de.jplag.text.ParserToken");
- // Create a parser that reads from the scanner
- TextParser parser = new TextParser(lexer);
- parser.setFilename(file);
- parser.parser = this;// Added by Emeric 26.01.05 BAD
- // start parsing at the compilationUnit rule
- parser.file();
- // close file
- inputStream.close();
- } catch (Exception e) {
- logger.error("Parsing Error in '" + file + "' (line " + (inputState != null ? "" + inputState.getLine() : "") + "):\n " + e.getMessage(),
- e);
- return false;
- }
- return true;
- }
- protected Hashtable<String, Integer> getTable() {
- return table;
- }
- }
|