250 likes | 676 Views
3 장 . 문법 구조 (Syntax). 언어 구문 ( 문법 구조 ). 언어 정의 – 구문 , 의미 . 자연어 정의 , 형식 정의 구문 형식 정의 – BNF, EBNF, 구문 챠트 컴퓨터 – 프로그램을 실행 할 수 있는 알고리즘 + 자료구조 집합 . 하드웨어 컴퓨터 ( 실제 컴퓨터 ) 소프트 웨어 시뮬레이터 컴퓨터 가상 컴퓨터 (virtual computer). 가상의. 가상의. Ada. 운영. 체제. C++. 컴퓨터. 명령어. 컴퓨터. Ada. 번역기. C++.
E N D
3장. 문법 구조(Syntax) 컴퓨터공학과 권기태
언어 구문(문법 구조) • 언어 정의 – 구문, 의미. • 자연어 정의, 형식 정의 • 구문 형식 정의 – BNF, EBNF, 구문 챠트 • 컴퓨터 – 프로그램을 실행 할 수 있는 알고리즘 + 자료구조 집합. • 하드웨어 컴퓨터 (실제 컴퓨터) • 소프트 웨어 시뮬레이터 컴퓨터 • 가상 컴퓨터 (virtual computer) 컴퓨터공학과 권기태
가상의 가상의 Ada 운영 체제 C++ 컴퓨터 명령어 컴퓨터 Ada 번역기 C++ 번역기 가상의 번역기 Assembly 가상의 운영 체제 언어 Cobol 컴퓨터 어셈블러 컴퓨터 Cobol computer 번역기 hardware Lisp 인터프리터 ....... 가상의 Power Lisp 컴퓨터 Builder 인터프리터 가상의 Power Builder 컴퓨터 가상 컴퓨터 고급 언어 프로그래머는 번역기를 가상의 고급 언어 컴퓨터로 간주 컴퓨터공학과 권기태
어휘 구조 • 프로그래밍 언어의 기본 문자 집합 • 알파벳 문자 (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에 적용 컴퓨터공학과 권기태
collating sequence • 언어에 제공된 문자 순서 일반 순서 지킴. 예) 0 < 1< 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 A < B < C < . . . < X < Y < Z 특수 문자 순서 (?) • 코드 체계 따름 (구현시 결정) • 프로그래머 정의 가능 (RPG, Snobol) • 어휘 구조 용어 • 어휘 토큰 • 언어 구성자 • 식별자, 미리 정의 된 식별자, 예약어 컴퓨터공학과 권기태
예약어 (reserved words) • 프로그래밍 언어 어휘를 구성하는 단어나 기호 형태의 문자 알파벳 • 프로그램의 변수 이름으로 사용할 수 없음 • 장점 - 프로그램 가독성 증가, 컴파일러가 기호 테이블을 빠른 시간에 탐색, 구문 에러의 에러 복구가 용이 • 단점 –많은 예약어를 기억하기 어려움, 언어 확장시 새로운 예약어가 확장 이전에 사용했던 프로그램의 식별자와 중복 우려 • 키워드 (keywords) • 변수 이름으로 사용 가능 • FORTRAN, PL/I은 키워드를 사용 IF IF =THEN THEN THEN = ELSE; 컴퓨터공학과 권기태
3.3 문법 구조의 표현 자연언어로 기술된 문장의 분석 => 파싱 컴퓨터공학과 권기태
문법 정의 => 생성 규칙 가능한 파스 트리 컴퓨터공학과 권기태
<identifier>::= <letter>|<identifier><letter>|<identifier><digit> <letter>::=A|B|C|...|X|Y|Z <digit>::=0|1|2|...|8|9 • BNF (Backus-Naur Form) 표기법 • 구문(syntax) 형식을 정의하는 가장 보편적인 표기법 • 한 언어의 구문에 대한 BNF 정의 • 언어의 문장을 생성하는 생성 규칙(Production rule)정의 • 문맥 무관 문법(context-free grammar: 단말기호, 비단말기호,생성규칙,비단말기호인 시작기호로 구성) • 생성 규칙 • 생성 규칙의 왼쪽(정의될 대상), 오른쪽에는 그 대상에 대한 정의가 표현 • BNF 표기법에 의한 식별자(identifier)정의 메타기호 ::= 정의하다 , < > 비단말(nonterminal), | 택일기호 컴퓨터공학과 권기태
ALGOL 60의 BNF 예 for 문의 부분적인 정의 생성 규칙에 의해 생성 가능한 문장 컴퓨터공학과 권기태
식(expression)을 표현하는 문장 식을 표현하는 문법의 예 파스 트리 A + B * C 의 유도 컴퓨터공학과 권기태
<identifier> <identifier>::=<letter>| <identifier><letter>| <identifier><digit> <letter>::=A|B|C|...|X|Y|Z <digit>::=0|1|2|...|8|9 <digit> <identifier> <identifier> <letter> <identifier> <letter> <identifier> <letter> <letter> 1 E S T T • 파스 트리 (parse tree) • 원시 프로그램의 문법을 검사하는 과정에서 내부적으로 생성되는 트리 형태의 자료구조 • 한 표현이 BNF에 의해 작성될 수 있는지 여부를 나타냄 • 예 - 식별자에 대한 BNF 를 통해 다음 TEST1 에 대한 파스 트리 작성 컴퓨터공학과 권기태
모호한 문법(ambiguous grammar) : 동일한 문장에 대해서 두 가지 서로 다른 파스 트리가 가능한 문법 컴퓨터공학과 권기태
if-then-else 다음 문장의 의미는? 모호한 문법 두 개의 파스 트리 컴퓨터공학과 권기태
else를 가장 내부의 if와 결합시키는 모호하지 않은 문법 파스 트리 컴퓨터공학과 권기태
EBNF (Extened Backus-Naur Form) 표기법 • BNF 표기법을 확장하여 보다 읽기 쉽고, 간단하게 표현된 표기법 • BNF보다 추가된 특수한 의미를 갖는 EBNF의 메타 기호 • - 반복 : { }, { }07 0 번 이상 반복 • - 선택 : [ ] 0 또는 1번 선택 • - { }, [ ], |, ( ), ::=와 같은 메타 기호를 언어의 terminal로 사용하는 경우 • ‘|’, ‘::=‘ 와 같이 인용부호로 묶어 표현 컴퓨터공학과 권기태
<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 • EBNF (Extened Backus-Naur Form) 표기법 - subpascal 시작부에 대한 EBNF 표기 컴퓨터공학과 권기태
X B • 구문 챠트 (syntax chart) • 구문 챠트는 그 형태가 순서도와 유사 • 구문 챠트는 EBNF 와 일대일 대응 • - 다시 정의될 대상은 네모칸으로 단말 기호는 원이나 타원형으로 표시 • 이들 사이는 화살표로 연결 - 단말 x - 비단말 B 컴퓨터공학과 권기태
1 2 A A . . . n X1 X2 Xn ... A X1 X2 Xn ... A • BNF로부터 구문 챠트 유도 - A ::= X1X2 ...Xn ① Xi가 비단말 기호인 경우 ② Xi가 단말기호인 경우 - A ::= α1|α2| |αn α1,α2, ...αn 가 비단말일 경우 ... 컴퓨터공학과 권기태
1 A 1 A A • 구문 챠트 유도(계속) • EBNF A ::= {α} • EBNF A ::= [α] • EBNF A ::= (α1|α2)β 컴퓨터공학과 권기태
구문(SYNTAX) 언어의 신뢰성에 영향 • FORTRAN • PL/1 3.9 문법 구조와 프로그램의 신뢰성 2.6의 오류(. 대신 , 사용해야 함) DO10I에 2.6 배정으로 인식 DO 10 I = 2.6 A(I) = B + C(I) 10 CONTINUE 다중배정문의 의미(A와 B에 C값 저장) (B = C)의 결과를 A에 저장하는 문장으로 인식 A = B = C 컴퓨터공학과 권기태
Pascal의 변수 선언 구문 챠트 => 두 번째 선언문이 잘못됨 컴퓨터공학과 권기태