Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
UP Lecture 15
Search
Javier Gonzalez-Sanchez
PRO
December 18, 2023
Programming
0
170
UP Lecture 15
Compilers
Parser II
(202503)
Javier Gonzalez-Sanchez
PRO
December 18, 2023
Tweet
Share
More Decks by Javier Gonzalez-Sanchez
See All by Javier Gonzalez-Sanchez
CSC305 Summer Lecture 14
javiergs
PRO
0
40
CSC305 Summer Lecture 13
javiergs
PRO
0
82
CSC305 Summer Lecture 12
javiergs
PRO
0
130
CSC305 Summer Lecture 11
javiergs
PRO
0
61
CSC305 Summer Lecture 10
javiergs
PRO
0
80
CSC305 Summer Lecture 09
javiergs
PRO
0
84
CSC305 Summer Lecture 08
javiergs
PRO
0
54
CSC305 Summer Lecture 07
javiergs
PRO
0
76
CSC305 Summer Lecture 06
javiergs
PRO
0
110
Other Decks in Programming
See All in Programming
The state patternの実践 個人開発で培ったpractice集
miyanokomiya
0
160
AIコーディングAgentとの向き合い方
eycjur
0
250
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
18
9.7k
機能追加とリーダー業務の類似性
rinchoku
0
460
Langfuseと歩む生成AI活用推進
licux
3
320
TROCCO×dbtで実現する人にもAIにもやさしいデータ基盤
nealle
0
400
MLH State of the League: 2026 Season
theycallmeswift
0
210
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
360
為你自己學 Python - 冷知識篇
eddie
1
330
Claude Codeで挑むOSSコントリビュート
eycjur
0
190
Testing Trophyは叫ばない
toms74209200
0
370
Introducing ReActionView: A new ActionView-compatible ERB Engine @ Rails World 2025, Amsterdam
marcoroth
0
320
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
431
66k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Rails Girls Zürich Keynote
gr2m
95
14k
Gamification - CAS2011
davidbonilla
81
5.4k
Documentation Writing (for coders)
carmenintech
73
5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
A Modern Web Designer's Workflow
chriscoyier
696
190k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
800
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Music & Morning Musume
bryan
46
6.8k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
570
Transcript
jgs Compilers Lecture 15: Parser II Dr. Javier Gonzalez-Sanchez
[email protected]
jgs Previously …
Dr. Javier Gonzalez-Sanchez | Compilers | 3 jgs Class Token
Dr. Javier Gonzalez-Sanchez | Compilers | 4 jgs Class Automata
Dr. Javier Gonzalez-Sanchez | Compilers | 5 jgs Class Lexer
:: Your First Project
Dr. Javier Gonzalez-Sanchez | Compilers | 6 jgs Class Main
Dr. Javier Gonzalez-Sanchez | Compilers | 7 jgs Input
jgs Parser
Dr. Javier Gonzalez-Sanchez | Compilers | 9 jgs Class Main
| Next Step
Dr. Javier Gonzalez-Sanchez | Compilers | 10 jgs Class Parser
Dr. Javier Gonzalez-Sanchez | Compilers | 11 jgs Input
Dr. Javier Gonzalez-Sanchez | Compilers | 12 jgs Rules {
0; 1 + 2; 3 * (4 + hello); }
Dr. Javier Gonzalez-Sanchez | Compilers | 13 jgs Homework https://github.com/javiergs/TheParser/
Dr. Javier Gonzalez-Sanchez | Compilers | 14 jgs Homework You
Need your Own Lexer
jgs Next
Dr. Javier Gonzalez-Sanchez | Compilers | 16 jgs 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
Dr. Javier Gonzalez-Sanchez | Compilers | 17 jgs Assignment 2
| Code PROGRAM Program this one
Dr. Javier Gonzalez-Sanchez | Compilers | 18 jgs Assignment 2
| Code METHODS Program this one
Dr. Javier Gonzalez-Sanchez | Compilers | 19 jgs Assignment 2
| Code BODY Program this one
Dr. Javier Gonzalez-Sanchez | Compilers | 20 jgs Assignment 2
| Code PARAMS Program this one
Dr. Javier Gonzalez-Sanchez | Compilers | 21 jgs Assignment 2
| Code PARAMS Program this one
Dr. Javier Gonzalez-Sanchez | Compilers | 22 jgs Assignment 2
| Code public static void RULE_ASSIGNMENT() { } ASSIGNMENT Program this one
Dr. Javier Gonzalez-Sanchez | Compilers | 23 jgs 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
Dr. Javier Gonzalez-Sanchez | Compilers | 24 jgs Parser public
static void RULE_EXPRESSION() { RULE_X(); while (tokens.get(currentToken).getWord().equals(“|”)) { currentToken++; RULE_X(); } } EXPRESSION
Dr. Javier Gonzalez-Sanchez | Compilers | 25 jgs Parser public
static void RULE_X() { RULE_Y(); while (tokens.get(currentToken).getWord().equals(“&”)) { currentToken++; RULE_Y(); } } X
Dr. Javier Gonzalez-Sanchez | Compilers | 26 jgs Parser public
static void RULE_Y() { if (tokens.get(currentToken).getWord().equals(“!”)) { currentToken++; } RULE_R(); } Y
Dr. Javier Gonzalez-Sanchez | Compilers | 27 jgs 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
Dr. Javier Gonzalez-Sanchez | Compilers | 28 jgs Parser public
static void RULE_E() { RULE_A(); while (tokens.get(currentToken).getWord().equals(“-”) | tokens.get(currentToken).getWord().equals(“+”) ) { currentToken++; RULE_A(); } } E
Dr. Javier Gonzalez-Sanchez | Compilers | 29 jgs Parser public
static void RULE_A() { RULE_B(); while (tokens.get(currentToken).getWord().equals(“/”) | tokens.get(currentToken).getWord().equals(“*”) ) { currentToken++; RULE_B(); } } A
Dr. Javier Gonzalez-Sanchez | Compilers | 30 jgs Parser public
static void RULE_B() { if (tokens.get(currentToken).getWord().equals(“-”)) { currentToken++; } RULE_C(); } B
Dr. Javier Gonzalez-Sanchez | Compilers | 31 jgs 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
Dr. Javier Gonzalez-Sanchez | Compilers | 32 jgs Assignment 2
| Code public static void RULE_C() { } C
Dr. Javier Gonzalez-Sanchez | Compilers | 33 jgs Assignment 2
| Code public static void RULE_VARIABLE() { } VARIABLE
Dr. Javier Gonzalez-Sanchez | Compilers | 34 jgs Assignment 2
| Code public static void RULE_WHILE() { } WHILE
Dr. Javier Gonzalez-Sanchez | Compilers | 35 jgs Assignment 2
| Code public static void RULE_IF() { } IF
Dr. Javier Gonzalez-Sanchez | Compilers | 36 jgs Assignment 2
| Code public static void RULE_RETURN() { } RETURN
Dr. Javier Gonzalez-Sanchez | Compilers | 37 jgs Assignment 2
| Code public static void RULE_CALL_METHOD () { } CALL_METHOD
Dr. Javier Gonzalez-Sanchez | Compilers | 38 jgs Assignment 2
| Code public static void RULE_PARAM_VALUES () { } PARAM_VALUES
Dr. Javier Gonzalez-Sanchez | Compilers | 39 jgs Questions
jgs Compilers Javier Gonzalez-Sanchez, Ph.D.
[email protected]
Spring 2025 Copyright. These
slides can only be used as study material for the Compilers course at Universidad Panamericana. They cannot be distributed or used for another purpose.