CHAPTER 5 TOP-DOWN PARSING SUNG-DONG KIM, DEPT. OF COMPUTER ENGINEERING, HANSUNG UNIVERSITY.

Slides:



Advertisements
Similar presentations
학번 이름 김정현 1차 프로젝트 발표 2D 게임프로그래밍. 목차 1. 게임 컨셉 2. 게임 설명 2/10 3. 개발 범위 4. 개발 일정 5. 자체 평가.
Advertisements

 수학 10- 나  1 학년 2 학기  Ⅰ. 도형의 방정식 1. 평면좌표 (1/24) 두 점 사이의 거리 수업 계획 수업 활동.
제 5 장 구문 정의  프로그래밍 언어의 기본 문자 집합  Alphabet 문자 (A-Z) 26 개 + 아라비아 숫자 (0 - 9) 10 개  예 ) Fortran : 기본 문자 집합 + 13 개의 특수문자 (=+ - * / ( ),. $ ‘ : 공백 ) Algol60.
생활 속의 확률과 진실성 하안북중 1학년 서동조.
언어와 문법 (languages, grammar)
4장 축하중 축하중 부재의 변형을 구하는 방법 지점반력(부정정 문제). 열응력. 응력집중. 비탄성 변형. 잔류응력.
컴파일러 입문 제 7 장 LL 구문 분석.
컴파일러 입문 제 5 장 Context-Free 문법.
광 고 사 항 1. 토요 전도실천 - 일시 : (토) 오후 1시
Chapter 9. 컴퓨터설계기초 9-1 머리말 9-2 데이터 처리장치 (Datapath)
Compiler Lecture Note, Inroduction to FL theory
DS020 오토마타형식언어 Chapter 3. Regular Languages and Regular Grammars
Compiler Lecture Note, Inroduction to FL theory
제 7 장  LR 파서.
제 5 장  하향식 파싱.
기본 컴퓨터 프로그래밍 Lecture #6.
4장 구문(Syntax).
REINFORCEMENT LEARNING
Problems of Finite Difference Method (유한차분법)
제7장 제어구조 I – 식과 문장.
Discrete Math II Howon Kim
2. 형식언어 (Formal Language)
문법과 언어.
프로그래밍언어론 2nd edition Tucker and Noonan
4장 어휘 / 구문 분석 (Term project 포함)
예수님 탄생 목자.박사들 경배 (마2:1-12, 눅 2:1-7).
3장 (2) 구문과 의미론 순천향대학교 컴퓨터공학과 하상호.
자료 구조: Chapter 3 (2)구조체, 포인터
DS020 오토마타형식언어 Chapter 6. Simplification of Context-Free Grammars and Normal Forms Exercises October 16, 2003.
장. 문법 구조(Syntax) 컴퓨터공학과 권기태 프로그래밍언어론.
제 9 장  의미 분석과 중간 코드 생성.
제 5장. Context-Free Languages
재고자산(Inventory)의 평가(2)
Chapter 7. PUSHDOWN AUTOMATA Exercises
Internet Computing KUT Youn-Hee Han
6. 구문 분석 (syntax analysis)
Chapter 2. Finite Automata Exercises
Discrete Math II Howon Kim
주요 내용 형식 언어와 문법 정규식과 정규 집합 유한 상태 기계 정규 문법과 유한 상태 기계와 정규집합.
임베디드 하드웨어 Report.
이산수학 논리∙명제에서 알고리즘까지 √ 원리를 알면 IT가 맛있다 ehanbit.net.
이재상 기본 논리회로와 불의 대수 이재상
2. 형식언어 (Formal Language)
학습목표 CFL을 accept하는 오토메타인 pda를 이해 npda와 dpda의 차이를 compiler의 측면에서 학습
7. LL 구문 분석 7-1. 결정적 구문 분석 7-2. Recursive-descent 파서 7-3. Predictive 파서 7-4. Predictive 파싱 테이블의 구성 7-5. Strong LL(k) 문법과 LL(k)문법.
컴퓨터 개론 및 실습 Dept. Computer Eng. Hankuk University of Foreign Studies
학습목표 Pumping Lemma와 Closure 특성을 통해 CFL와 Language Family간의 관계 이해
김포 한강베네치아 상가분양 3층~5층 오피스텔 226세대 1층~2층 상가 분양문의 : 이효철( )
과학 탐구 토론 대회 1학년 2반 박승원 1학년 5반 권민성.
임베디드 하드웨어 Report.
Discrete Math II Howon Kim
프로그래밍언어론 2nd edition Tucker and Noonan
3. 정규 언어(Regular Language)
약속 November 9th, 2012.
보라 처녀가 잉태하여 아들을 낳을 것이요 그 이름은 임마누엘이라 하리라 (이사야7:14)
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
Discrete Math II Howon Kim
4. 어휘 분석(Lexical analysis)
Chapter 5. Context-Free Language Exercises
요한 계시록 2:12~17 버가모 교회 : 예수님의 모습-좌우에 날썬 검을 가진자 13절-예수님께서 사는 곳을 아신다.
동양의 색채 1.인 도 인더스 강 유역에서 고대(B.C 2000 ~ 3000)의 청동기시대에 문화가 이미 발달하였고, 메소포타미아와 유사하고 이는 신에 관한 것이 많고, 도시계획이 이루어져 있었으며, 이 시대부터 모자이크 타일이나 돌에 의한 다채로운 재료가 사용되었다.
진리 나무 Truth-tree  ∧ ∨ → ↔  =.
하노이 탑 두세요 투노이 탑 주세요 두세요 주세요
제10장 비유동부채 제1절 화폐의 시간가치 제2절 비유동부채의 의의 및 구성 제3절 사채발행과 회계처리
제2장 시스템 공학의 절차.
[CPA340] Algorithms and Practice Youn-Hee Han
Chapter 3. 집합론.
Traditional Methods – Part 1
표준화 이론 표준형 구조나무 표준화 정리  ∧ ∨ → ↔  =.
Presentation transcript:

CHAPTER 5 TOP-DOWN PARSING SUNG-DONG KIM, DEPT. OF COMPUTER ENGINEERING, HANSUNG UNIVERSITY

LL PARSING  Left-to-right scanning & Leftmost derivation  Deterministic parsing  Nondeterministic problem A → α | β | γ  How to do deterministic parsing without backtracking ? A → aα | bβ | cγ (2013-1) Compiler 2

GRAMMAR WITHOUT BACKTRACKING  EX 1 S → aA | bB A → aBb | bBb | cBb B → d | e | f  EX 2 S → AbB | BbB A → aBb | bBb | cBb B → d | e | f (2013-1) Compiler 3

LL(1) GRAMMAR  각 생성규칙을 적용할 때 현재 위치에서 생성되어야 할 터 미널 1 개를 보고 어떤 생성규칙을 적용할지 알 수 있는 결 정적 파싱이 가능한 문법  EX) A → α | β Set of terminals produced on A→α: FIRST(α) Set of terminals produced on A→β: FIRST(β) LL(1) condition: condition for deterministic parsing FIRST(α) ∩ FIRST(β) = ф (2013-1) Compiler 4

LL(2) GRAMMAR  Example grammar S → aAb | aBb | acc A → a | Acc B → b S- 생성규칙을 적용할 때 현재 위치에서 생성되는 첫 번째 문자 는 모두 a 터미널 문자 1 개만 보았을 때 결정적 파싱이 불가능 생성할 문자를 2 개로 확장하여 aa/ab/ac 를 보면 결정적 파싱이 가능  이 문법은 LL(1) 문법이 아니고 LL(2) 문법 (2013-1) Compiler 5

LL(K) GRAMMAR  현재 위치에서 생성해야 할 터미널 k 개를 보고서 적용할 생성규칙을 결정적으로 선택할 수 있는 문법  For A → α | β FIRST k (α) ∩ FIRST k (β) = ф (2013-1) Compiler 6

FIRST & FOLLOW (1)  FIRST(A): set of terminals from nonterminal A  FIRST(α): set of terminals from sentential form α  EX S → AbB | BbB A → aBb | bBb | cBb B → d | e | f FIRST(A) = FIRST(aBb) ∪ FIRST(bBb) ∪ FIRST(cBb) = { a, b, c } FIRST(B) = FIRST(d) ∪ FIRST(e) ∪ FIRST(f) = { d, e, f } FIRST(S) = FIRST(AbB) ∪ FIRST(BbB) = { a, b, c, d, e, f } (2013-1) Compiler 7

FIRST & FOLLOW (2)  EX 4) FIRST for ε-production A → BabA | c B → b | ε  FIRST(ε-production) = {ε} FIRST(B) = FIRST(b) ∪ FIRST(ε) = { b, ε }  Nullable nonterminal From nullable nonterminal, ε can be produced by derivation FIRST(A) = FIRST(BabA) ∪ FIRST(c) = { a, b, c } (2013-1) Compiler 8

FIRST & FOLLOW (3)  First for X→Y 1 Y 2 Y 3 ⋯ Y k ε ∉ FIRST(Y 1 ) : FIRST(Y 1 Y 2 Y 3 ⋯ Y k ) = FIRST(Y 1 ) ε ∈ FIRST(Y 1 ): FIRST(Y 1 Y 2 Y 3 ⋯ Y k ) = { FIRST(Y 1 ) - {ε} ) ∪ FIRST(Y 2 Y 3 ⋯ Y k )  Ring sum operation A ㊉ B = A, if ε ∉ A (A-{ε}) ∪ B, if ε ∊ A  FIRST(Y 1 Y 2 Y 3 ⋯ Y k ) = FIRST(Y 1 ) ㊉ FIRST(Y 2 Y 3 ⋯ Y k ) = FIRST(Y 1 ) ㊉ FIRST(Y 2 ) ㊉... ㊉ FIRST(Y k ) (2013-1) Compiler 9

FIRST & FOLLOW (4)  Grammar S → aBb | Bcb | ε A → aAb | BBd B → b | ε  FIRST(S) =  FIRST(A) =  FIRST(B) = (2013-1) Compiler 10

FIRST & FOLLOW (5)  EX 5) 아래 문법은 결정적 파싱이 가능한가 ? A → BbA | c B → b | ε FIRST(A) = FIRST(BbA) ∪ FIRST(c) = { b, c } FIRST(B) = FIRST(b) ∪ FIRST(ε) = { b, ε } B-production FOLLOW(B) (2013-1) Compiler 11

FIRST & FOLLOW (6)  FOLLOW(B): A → αBβ ε ∉ FIRST(β) : FOLLOW(B) = FIRST(β) ε ∈ FIRST(β): FOLLOW(B) = FOLLOW(B) ∪ FOLLOW(A) β=ε (A→ ε): FOLLOW(B) = FOLLOW(B) ∪ FOLLOW(A) B is starting symbol, FOLLOW(B) = FOLLOW(B) ∪ {'$‘} Nonterminal B 가 생성규칙의 RHS 에서 2 회 이상 발견되는 경우는 각각 FOLLOW(B) 를 구하여 합집합 (2013-1) Compiler 12

FIRST & FOLLOW (7)  Grammar S → aBb | Bcb | ε A → aAb | BBd B → b | ε FIRST(S) = { a, b, c, ε } FIRST(A) = { a, b, d } FIRST(B) = { b, ε } FOLLOW(S) = FOLLOW(A) = FOLLOW(B) = (2013-1) Compiler 13

LEFT RECURSION  Left recursion problem A → Aα | β  Infinite loop: A ⇒ Aα ⇒ Aαα ⇒ Aαα ⇒ Aααα ⇒...  Solution: left recursive  right recursive 문법 A → Aα | β 이 생성하는 스트링 유형은 βα * α * 를 우순환 규칙으로 기술 : A' → α A' | ε  Right recursive rule for βα * A → β A‘ A' → α A' | ε (2013-1) Compiler 14

LEFT FACTORING  A → aB | aC  Left factoring A → aD D → B | C (2013-1) Compiler 15

CHOMSKY NORMAL FORM  CNF: RHS 2 nonterminals 1 terminal  EX: A → BC A → a  Parse tree = binary tree (2013-1) Compiler 16

GREIBACH NORMAL FORM  GNF 는 모든 생성규칙의 RHS 가 터미널로 시작  두 번째 이하는 논터미널들로만 구성  어떤 문법을 기술할 때 현실적으로 모든 생성규칙 들이 GNF 요건을 만족하도록 문법을 기술하기가 어렵다. (2013-1) Compiler 17

LOOKAHEAD(A→Α)  Using FIRST and FOLLOW α ≠ ε 이고, ε ∉ FIRST(α) 인 경우 LOOKAHEAD(A→α) = FIRST(α) α ≠ ε 이고, ε ∊ FIRST(α) 인 경우 LOOKAHEAD(A→α) = ( FIRST(α) - {ε} ) ∪ FOLLOW(A) α = ε 인 경우 LOOKAHEAD(A→ε) = FOLLOW(A) (2013-1) Compiler 18

RECURSIVE-DESCENT PARSER (1)  How to implement Write recursive procedure Left-most derivation for LL(1) For each terminal and nonterminal, write procedure  For A → α |β Selection based on L.A.(A→α) and L.A.(A→β)  L.A.(A→α) ∩ L.A.(A→β) = ф  LL(1) (2013-1) Compiler 19

RECURSIVE-DESCENT PARSER (2)  Procedure for terminal a (2013-1) Compiler 20 void pa() { if (nextsymbol == 'a') nextsymbol = get_nextsymbol(); else error; }

RECURSIVE-DESCENT PARSER (3)  Procedure for nonterminal A (2013-1) Compiler 21 void pA() { case nextsymbol of LOOKAHEAD(A→X 1 X 2 ⋯ X m ): for i:=1 to m do pX i (); LOOKAHEAD(A→Y 1 Y 2 ⋯ Y n ): for i:=1 to n do pY i (); LOOKAHEAD(A→Z 1 Z 2 ⋯ Z r ): for i:=1 to r do pZ i (); otherwise: error; }

RECURSIVE-DESCENT PARSER (4)  main() function Call S() 호출 결과로 모든 입력 스트링이 생성되고 입력 버퍼에 입력 스 트링의 끝 표시인 '$' 만 남아 있으면 파싱 성공 (2013-1) Compiler 22 void main() { nextsymbol = get_nextsymbol(); pS(); if (nextsymbol == '$') accept; else error; }

RECURSIVE-DESCENT PARSER (5)  Stack for recursive descent parser Runtime stack during procedure call (2013-1) Compiler 23

IMPLEMENTATION: EXAMPLE  Grammar A → Ba | c B → bAB | ε  구문 분석 테스트 bcbcbca: babababaa: babcbabca: (2013-1) Compiler 24

RECURSIVE-DESCENT PARSER (6)  Easy & simple implementation  Hard coding for grammar  hardwired method (2013-1) Compiler 25

PREDICTIVE PARSER (1)  Table driven method  parsing table  Stack: leftmost derivation process  Initial stack: starting symbol a + a * a $ E Predictive parser (expand-pop) Predictive parsing table Parse tree (2013-1) Compiler 26

PREDICTIVE PARSER (2)  Predictive parsing table Grammar S → bAb | aB | ε A → aAb | bBa B → b | ε FIRST FIRST(S) = { a, b, ε } FIRST(A) = { a, b } FIRST(B) = { b, ε } FOLLOW FOLLOW(S) = { $ } FOLLOW(A) = { b } FOLLOW(B) = { a, $ } a b $ SABSAB (2013-1) Compiler 27

PREDICTIVE PARSER (3)  More than 2 entries in parsing table: not LL(1) grammar  For non LL(1) grammar: 그 의미에 따라 강제로 하나의 생 성규칙을 선택  deterministic parser (2013-1) Compiler 28