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)

PPTX
Parsers -
PDF
201506 CSE340 Lecture 13
PPT
Compiler design.ppt
PPT
PARSING.ppt
PPT
Ch2 (1).ppt
PPTX
Syntactic Analysis in Compiler Construction
PDF
Parsers Combinators in Scala, Ilya @lambdamix Kliuchnikov
PDF
Lecture8 syntax analysis_4
PPTX
Syntax_Analysis_Syntax analysis_NLP.pptx
PDF
Combinator parsing
PDF
Theory of automata and formal language lab manual
KEY
Programming Haskell Chapter8
PDF
201506 CSE340 Lecture 14
PPTX
unit2_cdunit2_cdunit2_cdunit2_cdunit2_cd.pptx
PDF
LL Parsing
PDF
New compiler design 101 April 13 2024.pdf
DOCX
CS 280 Fall 2022 Programming Assignment 2 November.docx
PPT
predatory parser left factorial 4-CFGs.ppt
Parsers -
201506 CSE340 Lecture 13
Compiler design.ppt
PARSING.ppt
Ch2 (1).ppt
Syntactic Analysis in Compiler Construction
Parsers Combinators in Scala, Ilya @lambdamix Kliuchnikov
Lecture8 syntax analysis_4
Syntax_Analysis_Syntax analysis_NLP.pptx
Combinator parsing
Theory of automata and formal language lab manual
Programming Haskell Chapter8
201506 CSE340 Lecture 14
unit2_cdunit2_cdunit2_cdunit2_cdunit2_cd.pptx
LL Parsing
New compiler design 101 April 13 2024.pdf
CS 280 Fall 2022 Programming Assignment 2 November.docx
predatory parser left factorial 4-CFGs.ppt
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 19
PDF
201801 CSE240 Lecture 18
PDF
201801 CSE240 Lecture 17
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 11
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 19
201801 CSE240 Lecture 18
201801 CSE240 Lecture 17
201801 CSE240 Lecture 16
201801 CSE240 Lecture 15
201801 CSE240 Lecture 14
201801 CSE240 Lecture 13
201801 CSE240 Lecture 12
201801 CSE240 Lecture 11

Recently uploaded (20)

PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PPTX
Why Generative AI is the Future of Content, Code & Creativity?
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PDF
medical staffing services at VALiNTRY
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PDF
Digital Strategies for Manufacturing Companies
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
System and Network Administraation Chapter 3
PPTX
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
PPTX
history of c programming in notes for students .pptx
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PPTX
Transform Your Business with a Software ERP System
PDF
System and Network Administration Chapter 2
PPTX
Introduction to Artificial Intelligence
PDF
Odoo Companies in India – Driving Business Transformation.pdf
Which alternative to Crystal Reports is best for small or large businesses.pdf
Why Generative AI is the Future of Content, Code & Creativity?
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
medical staffing services at VALiNTRY
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
How to Choose the Right IT Partner for Your Business in Malaysia
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Digital Strategies for Manufacturing Companies
Design an Analysis of Algorithms I-SECS-1021-03
System and Network Administraation Chapter 3
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
history of c programming in notes for students .pptx
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Transform Your Business with a Software ERP System
System and Network Administration Chapter 2
Introduction to Artificial Intelligence
Odoo Companies in India – Driving Business Transformation.pdf

201506 CSE340 Lecture 11

  • 1. CSE340 - Principles of Programming Languages Lecture 11: Parser Implementation I Javier Gonzalez-Sanchez [email protected] 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 [email protected] 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.