23
컴컴컴컴컴컴 컴컴컴 컴컴컴컴컴컴컴컴 1 3 컴 . 컴컴 컴컴 (Syntax)

3 장 . 문법 구조 (Syntax)

Embed Size (px)

DESCRIPTION

3 장 . 문법 구조 (Syntax). 언어 구문 ( 문법 구조 ). 언어 정의 – 구문 , 의미 . 자연어 정의 , 형식 정의 구문 형식 정의 – BNF, EBNF, 구문 챠트 컴퓨터 – 프로그램을 실행 할 수 있는 알고리즘 + 자료구조 집합 . 하드웨어 컴퓨터 ( 실제 컴퓨터 ) 소프트 웨어 시뮬레이터 컴퓨터 가상 컴퓨터 (virtual computer). 가상의. 가상의. Ada. 운영. 체제. C++. 컴퓨터. 명령어. 컴퓨터. Ada. 번역기. C++. - PowerPoint PPT Presentation

Citation preview

Page 1: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 1

3 장 . 문법 구조 (Syntax)3 장 . 문법 구조 (Syntax)

Page 2: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 2

언어 정의 – 구문 , 의미 .•자연어 정의 , 형식 정의•구문 형식 정의 – BNF, EBNF, 구문 챠트

컴퓨터 – 프로그램을 실행 할 수 있는 알고리즘 + 자료구조 집합 .•하드웨어 컴퓨터 ( 실제 컴퓨터 )

•소프트 웨어 시뮬레이터 컴퓨터•가상 컴퓨터 (virtual computer)

언어 구문 ( 문법 구조 )

Page 3: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 3

computerhardware

운영 체제

PowerBuilder

인터프리터

Cobol번역기

운영 체제명령어번역기 C++

번역기

.......

Ada번역기

어셈블러

Lisp인터프리터

가상의Cobol컴퓨터

가상의 C++컴퓨터

가상의Ada컴퓨터

가상의Assembly언어컴퓨터

가상의PowerBuilder컴퓨터

가상의Lisp 컴퓨터

가상 컴퓨터고급 언어 프로그래머는 번역기를 가상의 고급 언어 컴퓨터로 간주

Page 4: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 4

어휘 구조 프로그래밍 언어의 기본 문자 집합 알파벳 문자 (A - Z) 26 개 + 아라비아 숫자 (0 - 9) 10 개 예 ) Fortran : 기본 문자 집합 + 13 개의 특수문자 (+ + - * / ( ) , . $ ‘ : 공백 ) Algol 60 : 알파벳 대소문자 52 개 + 아라비아 숫자 10 개 + 28 개의 특수문자

문자 코드 체계•EBCDIC (Extended Binary Coded Decimal Interchange Code) - IBM 표준 , 8 비트 조합 코드 • ASCII (American Standard Code for Information Interchange) - ANSI 표준 , 7 비트 조합 코드 (128 개의 문자 표현 ) - 영문자 대소문자 52 개 + 숫자 10 개 + 33 개의 특수문자 +33 개의 제어문자•유니 코드 (Uni code)

• 16 bit• ISO 표준 규격• Java 에 적용

Page 5: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 5

• collating sequence– 언어에 제공된 문자 순서 일반 순서 지킴 . 예 ) 0 < 1< 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 A < B < C < . . . < X < Y < Z

특수 문자 순서 (?)– 코드 체계 따름 ( 구현시 결정 )

• 프로그래머 정의 가능 (RPG, Snobol)

• 어휘 구조 용어– 어휘 토큰– 언어 구성자– 식별자 , 미리 정의 된 식별자 , 예약어

Page 6: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 6

예약어 (reserved words) • 프로그래밍 언어 어휘를 구성하는 단어나 기호 형태의 문자 알파벳

• 프로그램의 변수 이름으로 사용할 수 없음

• 장점 - 프로그램 가독성 증가 , 컴파일러가 기호 테이블을 빠른

시간에 탐색 , 구문 에러의 에러 복구가 용이

• 단점 – 많은 예약어를 기억하기 어려움 , 언어 확장시 새로운 예약어가

확장 이전에 사용했던 프로그램의 식별자와 중복 우려

키워드 (keywords) • 변수 이름으로 사용 가능

• FORTRAN, PL/I 은 키워드를 사용

IF IF =THEN THEN

THEN = ELSE;

Page 7: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 7

3.3 문법 구조의 표현자연언어로 기술된 문장의 분석 => 파싱

Page 8: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 8

문법 정의 => 생성 규칙

가능한 파스 트리

Page 9: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 9

<identifier> ::= <letter>| <identifier><letter> | <identifier><digit><letter> ::=A | B | C | ... | X | Y | Z<digit> ::=0 | 1 | 2 | ... | 8 | 9

메타기호 ::= 정의하다 , < > 비단말 (nonterminal), | 택일기호

• BNF (Backus-Naur Form) 표기법– 구문 (syntax) 형식을 정의하는 가장 보편적인 표기법– 한 언어의 구문에 대한 BNF 정의

• 언어의 문장을 생성하는 생성 규칙 (Production rule) 정의• 문맥 무관 문법 (context-free grammar: 단말기호 , 비단말기호 , 생성규칙 ,

비단말기호인 시작기호로 구성 )

– 생성 규칙• 생성 규칙의 왼쪽 ( 정의될 대상 ), 오른쪽에는 그 대상에 대한 정의가 표현

– BNF 표기법에 의한 식별자 (identifier) 정의

Page 10: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 10

ALGOL 60 의 BNF 예for 문의 부분적인 정의

생성 규칙에 의해 생성 가능한 문장

Page 11: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 11

식 (expression) 을 표현하는 문장식을 표현하는 문법의 예

A + B * C 의 유도

파스 트리

Page 12: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 12

파스 트리 (parse tree)

• 원시 프로그램의 문법을 검사하는 과정에서 내부적으로 생성되는 트리 형태의 자료구조

• 한 표현이 BNF 에 의해 작성될 수 있는지 여부를 나타냄

• 예 - 식별자에 대한 BNF 를 통해 다음 TEST1 에 대한 파스 트리 작성

<identifier> ::=<letter>| <identifier><letter> | <identifier><digit><letter> ::=A | B | C | ... | X | Y | Z<digit> ::=0 | 1 | 2 | ... | 8 | 9

<identifier>

<identifier> <digit>

<identifier> <letter>

<identifier> <letter>

<identifier> <letter>

<letter>

T E S T 1

Page 13: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 13

모호한 문법 (ambiguous grammar) : 동일한 문장에 대해서 두 가지 서로 다른 파스 트리가 가능한 문법

Page 14: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 14

if-then-else다음 문장의 의미는 ?

모호한 문법

두 개의 파스 트리

Page 15: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 15

else 를 가장 내부의 if 와 결합시키는 모호하지 않은 문법

파스 트리

Page 16: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 16

EBNF (Extened Backus-Naur Form) 표기법

• BNF 표기법을 확장하여 보다 읽기 쉽고 , 간단하게 표현된 표기법

• BNF 보다 추가된 특수한 의미를 갖는 EBNF 의 메타 기호

- 반복 : { }, { }07 0 번 이상 반복

- 선택 : [ ] 0 또는 1 번 선택

- { }, [ ], |, ( ), ::= 와 같은 메타 기호를 언어의 terminal 로 사용하는 경우 ‘|’, ‘::=‘ 와 같이 인용부호로 묶어 표현

Page 17: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 17

EBNF (Extened Backus-Naur Form) 표기법

- subpascal 시작부에 대한 EBNF 표기

<subpascal> ::=program <ident>; <block> .<block> ::=[<const_dcl>][<var_dcl>]{<proc_dcl>} <compound-st><const_dcl> ::=const <ident> = <number> { ; <ident> = <number> } ;<var_dcl> ::=var <ident_list> : <type>{ ; <ident_list> : <type> } ;<ident_list> ::=<ident> {,<ident>} <proc_dcl> ::=procedure <ident>['('<formal_param>')']; <block>;<compound-st> ::=begin <statement> { ; <statement>} end

Page 18: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 18

구문 챠트 (syntax chart)

• 구문 챠트는 그 형태가 순서도와 유사

• 구문 챠트는 EBNF 와 일대일 대응

- 다시 정의될 대상은 네모칸으로 단말 기호는 원이나 타원형으로 표시

이들 사이는 화살표로 연결

- 비단말 B

- 단말 xX

B

Page 19: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 19

• BNF 로부터 구문 챠트 유도

- A ::= α1 | α2 | | αn α1,α2, ...αn 가 비단말일 경우

- A ::= X1X2 ...Xn

① Xi 가 비단말 기호인 경우

② Xi 가 단말기호인 경우

...

XnX2X1A ...

A ...X1 X2 Xn

2

1

n

. . .A A

Page 20: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 20

– 구문 챠트 유도 ( 계속 )

• EBNF A ::= {α}

• EBNF A ::= [α]

• EBNF A ::= (α1 | α2)β

A

A

1

A

1

Page 21: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 21

Page 22: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 22

– 구문 (SYNTAX) 언어의 신뢰성에 영향

– FORTRAN

– PL/1

DO 10 I = 2.6 A(I) = B + C(I)10 CONTINUE

DO 10 I = 2.6 A(I) = B + C(I)10 CONTINUE

2.6 의 오류 (. 대신 , 사용해야 함 )DO10I 에 2.6 배정으로 인식

A = B = C A = B = C

다중배정문의 의미 (A 와 B 에 C 값 저장 )(B = C) 의 결과를 A 에 저장하는 문장으로 인식

3.9 문법 구조와 프로그램의 신뢰성

Page 23: 3 장 .  문법 구조 (Syntax)

컴퓨터공학과 권기태프로그래밍언어론 23

Pascal 의 변수 선언

구문 챠트

=> 두 번째 선언문이 잘못됨