Advertisement
Ladies_Man

complab5 v1 no restoration

Apr 18th, 2016
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.96 KB | None | 0 0
  1. import javax.print.DocFlavor;
  2. import java.io.File;
  3. import java.util.HashMap;
  4. import java.util.Scanner;
  5.  
  6. /**
  7.  * Created by anthony on 05.04.16.
  8.  */
  9. /*
  10. digraph {
  11.         rankdir = LR
  12.         node [shape = doublecircle]; "1_ID" "2_ID" "3_KEY" "4_ID" "5_ID"
  13.                                      "6_ID" "7_NUM" "8_OP" "9_WS";
  14.         0 [shape = circle]
  15.  
  16.         0 -> "1_ID"            [label = "d"]
  17.         "1_ID" -> "2_ID"       [label = "e"]
  18.         "2_ID" -> "3_KEY"      [label = "f"]
  19.         0 -> "4_ID"            [label = "v"]
  20.         "4_ID" -> "5_ID"       [label = "a"]
  21.         "5_ID" -> "3_KEY"      [label = "r"]
  22.         "5_ID" -> "3_KEY"      [label = "l"]
  23.         0 -> "6_ID"            [label = "a-z\\{d,v}"]
  24.  
  25.         "1_ID" -> "6_ID"       [label = "a-z0-9\\{e}"]
  26.         "2_ID" -> "6_ID"       [label = "a-z0-9\\{f}"]
  27.         "4_ID" -> "6_ID"       [label = "a-z0-9\\{a}"]
  28.         "5_ID" -> "6_ID"       [label = "a-z0-9\\{r,l}"]
  29.         "3_KEY" -> "6_ID"      [label = "a-z0-9"]
  30.  
  31.         "6_ID" -> "6_ID"       [label = "a-z0-9"]
  32.  
  33.         0 -> "7_NUM"           [label = "0-9"]
  34.         "7_NUM" -> "7_NUM"     [label = "0-9"]
  35.  
  36.         0 -> "8_OP"            [label = "["]
  37.         0 -> "8_OP"            [label = "]"]
  38.  
  39.         0 -> "9_WS"            [label = "\\n\\r\\t' '"]
  40.         "9_WS" -> "9_WS"        [label = "\\n\\r\\t' '"]
  41. }
  42. */
  43.  
  44.  
  45.  
  46. public class complab5 {
  47.  
  48.     private class Automata {
  49.         HashMap<Character, Integer> map;
  50.         public String program;
  51.         private Position pos;
  52.         private int state;
  53.  
  54.         public Automata(String program) {
  55.             this.program = program;
  56.             this.pos = new Position(program);
  57.             this.state = 0;
  58.             this.map = new HashMap<>();
  59.             fill_map();
  60.         }
  61.  
  62.         private int get_code(char c) {
  63.             if (c >= '0' && c <= '9')
  64.                 return 7;
  65.             if (']' == c || '[' == c)
  66.                 return 8;
  67.             if (' ' == c || '\n' == c || '\r' == c || '\t' == c)
  68.                 return 9;
  69.  
  70.             switch (c) {
  71.                 case 'd':
  72.                     return 0;
  73.                 case 'e':
  74.                     return 1;
  75.                 case 'f':
  76.                     return 2;
  77.                 case 'v':
  78.                     return 3;
  79.                 case 'a':
  80.                     return 4;
  81.                 case 'r':
  82.                     return 5;
  83.                 case 'l':
  84.                     return 6;
  85.                 default:
  86.                     return 10;
  87.             }
  88.         }
  89.  
  90.         public int next() {
  91.             while (-1 != pos.getCp()) {
  92.                 switch (pos.getCp()) {
  93.                     case 'd':
  94.                         int jump_code = get_code('d');
  95.                         state = table[state][jump_code];
  96.                         return state;
  97.                 }
  98.             }
  99.             return 0;
  100.         }
  101.  
  102.         private String get_state_name(int state) {
  103.             switch (state) {
  104.                 case 1:
  105.                 case 2:
  106.                     return "IDENT";
  107.                 case 3:
  108.                     return "KEYWORD";
  109.                 case 4:
  110.                 case 5:
  111.                 case 6:
  112.                     return "IDENT";
  113.                 case 7:
  114.                     return "NUMBER";
  115.                 case 8:
  116.                     return "OPERATION";
  117.                 case 9:
  118.                     return "WHITESPACE";
  119.                 default:
  120.                     return "ERROR";
  121.             }
  122.         }
  123.  
  124.         public void run() {
  125.             while (-1 != pos.getCp()) {
  126.                 String word = "";
  127.                 boolean final_state = false;
  128.                 state = 0;
  129.                 Position start_pos = pos.copy();
  130.  
  131.                 while (-1 != state && -1 != pos.getCp()) {
  132.  
  133.                     char curr_char = program.charAt(pos.getIndex());
  134.  
  135.                     int jump_code = get_code(curr_char);
  136.  
  137.                     System.out.print("(" + state + ")->");
  138.                     System.out.print("[" + curr_char + "]->");
  139.                     int next_state = table[state][jump_code];
  140.                     //System.out.print("(" + next_state + ")\n");
  141.  
  142.                     if (-1 == next_state) {
  143.                         final_state = true;
  144.                         System.out.print("(-1)\n");
  145.                         break;
  146.                     }
  147.                     word += curr_char;
  148.                     state = next_state;
  149.                     pos.nxt();
  150.                 }
  151.                 if (final_state) {
  152.  
  153.                     String state_name = get_state_name(state);
  154.                     String start = "(" + start_pos.getLine() + ", " +
  155.                             start_pos.getPos() + ")";
  156.                     String follow = "(" + pos.getLine() + ", " +
  157.                             pos.getPos() + ")";
  158.  
  159.                     System.out.println(state + " " + state_name + " " +
  160.                             start + "-" + follow + ": [" + word + "]");
  161.                     continue;
  162.                 }
  163.  
  164.                 pos.nxt();
  165.             }
  166.         }
  167.  
  168.         private void fill_map() {
  169.             for (char i = 'a'; i <= 'z'; i++)
  170.                 map.put(i, 6);
  171.             for (char i = 'A'; i <= 'Z'; i++)
  172.                 map.put(i, 6);
  173.             for (char i = '0'; i <= '9'; i++)
  174.                 map.put(i, 7);
  175.  
  176.             map.put('d', 1);
  177.             map.put('e', 2);
  178.             map.put('f', 3);
  179.             map.put('v', 4);
  180.             map.put('a', 5);
  181.             map.put('r', 3);
  182.             map.put('l', 3);
  183.             map.put('[', 8);
  184.             map.put(']', 8);
  185.             map.put(' ', 9);
  186.             map.put('\n', 9);
  187.             map.put('\r', 9);
  188.             map.put('\t', 9);
  189.         }
  190.  
  191.     }
  192.  
  193.     //var 10
  194.  
  195.     final static int[][] table = {
  196.                 /*  d   e   f   v   a   r   l  num  par  ws  oth*/
  197.     /*  START   */{ 1,  6,  6,  4,  6,  6,  6,  7,   8,   9,  6},
  198.     /*  ID_1    */{ 6,  2,  6,  6,  6,  6,  6,  6,  -1,  -1,  6},
  199.     /*  ID_2    */{ 6,  6,  3,  6,  6,  6,  6,  6,  -1,  -1,  6},
  200.     /*  KEY_3   */{ 6,  6,  6,  6,  6,  6,  6,  6,  -1,  -1,  6},
  201.     /*  ID_4    */{ 6,  6,  6,  6,  5,  6,  6,  6,  -1,  -1,  6},
  202.     /*  ID_5    */{ 6,  6,  6,  6,  6,  3,  3,  6,  -1,  -1,  6},
  203.     /*  ID_6    */{ 6,  6,  6,  6,  6,  6,  6,  6,  -1,  -1,  6},
  204.     /*  NUM_7   */{-1, -1, -1, -1, -1, -1, -1,  7,  -1,  -1, -1},
  205.     /*  OP_8    */{-1, -1, -1, -1, -1, -1, -1, -1,   8,  -1, -1},
  206.     /*  WS_9    */{-1, -1, -1, -1, -1, -1, -1, -1,  -1,   9, -1}
  207.     };
  208.  
  209.     public enum DomainTag {
  210.         START(0),
  211.         ID_1(1),
  212.         ID_2(2),
  213.         KEY_3(3),
  214.         ID_4(4),
  215.         ID_5(5),
  216.         ID_6(6),
  217.         NUM_7(7),
  218.         OP_8(8),
  219.         WS_9(9);
  220.  
  221.         private final int val;
  222.  
  223.         DomainTag(int val) {
  224.             this.val = val;
  225.         }
  226.  
  227.         public int getVal() {
  228.             return val;
  229.         }
  230.     }
  231.  
  232.     /*final static int START = 0;
  233.     final static int ID_1  = 1;
  234.     final static int ID_2  = 2;
  235.     final static int KEY_3 = 3;
  236.     final static int ID_4  = 4;
  237.     final static int ID_5  = 5;
  238.     final static int ID_6  = 6;
  239.     final static int NUM_7 = 7;
  240.     final static int OP_8  = 8;
  241.     final static int WS_9  = 9;*/
  242.  
  243.     public static void main(String []args) {
  244.  
  245.         String text = "";
  246.         Scanner scanner;
  247.  
  248.         try {
  249.             scanner = new Scanner(new File("in.txt"));
  250.         } catch (java.io.FileNotFoundException e) {
  251.             System.out.println(e.toString());
  252.             return;
  253.         }
  254.  
  255.         System.out.println("   1234567890123456789");
  256.         int i = 1;
  257.         while (scanner.hasNextLine()) {
  258.             String line = scanner.nextLine();
  259.             System.out.println(i + " [" + line + "]");
  260.             text += line + "\n";
  261.             i++;
  262.         }
  263.         System.out.println();
  264.  
  265.         Automata auto = new complab5().new Automata(text);
  266.  
  267.         auto.run();
  268.     }
  269. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement