Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.60 KB | None | 0 0
  1. import java.io.IOException;
  2. import java.nio.file.Files;
  3. import java.nio.file.Paths;
  4. import java.util.ArrayList;
  5. import java.util.Iterator;
  6.  
  7. public class Q2 {
  8.    
  9.  
  10.     public enum TokenType {
  11.        
  12.         // Operators
  13.         OP_MULTIPLY ('*', "operator"),
  14.         OP_DIVIDE ('/', "operator"),
  15.         OP_MOD ('%', "operator"),
  16.         OP_ADD ('+', "operator"),
  17.         OP_SUBTRACT ('-', "operator"),
  18.         OP_LESS ('<', "operator"),
  19.         OP_LESSEQUAL ("<=", "operator"),
  20.         OP_GREATER ('>', "operator"),
  21.         OP_GREATEREQUAL (">=", "operator"),
  22.         OP_EQUAL ("==", "operator"),
  23.         OP_NOTEQUAL ("!=", "operator"),
  24.         OP_NOT ('!', "operator"),
  25.         OP_ASSIGN ('=', "operator"),
  26.         OP_AND ("&&", "operator"),
  27.         OP_OR ("||", "operator"),
  28.         OP_DOT ('.', "operator"),
  29.        
  30.         // Symbols
  31.         LEFT_PAREN ('(', "symbol"),
  32.         RIGHT_PAREN (')', "symbol"),
  33.         LEFT_BRACE ('{', "symbol"),
  34.         RIGHT_BRACE ('}', "symbol"),
  35.         LEFT_BRACKET ('[', "symbol"),
  36.         RIGHT_BRACKET (']', "symbol"),
  37.         SEMICOLON (';', "symbol"),
  38.         COLON (':', "symbol"),
  39.         COMMA (',', "symbol"),
  40.        
  41.         // Keywords
  42.         KEYWORD_IF ("if", "keyword"),
  43.         KEYWORD_ELSE ("else", "keyword"),
  44.         KEYWORD_WHILE ("while", "keyword"),
  45.         KEYWORD_RETURN ("return", "keyword"),
  46.         KEYWORD_MAIN ("main", "keyword"),
  47.         KEYWORD_INT ("int", "keyword"),
  48.         KEYWORD_DOUBLE ("double", "keyword"),
  49.         KEYWORD_BOOLEAN ("boolean", "keyword"),
  50.         KEYWORD_STRING ("String", "keyword"),
  51.         KEYWORD_PUBLIC ("public", "keyword"),
  52.         KEYWORD_CLASS ("class", "keyword"),
  53.         KEYWORD_VOID ("void", "keyword"),
  54.         KEYWORD_FOR ("for", "keyword"),
  55.         KEYWORD_CASE ("case", "keyword"),
  56.         KEYWORD_STATIC ("static", "keyword"),
  57.         KEYWORD_BREAK ("break", "keyword"),
  58.         KEYWORD_CONTINUE ("continue", "keyword"),
  59.         KEYWORD_DEFAULT ("default", "keyword"),
  60.        
  61.         // Identifiers and literals
  62.         IDENTIFIER ("identifier", "identifier"),
  63.         INTEGER ("integer", "literal"),
  64.         DOUBLE ("double", "literal"),
  65.         STRING ("string", "literal"),
  66.         BOOLEAN ("boolean", "literal");
  67.        
  68.         String name;
  69.         String type;
  70.        
  71.         char nameCh;
  72.        
  73.         TokenType(String name, String type) {
  74.             this.name = name;
  75.             this.type = type;
  76.         }
  77.        
  78.         TokenType(char nameCh, String type) {
  79.             this.nameCh = nameCh;
  80.             this.type = type;
  81.         }
  82.        
  83.         public String getName() {
  84.             return name;
  85.         }
  86.        
  87.         public char getNameCh() {
  88.             return nameCh;
  89.         }
  90.        
  91.         public String getType() {
  92.             return type;
  93.         }
  94.        
  95.         public static TokenType getToken(String str) {
  96.             for(TokenType t : TokenType.values()) {
  97.                 if(t.getName() != null) {
  98.                     if(t.getName().contentEquals(str)) {}
  99.                     return t;
  100.                 }
  101.                 else if(t.getNameCh() == str.charAt(0)) {
  102.                     return t;
  103.                 }
  104.             }
  105.             return null;
  106.         }
  107.     }
  108.    
  109.     public static void main(String[] args) {
  110.         String prog = "";
  111.         if (args.length > 0) {
  112.             prog = readFile(args[0]);
  113.            
  114.             scan(prog);
  115.         }
  116.         else {
  117.             System.out.println("No arguments found.");
  118.             System.out.println("Please supply directory to .java file as an argument.");
  119.         }
  120.     }
  121.    
  122.     public static String readFile(String fname) {
  123.         String content = null;
  124.        
  125.         try {
  126.             content = new String(Files.readAllBytes(Paths.get(fname)));
  127.         } catch (IOException e) {
  128.             System.out.println("Fail to read a file");
  129.         }
  130.        
  131.         return content;
  132.     }
  133.    
  134.     public static void scan (String prog) {
  135.         String lines[] = prog.split("\n");
  136.        
  137.         int i = 1;
  138.        
  139.         for (String line : lines) {
  140.             processLine(line, i);
  141.             i++;
  142.         }
  143.     }
  144.    
  145.     public static TokenType tokenName(String str) {
  146.         TokenType tokenName = null;
  147.         for(TokenType t : TokenType.values()) {
  148.             if(t.getName().equals(str)) {
  149.                 tokenName = t;
  150.                 return tokenName;
  151.             }
  152.             else if(t.getNameCh() == str.charAt(0)) {
  153.                 tokenName = t;
  154.                 return tokenName;
  155.             }
  156.             else {
  157.                 return TokenType.IDENTIFIER;
  158.             }
  159.         }
  160.         return tokenName;
  161.     }
  162.  
  163.     private static void processLine(String line, int i) {
  164.         tokenizer T = new tokenizer (line);
  165.        
  166.         ArrayList <String> tokens = T.token();
  167.         Iterator<String> itr = tokens.iterator();
  168.        
  169.         while (itr.hasNext()) {
  170.             String str = itr.next();
  171.             System.out.println(i + ", " + str + ", " + TokenType.getToken(str));
  172.         }
  173.        
  174.         System.out.println("");
  175.     }
  176.    
  177.     public static TokenType getOp (char ch) {
  178.         return checkCh(ch, "operator");
  179.     }
  180.    
  181.     public static TokenType getOp (String s) {
  182.         return checkS(s, "operator");
  183.     }
  184.    
  185.     public static TokenType getSymbol (char ch) {
  186.         return checkCh(ch, "symbol");
  187.     }
  188.    
  189.     public static TokenType getKeyword (String s) {
  190.         return checkS(s, "keyword");
  191.     }
  192.    
  193.     public static TokenType checkCh (char ch, String type) {
  194.         for (TokenType value : TokenType.values()) {
  195.             if (value.getType() == type && value.getNameCh() == ch) {
  196.                 return value;
  197.             }
  198.         }
  199.        
  200.         return null;
  201.     }
  202.    
  203.     public static TokenType checkS (String s, String type) {
  204.         for (TokenType value : TokenType.values()) {
  205.             if (value.getType() == type && value.getName() != null) {
  206.                 if (value.getName().equals(s)) {
  207.                     return value;
  208.                 }
  209.             }
  210.         }
  211.        
  212.         return null;
  213.     }
  214.    
  215.     public static boolean isLetter (char ch) {
  216.         return Character.isLetter(ch);
  217.     }
  218.    
  219.     public static boolean isDigit (char ch) {
  220.         return Character.isDigit(ch);
  221.     }
  222.    
  223.     public static boolean isWhiteSpace (char ch) {
  224.         return (ch == ' ' || ch == '\t' || ch == '\n')? true : false;
  225.     }
  226.    
  227.     public static boolean isOp (char ch) {
  228.         for (TokenType value : TokenType.values()) {
  229.             if (value.getType() == "operator" && value.getNameCh() == ch) {
  230.                 return true;
  231.             }
  232.         }
  233.        
  234.         return false;
  235.     }
  236.    
  237.     public static boolean isSymbol (char ch) {
  238.         for (TokenType value : TokenType.values()) {
  239.             if (value.getType() == "symbol" && value.getNameCh() == ch) {
  240.                 return true;
  241.             }
  242.         }
  243.        
  244.         return false;
  245.     }
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement