Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Lexer.java
- class Parser {
- Lexer lexer;
- Token token;
- public Parser(String s){
- lexer = new Lexer(s + "$");
- token = lexer.nextToken();
- }
- public void run () {
- query();
- }
- public void query () {
- System.out.println("<Query>");
- String val = match(Token.TokenType.KEYWORD);
- System.out.println("\t<Keyword>" + val + "</Keyword>"); //SELECT
- idList();
- String val = match(Token.TokenType.KEYWORD);
- System.out.println("\t<Keyword>" + val + "</Keyword>"); //FROM
- idList();
- String val = match(Token.TokenType.KEYWORD);
- System.out.println("\t<Keyword>" + val + "</Keyword>"); //WHERE
- condList();
- match(Token.TokenType.EOI);
- System.out.println("</Query>");
- }
- public void idList () {
- System.out.println("\t<IdList>");
- String val = match(Token.TokenType.ID);
- System.out.println("\t\t<Id>" + val + "</Id>");
- while (token.getTokenType() == Token.TokenType.COMMA){
- match(Token.TokenType.COMMA);
- System.out.println("\t\t<Comma>,</Comma>");
- val = match(Token.TokenType.ID);
- System.out.println("\t\t<Id>" + val + "</Id>");
- }
- System.out.println("\t</IdList>");
- }
- public void condList(){
- System.out.println("\t<CondList>");
- cond();
- while (token.getTokenType() == Token.TokenType.KEYWORD){ //AND
- String val = match(Token.TokenType.KEWORD);
- System.out.println("\t\t<KEYWORD>" + val + "</KEYWORD>");
- cond();
- }
- System.out.println("\t</CondList>");
- }
- public void cond () {
- System.out.println("\t\t<Cond>");
- String val = match(Token.TokenType.ID);
- System.out.println("\t\t\t<Id>" + val + "</Id>");
- val = match(Token.TokenType.OPERATOR);
- System.out.println("\t\t\t<Operator>" + val + "</Operator>");
- term();
- System.out.println("\t\t</Cond>");
- }
- public void term () {
- System.out.println("\t\t\t<Term>");
- if (token.getTokenType() == Token.TokenType.ID) {
- System.out.println("\t\t\t\t<Id>" + token.getTokenValue()
- + "</Id>");
- } else if (token.getTokenType() == Token.TokenType.INT) {
- System.out.println("\t\t\t\t<Int>" + token.getTokenValue()
- + "</Int>");
- } else if (token.getTokenType() == Token.TokenType.FLOAT) {
- System.out.println("\t\t\t\t<Float>" + token.getTokenValue()
- + "</Float>");
- } else {
- System.err.println("Syntax error: expecting an ID, an int, or a float"
- + "; saw:"
- + Token.typeToString(token.getTokenType()));
- System.exit(1);
- }
- System.out.println("\t\t\t</Term>");
- }
- private String match (Token.TokenType tp) {
- String value = token.getTokenValue();
- if (token.getTokenType() == tp)
- token = lexer.nextToken();
- else error(tp);
- return value;
- }
- private void error (Token.TokenType tp) {
- System.err.println("Syntax error: expecting: " + Token.typeToString(tp)
- + "; saw: "
- + Token.typeToString(token.getTokenType()));
- System.exit(1);
- }
- }
Add Comment
Please, Sign In to add comment