4장 구문(Syntax).

Slides:



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

Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 프로그래밍 언어론 2nd edition Tucker and Noonan 1 장 소 개 A good programming language is a.
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
언어와 문법 (languages, grammar)
자료구조: CHAP 7 트리(1) 순천향대학교 컴퓨터공학과 하 상 호.
컴파일러 입문 제 5 장 Context-Free 문법.
Chapter 9. 컴퓨터설계기초 9-1 머리말 9-2 데이터 처리장치 (Datapath)
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
Compiler Lecture Note, Inroduction to FL theory
Compiler Lecture Note, Inroduction to FL theory
제 4 장 구문 분석.
“자연어처리” 소개 (Natural Language Processing)
제 7 장  LR 파서.
제 1장 C 언어의 소개.
1. 컴파일러 개론 1-1. Compiler 정의 1-2. Language Processing System
Internet Computing KUT Youn-Hee Han
제 4장 프로그래밍 언어의 구문과 구현 기법 4.1 언어 구문 4.2 프로그래밍 언어 구현 기법.
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
제2장 구문(Syntax) Reading Chap 4 © 숙대 창병모.
제3장 시맨틱스(Semantics) Reading Chap 13 © 숙대 창병모.
제 6 장 데이터 타입 6.1 데이터 타입 및 타입 정보 6.2 타입의 용도 6.3 타입 구성자 6.4 사례 연구
프로그래밍 언어론 2004년 가을학기 창 병 모 숙명여대 컴퓨터과학과.
Discrete Math II Howon Kim
2. 형식언어 (Formal Language)
CHAP 7:트리.
강의 #7 트리(Tree).
쉽게 배우는 알고리즘 5장. 검색트리
프로그래밍언어론 2nd edition Tucker and Noonan
4장 어휘 / 구문 분석 (Term project 포함)
오토메타 형식언어 2003년도 제 2학기.
3장 (2) 구문과 의미론 순천향대학교 컴퓨터공학과 하상호.
Ch2-2. VHDL Basic VHDL lexical element VHDL description
장. 문법 구조(Syntax) 컴퓨터공학과 권기태 프로그래밍언어론.
제 9 장  의미 분석과 중간 코드 생성.
제 5장. Context-Free Languages
Tel : Office : 2공학관 408호 오토마타 및 형식언어 김 현 성 Tel : Office : 2공학관 408호
Sung-Hae Jun 자연어 처리의 이해 Sung-Hae Jun
Chapter 7. PUSHDOWN AUTOMATA Exercises
Internet Computing KUT Youn-Hee Han
재귀 혹은 귀납 Recursive or Inductive Definition 집합을 정의하는 방법
Discrete Math II Howon Kim
주요 내용 형식 언어와 문법 정규식과 정규 집합 유한 상태 기계 정규 문법과 유한 상태 기계와 정규집합.
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
Lecture 01: Compiler Overview
학습목표 CFL을 accept하는 오토메타인 pda를 이해 npda와 dpda의 차이를 compiler의 측면에서 학습
adopted from KNK C Programming : A Modern Approach
5. Context-free 문법 5-1. 서 론 5-2. 유도와 유도 트리 5-3. CFG표기법.
4. 어휘 분석(Lexical analysis)
학습목표 Pumping Lemma와 Closure 특성을 통해 CFL와 Language Family간의 관계 이해
프로그래밍 보고서 작성법 순천향대학교 컴퓨터공학과 하 상 호.
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
[INA240] Data Structures and Practice
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Discrete Math II Howon Kim
컴 파 일 러 Compilers.
프로그래밍언어론 2nd edition Tucker and Noonan
3. 정규 언어(Regular Language)
제 5장 변수, 바인딩, 식 및 제어문 5.1 변수 5.6 표현식 5.2 바인딩 5.7 조건문 5.3 선언 5.8 반복문
Discrete Math II Howon Kim
Term Project 수행 안내 2011년 2학기 컴파일러.
4. 어휘 분석(Lexical analysis)
Chapter 5. Context-Free Language Exercises
10. 중간언어의 생성 소 개 문법-지시적 변환 코드 생성 U-코드 번역기.
제14장 자연어 이해 전산정보학과 권혁민 전산정보학과 홍인표.
언어 언어 사람 사람 사람들간의 의사 소통을 위한 수단
Chapter 07 트리.
제5장 디버깅과 추적 문봉근.
For regex_compile function in grep.c
printf("Global Korea\n");
[CPA340] Algorithms and Practice Youn-Hee Han
Presentation transcript:

4장 구문(Syntax)

(프로그래밍) 언어의 구성 어휘구조(Lexical structure) 구문(Syntax) 의미(Semantics) 단어의 구조 구문 구조 문법을 이용해서 기술 Context-free grammar in BNF(Backus-Naur Form) 의미(Semantics) 프로그램의 의미 자연어를 이용한 기술 수학적 기술 operational semantics, denotational semantics axiomatic semantics

4.1 어휘구조(Lexical Structure)

어휘구조 어휘구조(Lexical structure) 토큰(Token) ? 토큰의 종류 프로그래밍 언어를 구성하는 단어의 구조 프로그래밍 언어를 구성하는 단어의 이름 토큰의 종류 식별자(identifier) X24, balance, putchar 정수(integer) 12, 350 키워드(keyword) if, while, …

토큰 설계 언어의 토큰 정의 토큰 패턴 예 언어의 의미 있는 모든 단어를 정의한다. 토큰을 어떻게 표현할 수 있을까 ? 토큰 패턴 예 Keyword if, for, while, else, … Relop <, <=, =, <>, >, >= Identifier 문자로 시작되는 문자 혹은 숫자들의 스트링 x24, balance, putchar Integer 숫자들의 스트링 314 Literal 문자 스트링 “test string”

예제 예 이 문장을 구성하는 토큰들 주의: (,),=,; 들도 토큰이다. Identifier : i,j,z if (i == j) z = 0; else z = 1; 이 문장을 구성하는 토큰들 Identifier : i,j,z Keyword : if, else Relation op: == Integer : 0, 1 (, ), =, ; 주의: (,),=,; 들도 토큰이다.

어휘 분석(Lexical Analysis) 무엇을 하고자 하는가 ? if (i == j) z = 0; else z = 1; 입력은 다음 문자 스트링이다. \tif (i == j)\n\t\tz = 0;\n\telse\n\t\tz = 1; 문제 입력 스트링을 토큰들로 분리해야 한다.

토큰의 역할 어휘분석기(lexical analyzer) 어휘분석의 출력 입력 스트링을 토큰 구성 규칙에 따라 토큰들로 분류한다. 어휘분석의 출력 토큰들의 스트림 파서(구문분석기)의 입력이 된다.

어휘분석 : 구현 어휘분석 구현은 다음을 해야 한다. 어휘분석기는 “관심 없는” 토큰들을 무시한다. 1. 토큰에 해당하는 부스트링(substring)을 인식한다. 2. 그 토큰의 부스트링을 “값” 혹은 “lexeme”으로 반환한다. 어휘분석기는 “관심 없는” 토큰들을 무시한다. 공백, 주석 등

4.2 구문 및 문법

구문(Syntax) 프로그래밍 언어의 구문구조는 어떻게 표현할 수 있을까 ?

문맥-자유 문법(Context-free Grammar) 프로그래밍 언어의 구문구조 자기호출 구조를 갖는다. 문장 S는 if EXPR then S else S while EXPR do S … 문맥-자유 문법 이러한 자기호출 구조를 자연스럽게 표현할 수 있다.

예제 if-then-else 문 단순 수식 S  if E then S else S | if E then S | others E  E * E | E + E | (E) | N N  N D | D D  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

CFG A CFG consists of: Notational convention a set of terminals T a set of non-terminals N a start symbol S (one of the non-terminals) a set of productions X  Y1 Y2 … Yn where X  N and Yi  T N  {} Notational convention non-terminals are written upper-case terminals are written lower-case

CFG에 의해 정의되는 언어 생성 규칙 X  Y1 Y2 … Yn 터미널 심볼 핵심 아이디어 대치할 규칙이 없으므로 일단 생성되면 끝 터미널 심볼은 그 언어의 토큰이다. 핵심 아이디어 1. 시작 심볼 S부터 시작한다. 2. 넌터미널 심볼 X를 생성규칙을 적용하여 Y1 Y2…Yn으로 대치한다. 3. 이 과정을 넌터미널 심볼이 없을 때까지 반복한다.

유도(Derivation) Direct derivation  Derivation * X1 …Xi… Xn  X1 … Xi-1Y1 Y2…Yn Xi+1 … Xn if there is a production Xi  Y1 Y2…Yn Derivation * X1 … Xn * Y1 … Ym if X1 … Xn  …  Y1 … Ym (0 or more direct derivations from X1 … Xn to Y1 … Ym ) The language L(G) of a CFG G {a1 … an | S * a1 … an and every ai is a terminal}

예제 L(G) is the language of a CFG G. Strings of balanced parentheses: S  (S) S   The language is ?

유도 예제 CFG 생성할 스트링: 3 + 15 유도 E  E + E  N + E  D + E  3 + E  … N  N D | D D  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 생성할 스트링: 3 + 15 유도 E  E + E  N + E  D + E  3 + E  …

4.3 파스 트리

유도 및 파스 트리 A sequence of production applications is a derivation. A derivation can be drawn as a tree: S is the tree's root. If the derivation uses production X  Y1 Y2…Yn, X has children Y1,…,Yn.

