/src/org/ooc/frontend/parser/Parser.java

http://github.com/nddrylliog/ooc · Java · 56 lines · 42 code · 13 blank · 1 comment · 5 complexity · f64f71e855a561084018c87884b1cf0b MD5 · raw file

  1. package org.ooc.frontend.parser;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.List;
  5. import org.ooc.frontend.BuildParams;
  6. import org.ooc.frontend.model.Import;
  7. import org.ooc.frontend.model.Module;
  8. import org.ooc.frontend.model.Tokenizer;
  9. import org.ooc.frontend.model.tokens.Token;
  10. import org.ooc.frontend.model.tokens.TokenReader;
  11. import org.ubi.CompilationFailedError;
  12. import org.ubi.SourceReader;
  13. public class Parser {
  14. protected BuildParams params;
  15. protected Module mainModule;
  16. public Parser(BuildParams params) {
  17. this.params = params;
  18. }
  19. public Module parse(final String path) throws IOException {
  20. final File file = params.sourcePath.getElement(path);
  21. if(file == null) {
  22. throw new CompilationFailedError(null, "File "+path+" not found in sourcePath."
  23. +" sourcePath = "+params.sourcePath);
  24. }
  25. return parse(path, file, null);
  26. }
  27. public Module parse(final String path, final File element, Import imp) throws IOException {
  28. if(params.verbose)
  29. System.out.println("Parsing "+path);
  30. File file = new File(element, path);
  31. final SourceReader sReader = SourceReader.getReaderFromFile(file);
  32. final List<Token> tokens = new Tokenizer().parse(sReader);
  33. final String fullName = path.substring(0, path.lastIndexOf('.'))
  34. .replace(File.separatorChar, '.').replace('/', '.');
  35. final Module module = new Module(fullName, element, sReader);
  36. ModuleParser.cache.put(path, module);
  37. if(imp != null) imp.setModule(module);
  38. ModuleParser.parse(module, fullName, file,
  39. sReader, new TokenReader(tokens), Parser.this);
  40. //new XStream().toXML(module, new FileWriter(file.getName()+".xml"));
  41. return module;
  42. }
  43. }