Advertisement
Zavada

Untitled

Jan 7th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. package com.zavada.core;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6.  
  7. import com.zavada.symbol.Token;
  8.  
  9. public class Lexer {
  10.  
  11. private static String[] regex = {
  12. ":(.+?):", //VARIABLE
  13. "(\\d+)?(\\.?\\d+)", //DIGIT LITERAL
  14. "\".*\"", //STRING LITERAL
  15. "[%*+-\\/]", //OPERATOR
  16. "=", //ASSIGNMENT
  17. "P", //PRINT
  18. };
  19.  
  20. public static ArrayList<Token> lex(String in){
  21.  
  22. ArrayList<Token> tokens = new ArrayList<Token>();
  23.  
  24. while(in.trim().length() > 0) {
  25.  
  26. int index = in.length();
  27. String foundRegex = null;
  28. for(String a : regex) {
  29.  
  30. int testIndex = indexOf(Pattern.compile(a),in);
  31.  
  32. if( testIndex < index && testIndex > -1) {
  33. index = testIndex;
  34. foundRegex = a;
  35. }
  36.  
  37. }
  38. System.out.println(in);
  39. Pattern pattern = Pattern.compile(foundRegex);
  40. Matcher matcher = pattern.matcher(in);
  41.  
  42. if(matcher.find()) {
  43. tokens.add(new Token(foundRegex, matcher.group(0)));
  44. }
  45.  
  46. in = in.replaceFirst(foundRegex, "");
  47.  
  48. }
  49.  
  50. return tokens;
  51. }
  52.  
  53. /** @return index of pattern in s or -1, if not found */
  54. public static int indexOf(Pattern pattern, String s) {
  55.  
  56. Matcher matcher = pattern.matcher(s);
  57. return matcher.find() ? matcher.start() : -1;
  58.  
  59. }
  60.  
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement