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
67
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
PHPのバージョンアップ時にも役立ったAST
matsuo_atsushi
0
110
Open source software: how to live long and go far
gaelvaroquaux
0
640
AIの力でお手軽Chrome拡張機能作り
taiseiue
0
170
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
11
3.8k
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
350
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
2
270
楽しく向き合う例外対応
okutsu
0
130
一休.com のログイン体験を支える技術 〜Web Components x Vue.js 活用事例と最適化について〜
atsumim
0
510
color-scheme: light dark; を完全に理解する
uhyo
5
380
コミュニティ駆動 AWS CDK ライブラリ「Open Constructs Library」 / community-cdk-library
gotok365
2
130
SwiftUI Viewの責務分離
elmetal
PRO
1
240
Software Architecture
hschwentner
6
2.1k
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
67
4.6k
Optimizing for Happiness
mojombo
376
70k
Producing Creativity
orderedlist
PRO
344
39k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Embracing the Ebb and Flow
colly
84
4.6k
Music & Morning Musume
bryan
46
6.3k
We Have a Design System, Now What?
morganepeng
51
7.4k
Docker and Python
trallard
44
3.3k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
How GitHub (no longer) Works
holman
314
140k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
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.