Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
CSC509 Lecture 15
javiergs
PRO
0
46
CSC305 Lecture 18
javiergs
PRO
0
280
CSC509 Lecture 14
javiergs
PRO
0
220
CSC305 Lecture 17
javiergs
PRO
0
340
CSC305 Lecture 16
javiergs
PRO
0
380
CSC305 Lecture 15
javiergs
PRO
0
250
CSC305 Lecture 14
javiergs
PRO
0
380
CSC509 Lecture 13
javiergs
PRO
0
270
CSC509 Lecture 12
javiergs
PRO
0
310
Other Decks in Programming
See All in Programming
20 years of Symfony, what's next?
fabpot
2
350
AIコーディングエージェント(skywork)
kondai24
0
150
生成AIを利用するだけでなく、投資できる組織へ
pospome
1
250
【CA.ai #3】Google ADKを活用したAI Agent開発と運用知見
harappa80
0
300
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.5k
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
350
AIエージェントを活かすPM術 AI駆動開発の現場から
gyuta
0
370
TypeScript 5.9 で使えるようになった import defer でパフォーマンス最適化を実現する
bicstone
1
1.3k
SwiftUIで本格音ゲー実装してみた
hypebeans
0
110
認証・認可の基本を学ぼう前編
kouyuume
0
190
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
260
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
310
Featured
See All Featured
A better future with KSS
kneath
240
18k
Building an army of robots
kneath
306
46k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Unsuck your backbone
ammeep
671
58k
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.