구문 도표 그리는 방법
Download
Report
Transcript 구문 도표 그리는 방법
제5장
구문 정의
프로그래밍 언어의 기본 문자 집합
Alphabet 문자 (A-Z) 26개 + 아라비아 숫자 (0 - 9) 10개
예) Fortran : 기본 문자 집합 + 13개의 특수문자(=+ - * / ( ) , . $ ‘ : 공백)
Algol60 : 알파벳 대소문자 52개 +Digit 10개 + 28개의 특수문자
(p82 그림 5.1 참조)
문자 코드 체계
EBCDIC(Extended Binary Coded Decimal Interchange Code)
IBM에서 제안, 8비트 조합 코드
ASCII(American Standard Code for Information Interchange)
ANSI에서 제안, 7비트 조합 코드(128개의 문자 표현)
영문자 대소문자 52개 + 숫자 10개 + 33개 특수문자 +33개의 제어문자
정합 순서(collating sequence)
문자 또는 문자열에 대한 일반적인 순서
언어 구현시에 결정, 일반적으로 문자의 bit 조합 표현 순서에 영향
예) 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 , A < B < C < ... < X < Y < Z
구문 정의
예약어(Reserved Words, Key Words)
언어 어휘를 구성하는 단어나 기호 형태의 문자 알파벳
프로그램의 변수 이름으로 사용할 수 없음
장점 : 프로그램 판독성 증가, 컴파일러가 기호 테이블을 빠른 시간에 탐색
단점 : 많은 예약어
기억에 어려움,
언어 확장시 新 예약어와 이전에 사용된 프로그램의 식별자와 중복 우려
구문 정의
BNF 표기법
BNF(Backus-Naur Form) 표기법
구문(syntax) 형식을 정의하는 가장 보편적인 표기법
한 언어의 구문에 대한 BNF 정의
언어의 문장을 생성하는 생성 규칙(production rule) 정의
생성 규칙
생성 규칙의 왼쪽(정의될 대상), 오른쪽에는 그 대상에 대한 정의가 표현
BNF 표기법에 의한 식별자(identifier) 정의 예
<identifier> ::= <letter>| <identifier><letter> | <identifier><digit>
<letter> ::=A | B | C | ... | X | Y | Z
<digit> ::=0 | 1 | 2 | ... | 8 | 9
메타기호 ::= 정의하다 , < > nonterminal, | 택일기호
구문 정의
EBNF(Extended Backus-Naur Form) 표기법
BNF 표기법을 확장하여 보다 읽기 쉽고, 간단하게 표현된 표기법
BNF보다 추가된 특수한 의미를 갖는 EBNF의 메타 기호
반복 : { }, { }07
0 번 이상 반복
선택 : [ ]
0 또는 1번 선택
{ }, [ ], |, ( ), ::=와 같은 메타 기호를 언어의 terminal로 사용하는 경우
‘|’, ‘::=‘ 와 같이 인용부호로 묶어 표현
sub-pascal 시작부에 대한 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
구문 정의
구문 도표(Syntax diagram)
구문 도표
구문 도표는 그 형태가 순서도와 유사
구문 도표는 EBNF 와 일대일 대응
다시 정의될 대상은 네모칸으로 terminal 기호는 원이나 타원형으로 표시
이들 사이는 지시선으로 연결
예:
terminal x
x
nonterminal B
B
구문 정의
구문 도표 그리는 방법
A ::= X1X2 ...Xn
Xi가 nonterminal인 경우
A
X1
X2
...
Xn
x2
...
xn
xi가 terminal인 경우
A
x1
A ::= α1|α2| ...|αn
α1
A
α2
...
αn
α1,α2, …,αn 이 nonterminal일 경우
구문 정의
구문 도표 그리는 방법(계속)
EBNF A ::= { }
A
α
EBNF A ::= [ ]
A
α
A ::= (α1α2)β
α1
β
A
α2
구문 정의
A
x
예제
‘(’
(EBNF 구문도표)
A ::= x |‘(’ B ‘)’
B ::= AC
C ::= {+A}
B
‘)’
B
C
A
C
A
+
(조건)
VN = { A, B, C }
VT = { +, x, (, ) }
A
x
‘(’
‘)’
A
A
+
구문 정의
Sub-pascal 시작부 구문도표
구문 정의
파스 트리(Parse Tree)
파스 트리
원시 프로그램의 문법 검사 과정에서 내부적으로 생성되는 트리 형태의 자료구조
문장 표현이 BNF에 의해 작성될 수 있는지 여부를 나타냄
예 : 식별자에 대한 BNF를 통해 다음 TEST1에 대한 파스 트리 작성
<identifier>
<digit>
<identifier>
<identifier> ::=<letter> |
<identifier><letter> |
<identifier><digit>
<letter> ::=A | B | C | ... | X | Y | Z
<digit> ::=0 | 1 | 2 | ... | 8 | 9
<identifier>
<identifier>
<identifier>
<letter>
<letter>
<letter>
<letter>
T
E
S
T
1
구문 정의
구문과 프로그램 신뢰성(reliability)
구문(syntax)
언어의 신뢰성에 영향
FORTRAN
2.6의 오류 ( . 대신 , 사용해야 함)
DO10I에 2.6 배정으로 인식
DO 10 I = 2.6
A(I) = B + C(I)
10 CONTINUE
PL/I
A=B=C
다중배정문의 의미(A와 B에 C값 저장)
(B equal to C)의 결과를 A에 저장하는
문장으로 인식
현수(dangling) else 문제
중첩된 if 문에서 else는 어떤 if의 else인가?
예제
if c1 then if c2 then S1 else S2
해석
① if c1 then (if c2 then S1 else S2)
② if c1 then (if c2 then S1) else S2
구문 정의
각 언어에서의 dangling else 문제 해결책
Algol 60
① if c1 then begin if c2 then S1 else S2 end
② if c1 then begin if c2 then S1 end else S2
Algol 68
① if c1 then if c2 then S1 else S2 fi fi
② if c1 then if c2 then S1 fi else S2 fi
PL/I
② IF c1 THEN IF c2 THEN S1; ELSE S2;
또는
IF c1 THEN IF c2 THEN S1; ELSE; ELSE S2;
Pascal
② if c1 then begin if c2 then S1 end else S2
또는
if c1 then if c2 then S1 else else S2
※ PL/1과 pascal은 일반적으로 ①의 경우로 해석
Programming Languages
- The end of Chapter 5 -
To Be Continue ...
Copyright, 1999 © H. Y. Kwak, Cheju National University.