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
86
CSC305 Summer Lecture 12
javiergs
PRO
0
140
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
77
CSC305 Summer Lecture 06
javiergs
PRO
0
110
Other Decks in Programming
See All in Programming
ユーザーも開発者も悩ませない TV アプリ開発 ~Compose の内部実装から学ぶフォーカス制御~
taked137
0
150
個人軟體時代
ethanhuang13
0
320
機能追加とリーダー業務の類似性
rinchoku
2
1.3k
為你自己學 Python - 冷知識篇
eddie
1
350
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
6
2.4k
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
840
print("Hello, World")
eddie
2
530
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
1
520
ProxyによるWindow間RPC機構の構築
syumai
3
1.2k
TDD 実践ミニトーク
contour_gara
1
290
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
260
Amazon RDS 向けに提供されている MCP Server と仕組みを調べてみた/jawsug-okayama-2025-aurora-mcp
takahashiikki
1
110
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
We Have a Design System, Now What?
morganepeng
53
7.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
The Cult of Friendly URLs
andyhume
79
6.6k
Being A Developer After 40
akosma
90
590k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Become a Pro
speakerdeck
PRO
29
5.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.