lexInJava.txt 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import java.io.*;
  2. import java.util.ArrayList;
  3. import java.util.HashSet;
  4. import java.util.Set;
  5. public class Main {
  6. static int total_line_counter = 0;
  7. static String temp = "";
  8. static ArrayList<String> strings = new ArrayList<String>();
  9. static ArrayList<String> numbers = new ArrayList<String>();
  10. static ArrayList<String> ops = new ArrayList<String>();
  11. public static void main(String[] args) throws IOException {
  12. //
  13. String[] KeyLists = {"auto", "break", "case", "char", "const", "continue", "default", "do", "double", "else", "enum", "extern", "float", "for", "goto", "if", "int", "long", "register", "return", "short", "signed", "sizeof", "static", "struct", "switch", "typedef", "union", "unsigned", "void", "volatile", "while"};
  14. String[] logical = {"&&", "||", "!"};
  15. String[] arithmetic = {"+", "-", "*", "/", "%", "++", "--"};
  16. String[] relational = {"==", "!=", "<", ">", "<=", ">="};
  17. String[] bitwise = {"&", "|", "^", "<<", ">>", "~"};
  18. String[] assgnment = {"="};
  19. Set<String> KeyListsSet = new HashSet<String>();
  20. Set<String> logicalSet = new HashSet<String>();
  21. Set<String> arithmeticSet = new HashSet<String>();
  22. Set<String> relationalSet = new HashSet<String>();
  23. Set<String> bitwiseSet = new HashSet<String>();
  24. Set<String> assgnmentSet = new HashSet<String>();
  25. for (int i = 0; i < KeyLists.length; i++) {
  26. KeyListsSet.add(KeyLists[i]);
  27. }
  28. for (int i = 0; i < logical.length; i++) {
  29. logicalSet.add(logical[i]);
  30. }
  31. for (int i = 0; i < arithmetic.length; i++) {
  32. arithmeticSet.add(arithmetic[i]);
  33. }
  34. for (int i = 0; i < relational.length; i++) {
  35. relationalSet.add(relational[i]);
  36. }
  37. for (int i = 0; i < bitwise.length; i++) {
  38. bitwiseSet.add(bitwise[i]);
  39. }
  40. for (int i = 0; i < assgnment.length; i++) {
  41. assgnmentSet.add(assgnment[i]);
  42. }
  43. //
  44. File file = new File("input_for_lex.c");
  45. File fileOp = new File("output_of_lexer.txt");
  46. FileWriter fileWriter = new FileWriter(fileOp);
  47. BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
  48. String curLine = "";
  49. while (bufferedReader.readLine() != null)
  50. total_line_counter++;
  51. bufferedReader = new BufferedReader(new FileReader(file));
  52. //------------------------------------------------------------------------
  53. while ((curLine = bufferedReader.readLine()) != null) {
  54. for (int i = 0; i < curLine.length(); ) {
  55. if (Character.isLetter(curLine.charAt(i))) {
  56. while (Character.isLetter(curLine.charAt(i)) ||
  57. Character.isDigit(curLine.charAt(i))
  58. ) {
  59. temp += curLine.charAt(i);
  60. i++;
  61. }
  62. strings.add(temp);
  63. System.out.println("IDtemp = " + temp);
  64. //
  65. if (logicalSet.contains(temp)) {
  66. fileWriter.append("Keywords : " + temp + "\n");
  67. } else {
  68. fileWriter.append("Identifier : " + temp + "\n");
  69. }
  70. //
  71. temp = "";
  72. } else if (curLine.charAt(i) == '+' ||
  73. curLine.charAt(i) == '-' ||
  74. curLine.charAt(i) == '*' ||
  75. curLine.charAt(i) == '/' ||
  76. curLine.charAt(i) == '=' ||
  77. curLine.charAt(i) == '<' ||
  78. curLine.charAt(i) == '>') {
  79. temp += curLine.charAt(i);
  80. i++;
  81. ops.add(temp);
  82. System.out.println("OPtemp = " + temp);
  83. //
  84. if (logicalSet.contains(temp)) {
  85. fileWriter.append("Logical Operator : " + temp + "\n");
  86. } else if (arithmeticSet.contains(temp)) {
  87. fileWriter.append("Arithmetic Operator : " + temp + "\n");
  88. } else if (relationalSet.contains(temp)) {
  89. fileWriter.append("Relational Operator : " + temp + "\n");
  90. } else if (bitwiseSet.contains(temp)) {
  91. fileWriter.append("Bitwise Operator : " + temp + "\n");
  92. } else if (assgnmentSet.contains(temp)) {
  93. fileWriter.append("Assignment Operator : " + temp + "\n");
  94. }
  95. //
  96. temp = "";
  97. } else if (Character.isDigit(curLine.charAt(i))) {
  98. while (curLine.charAt(i) == 'e' ||
  99. curLine.charAt(i) == 'E' ||/*
  100. curLine.charAt(i) == '+' ||*/
  101. curLine.charAt(i) == '.' ||
  102. Character.isDigit(curLine.charAt(i))
  103. ) {
  104. temp += curLine.charAt(i);
  105. i++;
  106. }
  107. numbers.add(temp);
  108. fileWriter.append("Integer number : " + temp + "\n");
  109. System.out.println("NUMtemp = " + temp);
  110. temp = "";
  111. } else if (curLine.charAt(i) == '(' ||
  112. curLine.charAt(i) == ')' ||
  113. curLine.charAt(i) == '{' ||
  114. curLine.charAt(i) == '}') {
  115. System.out.println("bracket");
  116. fileWriter.append("Bracket : " + curLine.charAt(i) + "\n");
  117. i++;
  118. } else if (curLine.charAt(i) == ';') {
  119. System.out.println("delimiter");
  120. fileWriter.append("Delimiter : " + curLine.charAt(i) + "\n");
  121. fileWriter.append("End : $\n");
  122. i++;
  123. } else i++;
  124. }
  125. }
  126. fileWriter.close();
  127. //------------------------------------------------------------------------
  128. }
  129. }