Guest User

Untitled

a guest
Jun 18th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. import Lexer.java
  2.  
  3. class Parser {
  4.  
  5. Lexer lexer;
  6. Token token;
  7.  
  8. public Parser(String s){
  9. lexer = new Lexer(s + "$");
  10. token = lexer.nextToken();
  11. }
  12.  
  13. public void run () {
  14. query();
  15. }
  16.  
  17. public void query () {
  18. System.out.println("<Query>");
  19. String val = match(Token.TokenType.KEYWORD);
  20. System.out.println("\t<Keyword>" + val + "</Keyword>"); //SELECT
  21. idList();
  22. String val = match(Token.TokenType.KEYWORD);
  23. System.out.println("\t<Keyword>" + val + "</Keyword>"); //FROM
  24. idList();
  25. String val = match(Token.TokenType.KEYWORD);
  26. System.out.println("\t<Keyword>" + val + "</Keyword>"); //WHERE
  27. condList();
  28. match(Token.TokenType.EOI);
  29. System.out.println("</Query>");
  30. }
  31.  
  32. public void idList () {
  33. System.out.println("\t<IdList>");
  34. String val = match(Token.TokenType.ID);
  35. System.out.println("\t\t<Id>" + val + "</Id>");
  36. while (token.getTokenType() == Token.TokenType.COMMA){
  37. match(Token.TokenType.COMMA);
  38. System.out.println("\t\t<Comma>,</Comma>");
  39. val = match(Token.TokenType.ID);
  40. System.out.println("\t\t<Id>" + val + "</Id>");
  41. }
  42. System.out.println("\t</IdList>");
  43. }
  44.  
  45. public void condList(){
  46. System.out.println("\t<CondList>");
  47. cond();
  48. while (token.getTokenType() == Token.TokenType.KEYWORD){ //AND
  49. String val = match(Token.TokenType.KEWORD);
  50. System.out.println("\t\t<KEYWORD>" + val + "</KEYWORD>");
  51. cond();
  52. }
  53. System.out.println("\t</CondList>");
  54. }
  55.  
  56. public void cond () {
  57. System.out.println("\t\t<Cond>");
  58. String val = match(Token.TokenType.ID);
  59. System.out.println("\t\t\t<Id>" + val + "</Id>");
  60. val = match(Token.TokenType.OPERATOR);
  61. System.out.println("\t\t\t<Operator>" + val + "</Operator>");
  62. term();
  63. System.out.println("\t\t</Cond>");
  64. }
  65.  
  66.  
  67.  
  68. public void term () {
  69. System.out.println("\t\t\t<Term>");
  70. if (token.getTokenType() == Token.TokenType.ID) {
  71. System.out.println("\t\t\t\t<Id>" + token.getTokenValue()
  72. + "</Id>");
  73. } else if (token.getTokenType() == Token.TokenType.INT) {
  74. System.out.println("\t\t\t\t<Int>" + token.getTokenValue()
  75. + "</Int>");
  76. } else if (token.getTokenType() == Token.TokenType.FLOAT) {
  77. System.out.println("\t\t\t\t<Float>" + token.getTokenValue()
  78. + "</Float>");
  79. } else {
  80. System.err.println("Syntax error: expecting an ID, an int, or a float"
  81. + "; saw:"
  82. + Token.typeToString(token.getTokenType()));
  83. System.exit(1);
  84. }
  85. System.out.println("\t\t\t</Term>");
  86. }
  87.  
  88. private String match (Token.TokenType tp) {
  89. String value = token.getTokenValue();
  90. if (token.getTokenType() == tp)
  91. token = lexer.nextToken();
  92. else error(tp);
  93. return value;
  94. }
  95.  
  96. private void error (Token.TokenType tp) {
  97. System.err.println("Syntax error: expecting: " + Token.typeToString(tp)
  98. + "; saw: "
  99. + Token.typeToString(token.getTokenType()));
  100. System.exit(1);
  101. }
  102.  
  103. }
Add Comment
Please, Sign In to add comment