유도 예제 CFG 생성할 스트링: 3 + 4 * 5 유도 E  E * E | E + E | (E) | N N  N D | D D  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 생성할 스트링: 3 + 4 * 5 유도

파스 트리

유도에 대한 참조(1) A parse tree has terminals at the leaves. non-terminals at the interior nodes. An inorder traversal of the leaves is the original input. The parse tree shows association of operations; 3 + (4 * 5)

유도에 대한 참조(2) 지금까지 좌우선 유도(leftmost derivation)를 각 단계에서 최좌측 넌터미널이 대치되었음 우우선 유도(Rightmost derivation). 3 + 4 * 5 주의 좌우선 유도와 우우선 유도 모두 같은 파스트리를 갖는다. 차이점은 파스트리에 가지가 추가되는 순서이다.

C Grammar in BNF | declaration-specifiers init-declarator-list ‘;’ translation-unit  external-declaration | translation-unit external-declaration external-declaration  function-definition | declaration function-definition  declaration-specifiers declarator declaration-list compound-statement | declaration-specifiers declarator compound-statement | declarator declaration-list compound-statement | declarator compound-statement declaration  declaration-specifiers ‘;’ | declaration-specifiers init-declarator-list ‘;’

C Grammar in BNF init-declarator-list  init-declarator init-declarator  declarator | init-declarator ‘=‘ initializer declarator  pointer direct-declarator | direct-declarator pointer  ‘*’ type-qualifier-list pointer | ‘*’ type-qualifier-list | ‘*’ pointer | ‘*’ direct-declarator  ID | ‘(‘ declarator ‘)’ | direct_declarator ‘[‘ ‘]’ | direct_declarator ‘[‘ constant_expression ‘]’ | direct_declarator ‘(‘ parameter_type_list ‘)’ | direct_declarator ‘(‘ identifier-list ‘)’ | direct_declarator ‘(‘ ‘)’

요약 구문구조 문법을 이용하여 표기 유도(derivation) 파스트리(parse tree) CFG in BNF 좌우선 유도(Leftmost derivation) 우우선 유도(Rightmost derivation) 파스트리(parse tree)

4.4 모호성

모호성(Ambiguity) * 수식을 위한 문법 스트링 3 * 4 + 5 이 스트링은 두 개의 파스트리를 갖는다. E  E * E | E + E | (E) | N 스트링 3 * 4 + 5 이 스트링은 두 개의 파스트리를 갖는다. E + * 5 4 3 3

모호성(2) 모호한 문법(ambiguous grammar) 모호성은 나쁘다 어떤 스트링에 대해 두 개 이상의 좌측 (혹은 우측) 유도를 갖는다. 두 개 이상의 파스 트리를 갖는다. 모호성은 나쁘다 왜 ?

모호성 처리 문법 재작성 예 우선 순위를 적용 모호하지 않도록 재작성 E  E + T | T T  T * F | F F  N | (E) 우선 순위를 적용

모호성 예: The Dangling Else 모호한 문법 S  if E then S | if E then S else S 이 문장에 대한 두 개의 파스 트리 if E1 then if E2 then S1 else S2 if E1 S2 S1 E2

모호성 예 : The Dangling Else 모호하지 않는 문법 E  MATCH_IF | UNMATCH_IF MATCH_IF  if E then MATCH_IF else MATCH_IF UNMATCH_IF  if E then MATCH_IF else UNMATCH_IF | if E then E 앞의 문법과 같은 스트링을 생성한다. 주의 모호성을 다루는 일반적인 규칙은 없다. 모호하지 않는 문법으로 자동적인 변환 방법은 없다.

4.5 EBNF와 구문 다이어그램

EBNF BNF EBNF E  E + T | T T  T * F | F F  N | (E) N  N D | D

구문 다이어그램 구문 다이어그램 각 생성규칙을 다이어그램으로 표현 넌터미널 사각형 터미널 원 화살표 순서 예제 그림 4.11

4.6 파싱 구현

순환-하강 파싱 (recursive-descent parsing) 기본 원리 문법으로부터 직접 파서 프로그램을 만든다. 각 넌터미널 하나의 프로시저(함수,메쏘드)로 구현한다. 프로시저의 동작 생성규칙 우변을 수행하도록 작성한다.

예제 Expr  Term {+Term} 그림 4.12 void Expr(void) { Term( ); while (token == “+”) { match(“+”); Term(); } 그림 4.12 순환-하강 파싱하면서 동시에 수식의 값을 계산

숙제 #2 그림 4.12의 순환-하강 파서 확장 뺄셈(-), 나눗셈(/) 추가 나머지(%)와 거듭제곱(^) 연산 연습문제 4.12, 4.20 참고