SlideShare a Scribd company logo
CSE340 - Principles of
Programming Languages
Lecture 11:
Parser Implementation I
Javier Gonzalez-Sanchez
javiergs@asu.edu
BYENG M1-38
Office Hours: By appointment
Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 2
Parser
BNF
EBNF
A	
AA	
B
Parser
Grammar
Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 3
Parser | Grammar 1
<EXPRESSION> à <X> {'|' <X>}
<X> à <Y> {'&' <Y>}
<Y> à ['!'] <R>
<R> à <E> {('>'|'<'|'=='|'!=') <E>}
<E> à <A> {(’+'|'-’) <A>}
<A> à <B> {('*'|'/') <B>}
<B> à ['-'] <C>
<C> à integer|
identifier|'(' <EXPRESSION> ')'
Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 4
Parser | Grammar 2
<PROGRAM> à '{' <BODY> '}'
<BODY> à {<EXPRESSION>';'}
<EXPRESSION> à <X> {'|' <X>}
<X> à <Y> {'&' <Y>}
<Y> à ['!'] <R>
<R> à <E> {('>'|'<'|'=='|'!=') <E>}
<E> à <A> {(’+'|'-’) <A>}
<A> à <B> {('*'|'/') <B>}
<B> à ['-'] <C>
<C> à integer|
identifier|'(' <EXPRESSION> ')'
Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 5
Parser | Input and Output
{
0;
1 + 2;
3 * (4 + hello);
}
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)
}
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 () {}
}
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
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
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
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
Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 12
Parser
public static void RULE_Y() {
if (tokens.get(currentToken).getWord().equals(“!”)) {
currentToken++;
}
RULE_R();
}
Y
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
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
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
Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 16
Parser
public static void RULE_B() {
if (tokens.get(currentToken).getWord().equals(“-”)) {
currentToken++;
}
RULE_C();
}
B
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
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)
Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 19
Homework
Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 20
Homework
Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 21
Homework
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)
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.

More Related Content

PDF
201505 CSE340 Lecture 05
PDF
201505 CSE340 Lecture 06
PDF
201506 CSE340 Lecture 07
PDF
201506 CSE340 Lecture 23
PDF
201506 CSE340 Lecture 20
PDF
201506 CSE340 Lecture 21
PDF
201506 CSE340 Lecture 15
PDF
201506 CSE340 Lecture 22
201505 CSE340 Lecture 05
201505 CSE340 Lecture 06
201506 CSE340 Lecture 07
201506 CSE340 Lecture 23
201506 CSE340 Lecture 20
201506 CSE340 Lecture 21
201506 CSE340 Lecture 15
201506 CSE340 Lecture 22

Viewers also liked (20)

PPT
Demonstration Presentation
PDF
201506 CSE340 Lecture 12
PPT
Thirst Upload 800x600 1215534320518707 8
PPT
Team Visit
PDF
OORPT Dynamic Analysis
PDF
Secret Vineyard Animation Bible
PDF
Livre resumes 2007 angeio
PPTX
Eeuwigblijvenleren
PPT
Barya Perception
PPT
악플과 악플의 재생산
PPT
Chapter 11
PPT
2013 cch basic principles ch04
PDF
Login Seminars Blackboard Directions 2009
PPS
Cluster 15
PPSX
open office
PPT
Tax planning introduction fall 2012
PDF
201506 CSE340 Lecture 09
PDF
201506 CSE340 Lecture 16
PDF
201004 - brain computer interaction
Demonstration Presentation
201506 CSE340 Lecture 12
Thirst Upload 800x600 1215534320518707 8
Team Visit
OORPT Dynamic Analysis
Secret Vineyard Animation Bible
Livre resumes 2007 angeio
Eeuwigblijvenleren
Barya Perception
악플과 악플의 재생산
Chapter 11
2013 cch basic principles ch04
Login Seminars Blackboard Directions 2009
Cluster 15
open office
Tax planning introduction fall 2012
201506 CSE340 Lecture 09
201506 CSE340 Lecture 16
201004 - brain computer interaction
Ad

Similar to 201506 CSE340 Lecture 11 (20)

PDF
201506 CSE340 Lecture 13
PDF
201506 CSE340 Lecture 18
PDF
201506 CSE340 Lecture 14
PDF
201506 - CSE340 Lecture 08
PDF
201506 CSE340 Lecture 17
PDF
201707 CSE110 Lecture 08
PDF
201505 CSE340 Lecture 02
PDF
201801 CSE240 Lecture 19
PDF
Transferring Software Testing Tools to Practice (AST 2017 Keynote)
PDF
201707 CSE110 Lecture 05
PDF
201801 CSE240 Lecture 17
PDF
201801 CSE240 Lecture 11
PDF
201505 - CSE340 Lecture 01
PDF
201505 CSE340 Lecture 03
PDF
Mutation @ Spotify
DOCX
Web lab programs
PDF
201707 CSE110 Lecture 04
PDF
201506 CSE340 Lecture 10
PDF
Evolving with Java - How to remain Relevant and Effective
PDF
201707 CSE110 Lecture 07
201506 CSE340 Lecture 13
201506 CSE340 Lecture 18
201506 CSE340 Lecture 14
201506 - CSE340 Lecture 08
201506 CSE340 Lecture 17
201707 CSE110 Lecture 08
201505 CSE340 Lecture 02
201801 CSE240 Lecture 19
Transferring Software Testing Tools to Practice (AST 2017 Keynote)
201707 CSE110 Lecture 05
201801 CSE240 Lecture 17
201801 CSE240 Lecture 11
201505 - CSE340 Lecture 01
201505 CSE340 Lecture 03
Mutation @ Spotify
Web lab programs
201707 CSE110 Lecture 04
201506 CSE340 Lecture 10
Evolving with Java - How to remain Relevant and Effective
201707 CSE110 Lecture 07
Ad

