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

http://github.com/nddrylliog/ooc · Java · 47 lines · 36 code · 11 blank · 0 comment · 7 complexity · 1f0206d2059bd5de4020b2792ec89399 MD5 · raw file

  1. package org.ooc.frontend.parser;
  2. import java.io.IOException;
  3. import org.ooc.frontend.BuildParams;
  4. import org.ooc.frontend.model.NodeList;
  5. import org.ooc.frontend.model.Use;
  6. import org.ooc.frontend.model.tokens.Token;
  7. import org.ooc.frontend.model.tokens.TokenReader;
  8. import org.ooc.frontend.model.tokens.Token.TokenType;
  9. import org.ooc.middle.UseDef;
  10. import org.ubi.CompilationFailedError;
  11. import org.ubi.SourceReader;
  12. public class UseParser {
  13. public static boolean fill(SourceReader sReader, TokenReader reader,
  14. NodeList<Use> uses, BuildParams params) throws CompilationFailedError, IOException {
  15. Token startToken = reader.peek();
  16. if(startToken.type != TokenType.USE_KW) return false;
  17. reader.skip();
  18. StringBuilder sb = new StringBuilder();
  19. while(true) {
  20. Token token = reader.read();
  21. if(token.type == TokenType.LINESEP) {
  22. UseDef useDef = UseDefParser.parse(sb.toString(), sReader, token, params);
  23. uses.add(new Use(useDef, startToken));
  24. break;
  25. }
  26. if(token.type == TokenType.COMMA) {
  27. UseDef useDef = UseDefParser.parse(sb.toString(), sReader, token, params);
  28. uses.add(new Use(useDef, startToken));
  29. sb.setLength(0);
  30. } else {
  31. sb.append(token.get(sReader));
  32. }
  33. }
  34. return true;
  35. }
  36. }