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 11
Search
Javier Gonzalez-Sanchez
PRO
December 14, 2023
Programming
0
110
UP Lecture 11
Compilers
Parser II
(202402)
Javier Gonzalez-Sanchez
PRO
December 14, 2023
Tweet
Share
More Decks by Javier Gonzalez-Sanchez
See All by Javier Gonzalez-Sanchez
CSC486 Lecture 11
javiergs
PRO
0
15
CSC486 Lecture 10
javiergs
PRO
0
46
CSC486 Lecture 08
javiergs
PRO
0
50
CSC486 Lecture 07
javiergs
PRO
0
97
CSC486 Lecture 06
javiergs
PRO
0
78
CSC486 Lecture 05
javiergs
PRO
0
68
CSC486 Lecture 04
javiergs
PRO
0
41
CSC486 Lecture 03
javiergs
PRO
0
22
CSC486 Lecture 02
javiergs
PRO
0
24
Other Decks in Programming
See All in Programming
Software Architecture
hschwentner
6
2.1k
2024年のWebフロントエンドのふりかえりと2025年
sakito
3
250
ファインディLT_ポケモン対戦の定量的分析
fufufukakaka
0
730
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
350
Ruby on cygwin 2025-02
fd0
0
150
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.3k
GoとPHPのインターフェイスの違い
shimabox
2
190
2,500万ユーザーを支えるSREチームの6年間のスクラムのカイゼン
honmarkhunt
6
5.3k
Pythonでもちょっとリッチな見た目のアプリを設計してみる
ueponx
1
570
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
9
2.2k
昭和の職場からアジャイルの世界へ
kumagoro95
1
380
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
0
200
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
137
6.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
A Philosophy of Restraint
colly
203
16k
Building Your Own Lightsaber
phodgson
104
6.2k
Rails Girls Zürich Keynote
gr2m
94
13k
Automating Front-end Workflow
addyosmani
1368
200k
Gamification - CAS2011
davidbonilla
80
5.1k
4 Signs Your Business is Dying
shpigford
182
22k
Mobile First: as difficult as doing things right
swwweet
223
9.3k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
It's Worth the Effort
3n
184
28k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Transcript
jgs Compilers Lecture 11: Parser II Dr. Javier Gonzalez-Sanchez
[email protected]
jgs Next
Dr. Javier Gonzalez-Sanchez | Compilers | 3 jgs Programming Assignment
2 Level 3 The complete grammar for our language
Dr. Javier Gonzalez-Sanchez | Compilers | 4 jgs KEYWORD {return,
print} STRING Language Actions Expressions (operators) Instructions Control Structures ARITHMETIC OPERATORS { +, -, *, /, =} LOGIC OPERATORS { &, |, ! } RELATIONAL OPERATORS {<, >, ==, !=} KEYWORD { if, else, while, switch, case } Data INTEGER FLOAT HEXADECIMAL CHAR KEYWORD { void, int, char, string, float, boolean } KEYWORD { true, false } BINARY Delimiter : ; , ( ) { } [ ] Assignment 2 | Language OCTAL IDENTIFIER
Dr. Javier Gonzalez-Sanchez | Compilers | 5 jgs Grammar <PROGRAM>
à '{' <BODY> '}’ <BODY> à {<PRINT>';'|<ASSIGNMENT>';'|<VARIABLE>';’|<WHILE>|<IF>|<RETURN>';'} <ASSIGNMENT> à identifier '=' <EXPRESSION> <VARIABLE> à ('int'|'float'|'boolean'|'char’|'string'|'void')identifier <WHILE> à 'while' '(' <EXPRESSION> ')' <PROGRAM> <IF> à 'if' '(' <EXPRESSION> ')' <PROGRAM> ['else' <PROGRAM>] <RETURN> à 'return' <PRINT> à ’print’ ‘(‘ <EXPRESSION> ‘)’ <EXPRESSION> à <X> {'|' <X>} <X> à <Y> {'&' <Y>} <Y> à ['!'] <R> <R> à <E> {('>'|'<'|'=='|'!=') <E>} <E> à <A> {(’+'|'-’) <A>} <A> à <B> {('*'|'/') <B>} <B> à ['-'] <C> <C> à integer | octal | hexadecimal | binary | true | false | string | char | float | identifier|'(' <EXPRESSION> ')'
Dr. Javier Gonzalez-Sanchez | Compilers | 6 jgs Grammar <PROGRAM>
à '{' <BODY> '}’ <BODY> à {<PRINT>';'|<ASSIGNMENT>';'|<VARIABLE>';’|<WHILE>|<IF>|<RETURN>';'} <ASSIGNMENT> à identifier '=' <EXPRESSION> <VARIABLE> à ('int'|'float'|'boolean'|'char’|'string'|'void')identifier <WHILE> à 'while' '(' <EXPRESSION> ')' <PROGRAM> <IF> à 'if' '(' <EXPRESSION> ')' <PROGRAM> ['else' <PROGRAM>] <RETURN> à 'return' <PRINT> à ’print’ ‘(‘ <EXPRESSION> ‘)’ <EXPRESSION> à <X> {'|' <X>} <X> à <Y> {'&' <Y>} <Y> à ['!'] <R> <R> à <E> {('>'|'<'|'=='|'!=') <E>} <E> à <A> {(’+'|'-’) <A>} <A> à <B> {('*'|'/') <B>} <B> à ['-'] <C> <C> à integer | octal | hexadecimal | binary | true | false | string | char | float | identifier|'(' <EXPRESSION> ')'
jgs New Rules
Dr. Javier Gonzalez-Sanchez | Compilers | 8 jgs Assignment 2
| Code ------------ program(root);
Dr. Javier Gonzalez-Sanchez | Compilers | 9 jgs Assignment 2
| Code 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 | 10 jgs Assignment 2
| Code public static void RULE_BODY() { while (!tokens.get(currentToken).getWord().equals(“}”)) { if (tokens.get(currentToken).getToken().equals(“identifier”)) { RULE_ASSIGNMENT(); if (tokens.get(currentToken).getWord().equals(“;”)) { currentToken++; else error(3); } else if (tokens.get(currentToken).getToken().equals(“int”) | ...) { RULE_VARIABLE(); if (tokens.get(currentToken).getWord().equals(";")) { currentToken++; else error(3); } else if (tokens.get(currentToken).getWord().equals(“while”)) { RULE_WHILE(); } else if (tokens.get(currentToken).getWord().equals(“if”)) { RULE_IF(); } else if (tokens.get(currentToken).getWord().equals(“return”)) { RULE_RETURN(); if (tokens.get(currentToken).getWord().equals(“;”)) { currentToken++; else error(3); } else error(4); } } BODY
Dr. Javier Gonzalez-Sanchez | Compilers | 11 jgs Assignment 2
| Code public static void RULE_ASSIGNMENT() { } ASSIGNMENT
Dr. Javier Gonzalez-Sanchez | Compilers | 12 jgs Assignment 2
| Code public static void RULE_VARIABLE() { } VARIABLE
Dr. Javier Gonzalez-Sanchez | Compilers | 13 jgs Assignment 2
| Code public static void RULE_WHILE() { } WHILE
Dr. Javier Gonzalez-Sanchez | Compilers | 14 jgs Assignment 2
| Code public static void RULE_IF() { } IF
Dr. Javier Gonzalez-Sanchez | Compilers | 15 jgs Assignment 2
| Code public static void RULE_RETURN() { } RETURN
Dr. Javier Gonzalez-Sanchez | Compilers | 16 jgs Assignment 2
| Code public static void RULE_PRINT () { } PRINT
Dr. Javier Gonzalez-Sanchez | Compilers | 17 jgs Assignment 2
| Code public static void RULE_C() { } C
Dr. Javier Gonzalez-Sanchez | Compilers | 18 jgs Questions
Dr. Javier Gonzalez-Sanchez | Compilers | 19 jgs Homework Start
Working on a Parser (version 2)
Dr. Javier Gonzalez-Sanchez | Compilers | 20 jgs Homework Review
Recursion
jgs Compilers Javier Gonzalez-Sanchez, Ph.D.
[email protected]
Spring 2024 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.