More from Javier Gonzalez-Sanchez (20)

PDF
201804 SER332 Lecture 01
PDF
201801 SER332 Lecture 03
PDF
201801 SER332 Lecture 04
PDF
201801 SER332 Lecture 02
PDF
201801 CSE240 Lecture 26
PDF
201801 CSE240 Lecture 25
PDF
201801 CSE240 Lecture 24
PDF
201801 CSE240 Lecture 23
PDF
201801 CSE240 Lecture 22
PDF
201801 CSE240 Lecture 21
PDF
201801 CSE240 Lecture 20
PDF
201801 CSE240 Lecture 18
PDF
201801 CSE240 Lecture 16
PDF
201801 CSE240 Lecture 15
PDF
201801 CSE240 Lecture 14
PDF
201801 CSE240 Lecture 13
PDF
201801 CSE240 Lecture 12
PDF
201801 CSE240 Lecture 10
PDF
201801 CSE240 Lecture 09
PDF
201801 CSE240 Lecture 08
201804 SER332 Lecture 01
201801 SER332 Lecture 03
201801 SER332 Lecture 04
201801 SER332 Lecture 02
201801 CSE240 Lecture 26
201801 CSE240 Lecture 25
201801 CSE240 Lecture 24
201801 CSE240 Lecture 23
201801 CSE240 Lecture 22
201801 CSE240 Lecture 21
201801 CSE240 Lecture 20
201801 CSE240 Lecture 18
201801 CSE240 Lecture 16
201801 CSE240 Lecture 15
201801 CSE240 Lecture 14
201801 CSE240 Lecture 13
201801 CSE240 Lecture 12
201801 CSE240 Lecture 10
201801 CSE240 Lecture 09
201801 CSE240 Lecture 08

Recently uploaded (20)

PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
top salesforce developer skills in 2025.pdf
PPTX
Reimagine Home Health with the Power of Agentic AI​
PPTX
Transform Your Business with a Software ERP System
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
System and Network Administration Chapter 2
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PDF
Digital Strategies for Manufacturing Companies
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
medical staffing services at VALiNTRY
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
Odoo Companies in India – Driving Business Transformation.pdf
top salesforce developer skills in 2025.pdf
Reimagine Home Health with the Power of Agentic AI​
Transform Your Business with a Software ERP System
wealthsignaloriginal-com-DS-text-... (1).pdf
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
System and Network Administration Chapter 2
VVF-Customer-Presentation2025-Ver1.9.pptx
Digital Strategies for Manufacturing Companies
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
2025 Textile ERP Trends: SAP, Odoo & Oracle
Wondershare Filmora 15 Crack With Activation Key [2025
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Adobe Illustrator 28.6 Crack My Vision of Vector Design
medical staffing services at VALiNTRY
Design an Analysis of Algorithms I-SECS-1021-03
Navsoft: AI-Powered Business Solutions & Custom Software Development

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
  • 2. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 2 Parser BNF EBNF A AA B Parser Grammar
  • 3. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 3 Parser | Grammar 1 <EXPRESSION> à <X> {'|' <X>} <X> à <Y> {'&' <Y>} <Y> à ['!'] <R> <R> à <E> {('>'|'<'|'=='|'!=') <E>} <E> à <A> {(’+'|'-’) <A>} <A> à <B> {('*'|'/') <B>} <B> à ['-'] <C> <C> à integer| identifier|'(' <EXPRESSION> ')'
  • 4. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 4 Parser | Grammar 2 <PROGRAM> à '{' <BODY> '}' <BODY> à {<EXPRESSION>';'} <EXPRESSION> à <X> {'|' <X>} <X> à <Y> {'&' <Y>} <Y> à ['!'] <R> <R> à <E> {('>'|'<'|'=='|'!=') <E>} <E> à <A> {(’+'|'-’) <A>} <A> à <B> {('*'|'/') <B>} <B> à ['-'] <C> <C> à integer| identifier|'(' <EXPRESSION> ')'
  • 5. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 5 Parser | Input and Output { 0; 1 + 2; 3 * (4 + hello); }
  • 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)
  • 19. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 19 Homework
  • 20. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 20 Homework
  • 21. Javier Gonzalez-Sanchez | CSE340 |Summer 2015 | 21 Homework
  • 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.