Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
201506 CSE340 Lecture 11
1. CSE340 - Principles of
Programming Languages
Lecture 11:
Parser Implementation I
Javier Gonzalez-Sanchez
javiergs@asu.edu
BYENG M1-38
Office Hours: By appointment
6. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 6
Parser | Step by Step
For each rule in the grammar {
§ Step 1. left-hand side (new method)
§ Step 2. right-hand side (loops, ifs, call methods)
§ Step 3. identify errors (terminals)
§ Step 4. synchronize errors (first and follow sets)
}
7. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 7
Parser
public class Parser {
private static Vector<Token> tokens;
private static int currentToken;
public static void RULE_PROGRAM () {}
public static void RULE_BODY () {}
public static void RULE_EXPRESSION () {}
public static void RULE_X () {}
public static void RULE_Y () {}
public static void RULE_R () {}
public static void RULE_E () {}
public static void RULE_A () {}
public static void RULE_B () {}
public static void RULE_C () {}
}
8. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 8
Parser
public static void RULE_PROGRAM() {
if (tokens.get(currentToken).getWord().equals(“{”)) {
currentToken++;
else
error(1);
RULE_BODY();
if (tokens.get(currentToken).getWord().equals(“}”))
currentToken++;
else
error(2);
}
PROGRAM
9. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 9
Parser
public static void RULE_BODY() {
while (!tokens.get(currentToken).getWord().equals(“}”)) {
RULE_EXPRESSION();
if (tokens.get(currentToken).getWord().equals(“;”))
currentToken++;
else
error(3);
}
}
BODY
10. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 10
Parser
public static void RULE_EXPRESSION() {
RULE_X();
while (tokens.get(currentToken).getWord().equals(“|”)) {
currentToken++;
RULE_X();
}
}
EXPRESSION
11. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 11
Parser
public static void RULE_X() {
RULE_Y();
while (tokens.get(currentToken).getWord().equals(“&”)) {
currentToken++;
RULE_Y();
}
}
X
12. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 12
Parser
public static void RULE_Y() {
if (tokens.get(currentToken).getWord().equals(“!”)) {
currentToken++;
}
RULE_R();
}
Y
13. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 13
Parser
public static void RULE_R() {
RULE_E();
while ( tokens.get(currentToken).getWord().equals(“<”)
|tokens.get(currentToken).getWord().equals(“>”)
|tokens.get(currentToken).getWord().equals(“==”)
|tokens.get(currentToken).getWord().equals(“!=”)
) {
currentToken++;
RULE_E();
}
}
R
14. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 14
Parser
public static void RULE_E() {
RULE_A();
while (tokens.get(currentToken).getWord().equals(“-”)
| tokens.get(currentToken).getWord().equals(“+”)
) {
currentToken++;
RULE_A();
}
}
E
15. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 15
Parser
public static void RULE_A() {
RULE_B();
while (tokens.get(currentToken).getWord().equals(“/”)
| tokens.get(currentToken).getWord().equals(“*”)
) {
currentToken++;
RULE_B();
}
}
A
16. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 16
Parser
public static void RULE_B() {
if (tokens.get(currentToken).getWord().equals(“-”)) {
currentToken++;
}
RULE_C();
}
B
17. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 17
Parser
public static void RULE_C() {
if (tokens.get(currentToken).getToken().equals(“integer”)) {
currentToken++;
} else if (tokens.get(currentToken).getToken().equals(“identifier”)) {
currentToken++;
} else if (tokens.get(currentToken).getWord().equals(“(”)) {
currentToken++;
RULE_EXPRESSION();
if (tokens.get(currentToken).getWord().equals(“)”)) {
currentToken++;
} else error(4);
}
} else { error (5); }
}
C
18. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 18
Homework
Programming Assignment 2
Level 1
Review and Understand the Source Code
posted in Blackboard. Specially, particularly the use of
DefaultMutableTreeNode)
22. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 22
Homework
Programming Assignment 2
Level 2
Modify the Source Code
to include the rules PROGRAM and BODY, EXPRESSION, X, Y, R
(from Grammar 2)
23. CSE340 - Principles of Programming Languages
Javier Gonzalez-Sanchez
javiergs@asu.edu
Summer 2015
Disclaimer. These slides can only be used as study material for the class CSE340 at ASU. They cannot be distributed or used for another purpose.