Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.5k
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
430
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
140
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
230
【CA.ai #3】Google ADKを活用したAI Agent開発と運用知見
harappa80
0
290
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
140
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
120
認証・認可の基本を学ぼう後編
kouyuume
0
180
sbt 2
xuwei_k
0
260
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
120
Integrating WordPress and Symfony
alexandresalome
0
150
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
160
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.7k
Agile that works and the tools we love
rasmusluckow
331
21k
Navigating Team Friction
lara
191
16k
Into the Great Unknown - MozCon
thekraken
40
2.2k
GraphQLとの向き合い方2022年版
quramy
50
14k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
93
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Automating Front-end Workflow
addyosmani
1371
200k
Unsuck your backbone
ammeep
671
58k
Thoughts on Productivity
jonyablonski
73
5k
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.