I. 프로그래밍언어의소개 프로그래밍언어론 목차 한국방송통신대학교컴퓨터과학과김진욱교수. 프로그래밍언어란무엇인가?. 프로그래밍언어의특성 프로그래밍언어란무엇인가?. 프로그래밍언어란무엇인가? 언어란무엇인가? 음성또는문자를수단으로사상이나감정을표현하고의사를전달하는수단또는체계 [ 출처 : 민중국어사전 ] 사람의생각하는바를표현하고전달하기위해오랜시간을통해형성된형식적이고의미적인표현방법
프로그래밍언어란무엇인가? 프로그래밍언어란무엇인가? 언어란무엇인가? 언어란무엇인가? 컴퓨터는참멋져요! 컴퓨터는참멋져요! 특히프로그래밍언어는아주매력적이죠. Pardon? 사람의생각하는바를표현하고전달하기위해오랜시간을통해형성된형식적이고의미적인표현방법 사람의생각하는바를표현하고전달하기위해오랜시간을통해형성된형식적이고의미적인표현방법 프로그래밍언어란무엇인가? 프로그래밍언어란무엇인가? 프로그래밍언어란? 프로그래밍언어의정의 부터 5 까지숫자를임의의순서로섞고싶어, 5,, 4, 정의 Shuffle(int start, int end) {. }. Shuffle(, 5); 컴퓨터가읽을수있고사람이읽을수있는형식으로계산 ( 컴퓨터의행동 ) 을서술하는표기체계 컴퓨터에게프로그래머의의사를전달하는방법혹은프로그램을작성하는형식 프로그래밍언어의예 : C, C++, Java, Pascal 등
프로그래밍언어란무엇인가? 프로그래밍언어란무엇인가? 프로그래밍언어론이란? 프로그래밍언어론을배워야하는이유 프로그래밍언어들의공통점과차이점을고찰 현재사용하고있는언어를더잘이해하게됨 프로그래밍언어를설계하기위한기본개념고찰 유용한프로그래밍을구사할수있는능력을증대시킴 프로그래밍언어에대한근본적인이해 프로그래밍언어를선택할수있는능력을증대시킴 4 새로운프로그래밍언어를배우기쉽게해줌 5 새로운프로그래밍언어를설계하기쉽게해줌 프로그래밍언어의특성. 프로그래밍언어의특성 추상화 (abstraction) 란? 바퀴안장핸들기어 핸들 : 좌우회전안장 : 높이조절기어 : 기어변속 속성들의특징적인일부분만을가지고주어진작업이나객체를표현하고, 그들의공통점을추출하여표현하는것
프로그래밍언어의특성 프로그래밍언어의특성 프로그래밍언어에서의추상화란? 프로그래밍언어에서의추상화 부터 5 까지숫자를임의의순서로섞고싶어 프로그래머의의도를추상화하여컴퓨터에게전달하는도구 컴퓨터구조의추상화 정수배열변수임의연산자섞다 Shuffle(int start, int end) {. }. Shuffle(, 5); 기억장치 CPU 자료추상화 문자열 수 탐색트리 대상에따른구분 제어추상화 반복문 조건문 프로시저호출 프로그래밍언어의특성 프로그래밍언어의특성 프로그래밍언어에서의추상화 프로그래밍언어의전형 ( 계산전형 ) 기본적추상화 가장국지적인정보에관한추상화 정보의양에따른구분 구조적추상화 프로그램의구조에대한보다전역적인정보에관한추상화 단위추상화 단위프로그램전체정보에관한추상화 명령형언어 ( 절차언어 ) 함수형언어 ( 적용형언어 ) 논리형언어 ( 선언적언어 ) 4 객체지향언어 순차적인명령의수행을기본개념으로하는언어 변수사용 ( 기억장치읽기 ) 할당문사용 ( 기억장치쓰기 ) Fortran, C, BASIC 등
프로그래밍언어의특성 프로그래밍언어의특성 프로그래밍언어의전형 ( 계산전형 ) 프로그래밍언어의전형 ( 계산전형 ) 명령형언어 ( 절차언어 ) 함수형언어 ( 적용형언어 ) 논리형언어 ( 선언적언어 ) 4 객체지향언어 알려진값들을함수에적용하는방식으로프로그램을기술 변수, 할당문없음 반복적인연산은재귀적함수로기술 명령형언어 ( 절차언어 ) 함수형언어 ( 적용형언어 ) 논리형언어 ( 선언적언어 ) 4 객체지향언어 무엇을하려고하는가를선언하듯기술 반복문, 선택문없음 기호논리학에근거를둠 LISP 등 Prolog 등 프로그래밍언어의특성 프로그래밍언어의특성 프로그래밍언어의전형 ( 계산전형 ) 프로그래밍언어의형식정의 명령형언어 ( 절차언어 ) 함수형언어 ( 적용형언어 ) 논리형언어 ( 선언적언어 ) 4 객체지향언어 자료형과연산으로이루어지는객체에기반 객체 : 실세계에존재하는모든유형및무형의대상 형식정의의필요성 프로그래밍언어의명확한사용체계를알려줌 언어해석의모호함을없애줌 작성된프로그램의동작예측이가능 Ada, C++, Java 등
프로그래밍언어의특성 프로그래밍언어의형식정의 II. 프로그래밍언어의역사및설계기준 구문론 (syntax) 프로그래밍언어의표면적인구조를정의 의미론 (semantics) 프로그램실행시어떠한일이일어나는가를기술 목차. 프로그래밍언어의역사. 프로그래밍언어의설계기준 프로그래밍언어의역사. 프로그래밍언어의역사 최초의프로그래밍언어 다양한프로그래밍언어의출현 간결성, 추상화, 효율성 통합과새로운방향 World Wide Web 프로그래밍
프로그래밍언어의역사 950 년대 : 최초의프로그래밍언어 저급언어 0 c a7 00 06 iconst_0 istore_ goto 0x00 0x06 84 0 0 a iinc 0x0 0x0 0xa 0 ff bipush 0xff a ff fa if_icmplt 0xff 0xfa 0 c a7 00 06 84 0 0 a 0 ff a ff fa a7 ff a7 f ff f goto 0xff 0xf 기계어 : CPU 가이해할수있는일련의 진법의명령코드로작성 프로그래밍언어의역사 950 년대 : 최초의프로그래밍언어 Fortran 최초의고급언어 PARAMETER (N=000,IN=500) REAL T(N),V(N),X(N) PI = 4.0*ATAN(.0) DO 00 I =, N- V(I+) = V(I)-X(I)*DT 00 CONTINUE WRITE (6,999) (T(I),X(I),V(I),I=,N,IN) STOP 999 FORMAT (F6.8) END 어셈블리언어 : 기계어코드를대신할기호나연상기호를사용 IBM 의 John Backus 가중심이되어만든과학응용목적언어 반복문, 배열, 분기개념을처음으로도입 프로그래밍언어의역사 950 년대 : 최초의프로그래밍언어 COBOL 레코드구조를도입 working-storage section. 0 yield-exact pic 9(9)v99 comp. 0 yield-info. 0 start-balance pic 9(9)v9() comp. 0 yield pic 9(9)v9() comp. procedure division. move 0.065 to interest perform varying start-balance from 프로그래밍언어의역사 950 년대 : 최초의프로그래밍언어 Algol 60 연구용및실질적인응용목적의언어 begin rear X; real array A[:0]; integer i; for i:= until 0 do begin X:=A[i]; if X >= A[4] then begin end end 자료구조부분과실행부분을분리 블록개념, 되부름, 값매개변수호출기법을도입 은행이나대규모회사들에서사무처리의목적으로만듦
프로그래밍언어의역사 프로그래밍언어의역사 950 년대 : 최초의프로그래밍언어 950 년대 : 최초의프로그래밍언어 LISP APL 일반적인리스트구조와함수의응용을기본으로하여인공지능분야에폭넓게사용됨 배열과행렬을포함하는수학적연산을쉽게프로그래밍하기위한언어 (defun recursive-list-length (L) "A recursive implement. of list-length." (if (null L) 0 (+ (recursive-list-length (rest L))))) 단점 : 제어구조가없음 프로그래밍언어의역사 프로그래밍언어의역사 960 년대 : 다양한프로그래밍언어의출현 960 년대 : 다양한프로그래밍언어의출현 PL/ : Fortran, Cobol, Algol 60 의장점들만모음병행성, 예외처리기, 기억장소할당기법등을도입 Snobol : 최초의문자열처리및패턴매칭기능언어 Simula 67 : 시뮬레이션을위해설계. 클래스개념을도입하여객체개념과자료추상화를인식시키는데크게기여 Algol 68 : 일반적인자료형시스템을포함임의의제한을두지않는방식의직교언어로변경 BASIC : 시분할시스템을위한간단한언어교육용, 사무처리및가정용으로널리보급
프로그래밍언어의역사 970 년대 : 간결성, 추상화, 효율성 Pascal 작고간결하고효율적 Var SEL : Integer; Begin Return: Clrscr; Writeln('[].PLAY GAME'); Readln(SEL); If SEL = then Begin Goto Return; End; 프로그래밍언어의역사 970 년대 : 간결성, 추상화, 효율성 C int main(void) { int i, j; char a[5]; for (i=0; i<5; i++) { if (*(a+i) == c ) } 컴퓨터구조에대한접근을제공해주는중급프로그래밍언어 교육적인목적의구조적프로그래밍언어 UNIX 운영체제의구현에사용됨 분리컴파일기능, 문자열조작, 입출력기능의효율화등고기능성을갖춤 프로그래밍언어의역사 프로그래밍언어의역사 980 년대 : 통합과새로운방향 980 년대 : 통합과새로운방향 Ada : 자료추상화, 타입메커니즘, 병행처리와예외처리기등의특징을처음으로도입하였으나, 방대한규모와사용상의복잡함때문에대중적인인기를얻지못함 Scheme : LISP 의한버전, 인공지능에대한관심으로많이이용 Prolog : 수학적논리학을적용한프로그래밍언어인공지능분야에서많이쓰임 Modula- : 추상화, 부분적동시처리개념, 내장형시스템프로그래밍을목적으로하드웨어에쉽게접근할수있는기능도추가한다목적언어 Smalltalk : 일관된객체지향언어의순수한모범케이스 C++ : C 언어를확장하여객체지향프로그래밍개념을도입
프로그래밍언어의역사 프로그래밍언어의역사 990 년대 : World Wide Web 프로그래밍 000 년대이후 Java C# : 마이크로소프트 (Microsoft) 에서개발 객체지향개념에기반 Dart : 구글 (Google) 에서개발 중간코드형태로제공되어자바가상기계 (JVM) 위에서수행 Swift : 애플 (Apple) 에서개발 이식성이좋음 프로그래밍언어의설계기준. 프로그래밍언어의설계기준 효율성 일반성, 직교성, 획일성 표현력 4 정확성 5 컴퓨터독립성 6 안전성 7 일관성 8 확장성 9 부분성
프로그래밍언어의설계기준 프로그래밍언어의설계기준. 효율성. 일반성, 직교성, 획일성 목적코드의효율성 : 번역기가효율적인실행코드를생성할수있도록언어설계 ( 최적화 ) 번역의효율성 : 알맞은크기의번역기로빠르게번역 프로그래밍효율성 : 얼마나쉽고빠르게프로그램을작성할수있는가하는것 ( 표현력 ) 일반성 : 밀접한관련이있는여러개념들을일반적인하나의개념으로결합 직교성 : 구성요소들이각각의의미를지닌채결합될수있음구성요소간의상호작용이나문맥으로인한의도하지않은부작용의발생방지 획일성 : 의미적, 형식적으로유사한것들은그유사성이프로그래밍언어내에서일관되게유지되어야함 프로그래밍언어의설계기준 프로그래밍언어의설계기준. 표현력 5. 컴퓨터독립성 프로그래밍언어가복잡한과정이나구조를표현하는데용이함 하드웨어나운영체제에대해독립적인프로그래밍언어 예 : 되부름 (recursion) 예 : Java 4. 정확성 6. 안전성 프로그래밍언어의행위를예측할수있는정의에의존 프로그래밍오류를줄이고쉽게발견하기위함
프로그래밍언어의설계기준 프로그래밍언어의설계기준 7. 일관성 9. 부분성 표준화된특징과개념을갖도록프로그래밍언어를설계 프로그래머가언어에대한적은지식과언어구조에대한일부의이해만있어도효과적으로프로그램을작성할수있도록함 8. 확장성 예 : 프로그래밍을위해해당언어전체를배울필요없음 프로그래머에게언어의특징을추가할수있는권한부여 예 : 새로운자료형정의, 라이브러리에새로운함수추가 III. 프로그래밍언어의구문. 프로그래밍언어의구조 목차. 프로그래밍언어의구조. BNF. EBNF 4. 구문도표
프로그래밍언어의구조 프로그래밍언어의구조 언어의구조 프로그래밍언어의구조 컴퓨터는참멋져요! Shuffle(int start, int end) {. }. Shuffle(, 5); 문자 어휘 구문 컴, 퓨, 터, 는, 참, 멋, 져, 요,! 컴퓨터, 는, 참, 멋지다, 요,! 주부 ( 컴퓨터는 )+ 술부 ( 참멋져요!), 명사 + 은 / 는 / 이 / 가, 문자 어휘 구문 S, h, u, f, l, e, (, i, n,, ), {, },, 5, ; Shuffle, (, int, start, end, ), {, },, 5, ; 함수명 +(+ 인자 +)+{+ 함수body+}, 자료형 + 변수, 프로그래밍언어의구조 프로그래밍언어의구조 프로그래밍언어의구조 프로그래밍언어의구조 Shuffle(int start, int end) {. }. Shuffle(, 5); 5 68 75 66 66 6C 65 8 69 6E 74 0 7 74 6 7 74 C 0 69 6E 74 0 65 6E 64 9 0D 7B Shuffle(int start, int end) {. }. Shuffle(, 5); 문자 : 영어알파벳과아라비아숫자를근간으로작성 어휘 ( 컴퓨터내부적으로는 ASCII 코드로변환 ) 구문 ASCII: American Standard Code for Information Interchange 문자 : 영어알파벳과아라비아숫자를근간으로작성 어휘 : 프로그래밍언어문자로구성된단어, 토큰 구문: 프로그래밍언어로프로그램을작성하는규칙
프로그래밍언어의구조 프로그래밍언어의구조 어휘구조와구문구조 용어정의 서로별개이지만밀접한관련이있음 어휘분석 입력프로그램의일련의문자를토큰으로구분함 번역기 구문분석 토큰을처리하여구문구조를결정함 어휘토큰 언어구성자 식별자 4 예약어 프로그래밍언어의어휘구조 프로그래밍언어문자로구성된단어 if, x, i, printf, 프로그래밍언어의구조 프로그래밍언어의구조 용어정의 용어정의 어휘토큰 어휘토큰 언어구성자 식별자 한개이상의어휘토큰을이용한구문적으로허용된프로그램의일부구조 언어구성자 식별자 변수, 자료형, 함수명등에이용되는토큰 4 예약어 4 예약어 If ( ) then { } else { } x, int, printf 등
프로그래밍언어의구조 프로그래밍언어의구조 용어정의 프로그래밍언어구문의형식정의 장점 어휘토큰 프로그램의가독성향상 언어구성자 컴파일러탐색시간단축 오류검색시간식별자단축 4 예약어 단점 예약어관리의어려움 프로그래밍언어확장시예약어와식별자의중복 미리정의된식별자중재정의할수없는식별자 미리정의된식별자 : 번역과정의속도를높이고프로그램의신뢰성을향상시킴 (scanf, printf, if, for 등 ) 프로그래밍언어를이용해정상적인프로그램을작성하는규칙들의집합 공식이나순서도를이용해표현됨 정의된언어로작성가능한모든정상적인프로그램을산출함 if, case, for 등 작성된프로그램이구문에맞는프로그램인지여부를결정하는규율로사용 BNF. BNF BNF (Backus-Naur Form) 란? 구문에대한형식정의를하는방법 생성규칙들의집합 왼쪽부분 : 정의될대상 (object) 오른쪽부분 : 그대상에대한정의
BNF BNF BNF 표기법 BNF 표기법 비단말기호 각괄호 < > 로묶인기호 단말기호 각괄호로묶이지않은기호 메타기호 언어를표현하려고사용된특수기호들 (::=,, < >) 다시정의될대상임을의미 알파벳문자집합, 예약어 ::= : 정의 : 택일 <letter> ::= A B C X Y Z <letter> ::= A B C X Y Z BNF BNF 예 : 식별자정의 문맥자유문법 <digit> ::=0... 8 9 모든생성규칙에서정의될대상이하나의비단말기호로만구성 <identifier> ::= <letter> <identifier><letter> <identifier><digit> <letter> ::= A B C... X Y Z <digit> ::= 0... 8 9 각비단말기호가어디에나타나든그의오른쪽부분으로언제나대치될수있음 문맥의존문법 0b<digit> ::= 0b0 0b 0o<digit> ::= 0o0 0o 0o 0o 0o4 0o5 0o6 0o7 특수한문맥에의존하여대치되는문법
EBNF. EBNF EBNF (Extended BNF) 란? 보다읽기쉽고간결하게표현할수있는확장된 BNF 특수의미의메타기호를더사용하여반복되는부분이나선택적인부분을간결하게표현함 EBNF EBNF EBNF 표기법 EBNF 표기법 [x] : x 가나타나지않거나한번나타날수있음 ( x y ) : 괄호안으로한정하여 x 나 y 중택일 {x} : x가 0번에서 7번까지나타날수있음 [x] 와 {x} 은같은의미임 <if-statement> ::= if <condition> then <statement> [else <statement>] <expression> ::= <expression> + <expression> <expression> - <expression> <expression> * <expression> <expression> / <expression> <expression>::= <expression> ( + - * / ) <expression>
EBNF EBNF 표기법 4. 구문도표 x : 메타기호 x 를단말기호로사용 <BNF-rule> ::= <left-part> ::= <right-part> <right-part> ::= <right-part-element> { <right-part-element> } 4 구문도표 4 구문도표 구문도표란? 구문도표그리는방법 구문에대한형식정의를하는또다른방법 순서도와비슷하며, EBNF 선언과바로대응시킬수있음 비단말기호는사각형, 단말기호는원이나타원으로표시하며이들은지시선으로연결 단말 X 원또는타원안에X로표기 들어오고나가는지시선그림 X 비단말 X 사각형안에 X로표기 들어오고나가는지시선그림 X
4 구문도표 4 구문도표 구문도표그리는방법 구문도표그리는방법 A::=X X X n X i 가비단말기호인경우 A X X X n A::=α α α n α α i 는개별구문도표 A α X i 가단말기호인경우 A X X X n α n 4 구문도표 4 구문도표 구문도표그리는방법 구문도표그리는방법 A::={α} A::=[α] A::=(α α )β α i 와 β 는개별구문도표 α A A A β α α α
4 구문도표 예 : EBNF 구문도표 IV. 파스트리와모호성 A ::= X ( B ) B ::= A C C ::= {+A} 비단말기호 : A, B, C 단말기호 : X, (, ), + A B C ( X B ) A C A + 목차. 파스트리. 구문의모호성. 프로그램의신뢰성 파스트리. 파스트리 파스트리란? 주어진 BNF 에의해어떤표현이생성될수있는지확인하기위해작성하는트리 단말노드의나열이주어진 BNF 로생성가능한표현이됨 주어진표현에대한파스트리가존재하면그표현은주어진 BNF 에의해작성된표현으로결정
파스트리 파스트리 예 : 식별자 TEST <identifier> 예 : 식별자 TEST <identifier> <identifier> <digit> <identifier> <digit> <identifier> ::= <letter> <identifier><letter> <identifier><digit> <identifier> <letter> <identifier> <letter> <identifier> ::= <letter> <identifier><letter> <identifier><digit> <identifier> <identifier> <letter> <letter> <letter> ::= A B C... X Y Z <identifier> <letter> <letter> ::= A B C... X Y Z <identifier> <letter> <digit> ::= 0... 8 9 <letter> <digit> ::= 0... 8 9 <letter> T E S T T E S T 파스트리 파스트리 예 : 식별자 A4 <identifier> 예 : 수식 -*5 <identifier> <digit> <identifier> ::= <letter> <identifier><letter> <identifier><digit> <letter> ::= A B C... X Y Z <digit> ::= 0... 8 9 <identifier> <identifier> <digit> <letter> ::= - * () <number> <number>::= <number><digit> <digit> <digit> ::= 0... 8 9 <number> <digit> ㅡ * <number> <digit> <number> <digit> A 4 5
파스트리 추상구문트리. 구문의모호성 파스트리의본질적인구조를나타내는트리 ㅡ 구문트리 (syntax tree) 라고도함 <number> * <digit> <number> <number> ㅡ <digit> <digit> * 5 불필요한비단말기호제거 5 구문의모호성 구문의모호성 구문을이용한유도과정의다양성 구문을이용한유도과정의다양성 <identifier> ::= <letter> <identifier><letter> <identifier><digit> ::= - * () <number> 예 : 식별자 B <letter> ::= A B C... X Y Z <digit> ::= 0... 8 9 동일한파스트리 예 : 수식 -*5 <number>::= <number><digit> <digit> <digit> ::= 0... 8 9 서로다른파스트리 <identifier> <identifier><digit> <identifier> <identifier><digit> <identifier> <letter> B <identifier> <identifier><digit> <identifier><digit><digit> <letter><digit><digit> B <digit><digit> B <digit> B <identifier> <identifier> <digit> <identifier> <digit> <letter> B - - * * 5 * - * * 5 ㅡ * 5
구문의모호성 구문의모호성 구문을이용한유도과정의다양성 ::= - * () <number> 추상구문트리 -(*5) = -7 (-)*5 = 5 예 : 수식 -*5 <number>::= <number><digit> <digit> <digit> ::= 0... 8 9 서로다른파스트리 예 : 수식 -*5 ㅡ * * ㅡ 5 - - * * 5 * - * * 5 ㅡ * 5 모호한문법 동일표현에대해서로다른파스트리가만들어지는문법 5 구문의모호성 구문의모호성 모호성제거규칙 모호성제거규칙 비단말기호와구문규칙을추가 비단말기호와구문규칙을추가 좌순환규칙을사용하여좌결합지원 ::= - * () <number> <number>::= <number><digit> <digit> <digit> ::= 0... 8 9 ::= - <term> <term> ::= <term> * <term> () <number> <number>::= <number><digit> <digit> <digit> ::= 0... 8 9
구문의모호성 구문의모호성 모호성제거규칙 모호성제거규칙 비단말기호와구문규칙을추가 비단말기호와구문규칙을추가 예 : 수식 -*5 ::= - <term> 예 : 수식 7-- ::= - <term> ㅡ * <term> ::= <term> * <term> () <number> ㅡ ㅡ <term> ::= <term> * <term> () <number> * 5 ㅡ 5 <number>::= <number><digit> <digit> <digit> ::= 0... 8 9 ㅡ 7 7 서로다른파스트리 ㅡ <number>::= <number><digit> <digit> <digit> ::= 0... 8 9 구문의모호성 구문의모호성 모호성제거규칙 모호성제거규칙 비단말기호와구문규칙을추가 좌순환규칙을사용하여좌결합지원 예 : 수식 7-- ㅡ ㅡ 7 7 서로다른파스트리 ㅡ ㅡ 좌결합 : (7-)- 우결합 : 7-(-) 동일연산순위를갖는연산자들에대해대부분좌결합을사용 APL 언어는우결합을사용 ::= - <term> <term> ::= <term> * <term> () <number> <number>::= <number><digit> <digit> <digit> ::= 0... 8 9 ::= - <term> <term> <term> ::= <term> * <factor> <factor> <factor> ::= () <number> <number>::= <number><digit> <digit> <digit> ::= 0... 8 9
구문의모호성 모호성제거규칙. 프로그램의신뢰성 좌순환규칙을사용하여좌결합지원 예 : 수식 7-- ::= - <term> <term> <term> ::= <term> * <factor> <factor> ㅡ <term> <factor> ::= () <number> ㅡ <term> <number>::= <number><digit> <digit> 7 <digit> ::= 0... 8 9 프로그램의신뢰성 프로그램의신뢰성 프로그램의신뢰성 프로그램의신뢰성위배사례 프로그래밍언어의구문이중요 사람과기계에의해프로그래밍언어의구문이쉽게분석될수있어야함 PL/ 의구문 사람의실수 if 문에서 else 처리 A = B = C; 작성의도 : 다중할당 PL/의다중할당 A, B = C; PL/의 = 의미 : 할당, 등가 작성의도와달리다음으로해석됨 A = (B = C);
프로그램의신뢰성 프로그램의신뢰성 프로그램의신뢰성위배사례 프로그램의신뢰성위배사례 PL/ 의구문 사람의실수 if 문에서 else 처리 H. Morgan: 사람의실수로인한프로그램작성시의오류가약 80% 차지 철자오류 변수의선언을명확히하지않는언어의경우 철자오류가묵시적선언으로간주되고처리되어올바른프로그램의기술을어렵게만듦 PL/ 의구문 사람의실수 if 문에서 else 처리 현수 (dangling) else 문제 if cond then if cond then S else S else가첫번째 if와두번째 if 중어느것과어울리는지모호 BNF 문법과관계없이언어자체가포함하고있는모호성에해당 프로그램의신뢰성 프로그램의신뢰성 현수 else 문제 if cond then S 언어별현수 else 문제해결방안 If cond then S else S if cond then (if cond then S else S) if cond then if cond then S else S Algol 60 if cond then begin if cond then S else S end if cond then (if cond then S else S) if cond then (if cond then S) else S Algol 68 PL/, Pascal if cond then if cond then S else S fi fi if cond then if cond then S else S
프로그램의신뢰성 언어별현수 else 문제해결방안 Algol 60, Pascal Algol 68 PL/ if cond then (if cond then S) else S if cond then begin if cond then S end else S if cond then if cond then S fi else S fi IF cond THEN IF cond THEN S; ELSE; ELSE S 목차 V. 프로그래밍언어구현기법및변수와바인딩. 프로그래밍언어구현기법. 변수. 바인딩 Pascal if cond then if cond then S else else S 프로그래밍언어구현기법. 프로그래밍언어구현기법 프로그래밍언어구현의의미 Shuffle(int start, int end) {. }. Shuffle(, 5); 0 c a7 00 06 84 0 0 a 0 ff a ff fa a7 ff f 고급언어로작성된프로그램을실제컴퓨터에서실행시킬수있는기계어로만들어야함 이를위해컴파일기법이나인터프리트기법으로구현
프로그래밍언어구현기법 프로그래밍언어구현기법 컴파일기법 컴파일기법번역기 주어진고급프로그래밍언어로작성된프로그램을 실제주어진컴퓨터의기계어로번역하여 동등한의미의기계어프로그램을만들어실행시키는방법 컴파일러 어셈블러 링커 (linker) 4 로더 (loader) 5 프리프로세서 고급언어 ( 원시언어 ) 를저급언어 ( 목적언어 ) 로만들어주는번역기 일반적으로저급언어는준기계어형태 프로그래밍언어구현기법 프로그래밍언어구현기법 컴파일기법번역기 컴파일기법번역기 컴파일러 어셈블러 링커 (linker) 4 로더 (loader) 어셈블리언어 ( 원시언어 ) 를저급언어 ( 목적언어 ) 로만들어주는번역기 컴파일러 어셈블러 링커 (linker) 4 로더 (loader) 재배치형태의기계어로구성된여러개의프로그램을묶어서어느정도실행가능한하나의기계어 ( 로드모듈 ) 로번역 5 프리프로세서 5 프리프로세서
프로그래밍언어구현기법 프로그래밍언어구현기법 컴파일기법번역기 컴파일기법번역기 컴파일러 컴파일러 어셈블러 링커 (linker) 로드모듈의기계어프로그램을실행가능한기계어로번역하여주기억장치에적재 어셈블러 링커 (linker) 원시언어와목적언어가모두고급언어인번역기 4 로더 (loader) 4 로더 (loader) 5 프리프로세서 5 프리프로세서 프로그래밍언어구현기법 프로그래밍언어구현기법 컴파일기법번역기실행과정 인터프리트기법 고급언어를기계어로취급하여, 이를실행할수있는 고급언어기계를소프트웨어로시뮬레이션하여구성하는방법
프로그래밍언어구현기법 프로그래밍언어구현기법 인터프리터실행과정 번역기와인터프리터 원시언어 ( 입력 ) 고급언어프로그램어셈블러프로그램 소프트웨어프로그램컴파일러어셈블러 목적언어 ( 출력 ) 기계어, 준기계어 ( 목적모듈 ) 기계어, 준기계어 ( 목적모듈 ) 목적모듈 ( 준기계어 ) 링커 (linker, linkage editor) 로드모듈 로드모듈 로더 (relocating loader) 실행가능기계어 고급언어프로그램프리프로세서 Preprocessor 고급언어프로그램 (a) 번역기 소프트웨어프로그램원시언어 ( 입력 ) 출력 ( 하드웨어가능 ) 고급언어프로그램 인터프리터 프로그램이실행된결과 (b) 인터프리터 프로그래밍언어구현기법 프로그래밍언어구현기법 인터프리트기법과컴파일기법비교 인터프리트기법과컴파일기법비교 인터프리트기법 컴파일기법 공통점 : 고급언어로표현된고수준의프로그램을읽어들임 직접고수준의프로그램을실행가능 논리적순서대로문장을실행 실행시마다실행시뮬레이션을통해코드를실행 입력프로그램과동일한기능을하는목적언어로된목적코드출력만가능 입력된순서대로문장을한번씩처리 한번번역된코드는다시번역할필요없음 인터프리트기법 사용자의유연성을중시하는경우 장점 : 추가기억장소필요없음 단점 : 실행시간을매우많이요구할경우가발생 Lisp, Snobol4, APL, Prolog 컴파일기법 컴퓨터의실행시간을중시하는경우 장점 : 많은횟수로반복처리되는프로그램을실행할때매우효율적임 단점 : 번역된프로그램이매우큰기억장치를요구할수있음 Fortran, Algol, PL/I, Pascal, Cobol, C, Ada 등
프로그래밍언어구현기법 프로그래밍언어구현기법 중간코드실행기법 중간코드실행기법과정 컴파일기법 인터프리트기법 중간코드실행기법 프로그램을실행시키기쉬운형태로번역 ( 컴파일 ) 한후, 그번역된형태의프로그램을실행시뮬레이션으로실행 ( 인터프리트 ) 예 : Java 바이트코드사용, JVM 사용 변수. 변수 변수 (variable) 의정의 생성 : 선언문또는묵시적선언으로생성 네가지요소 : 식별자, 자료속성의집합, 하나이상의주소, 자료값 주소와자료값의관계는변할수있음 실행시간동안값이바뀔수있는객체
변수 변수 (variable) 의정의 D. W. Barron 의표기법. 바인딩 예 : A := 0 바인딩 바인딩 바인딩의개념 바인딩의개념 int A = 00; const int number = 0; 이름 A 에변수라는속성과정수라는자료형속성이연결됨 초기값으로 00 이할당됨 이름 number 에상수라는속성과값 0 이연결됨 바인딩 (binding) 이름에어떤속성을연결하는과정 바인딩시간 변수의네가지요소에값을확정하는것 바인딩이어느시점에이루어지는가에따라분류되는시간
바인딩 바인딩 바인딩시간의종류 바인딩시간의종류 실행시간 ( 동적바인딩 ) 번역시간 ( 정적바인딩 ) 언어의구현시간 4 언어의정의시간 변수의값을확정 자료구조에기억장소를할당 실행시간 ( 동적바인딩 ) 번역시간 ( 정적바인딩 ) 언어의구현시간 4 언어의정의시간 구성 : 컴파일시간, 링크시간, 로드시간 변수의형, 자료구조의형과크기, 레코드의각항목들의형등을확정 바인딩 바인딩 바인딩시간의종류 바인딩시간의종류 실행시간 ( 동적바인딩 ) 번역시간 ( 정적바인딩 ) 언어의구현시간 4 언어의정의시간 정수의자릿수, 실수의유효숫자개수, 수의기계내에서의표기법등을확정 실행시간 ( 동적바인딩 ) 번역시간 ( 정적바인딩 ) 언어의구현시간 4 언어의정의시간 혼합형연산이허용되는경우, 연산해야될두피연산자의형에따라어떤형의연산을해야되는지를확정
바인딩 바인딩 바인딩시간의예 : Q = T + 0; 바인딩시간의예 : Q = T + 0; 변수 T 의값 변수 T 의자료형 실행시간 ( 동적바인딩 ) 번역시간 ( 정적바인딩 ) T 가할당연산자왼쪽에존재하는할당문을실행했을때확정 실행시간 ( 동적바인딩 ) 번역시간 ( 정적바인딩 ) 컴파일러언어는자료형과함께 T 가취할수있는값의종류와기억장소의크기도확정 언어의구현시간 언어의구현시간 언어의정의시간 언어의정의시간 바인딩 바인딩 바인딩시간의예 : Q = T + 0; 바인딩시간의예 : Q = T + 0; 상수 0 의표현방식 연산기호 + 의성질 실행시간 ( 동적바인딩 ) 실행시간 ( 동적바인딩 ) 번역시간 ( 정적바인딩 ) 언어의구현시간 기억장소에상수 0 의값을넣는것 0 이실제기계에서표현되는방법 번역시간 ( 정적바인딩 ) 언어의구현시간 컴파일러언어는피연산자의형을컴파일시간에확정하므로이때덧셈종류를확정 언어의정의시간 0 진법의상수 0 을의미 언어의정의시간 연산기호 + 가덧셈연산자라는것을확정 ( 정수덧셈, 실수덧셈 )
바인딩 바인딩시간의중요성 VI. 선언과할당, 식과제어문 효율성 (efficiency) 실행의효율성을중시하는언어 : Fortran, Algol, Cobol, C 등 컴파일러언어 : 가능한한많은바인딩이번역하는동안에이루어지도록설계 유연성 (flexibility) 유연성을특징으로가진언어 : Snobol4, APL, LISP 등 인터프리트언어 : 대부분의바인딩을자료에맞출수있도록바인딩을실행시간까지지연 목차. 선언과할당. 표현식. 제어문 선언과할당. 선언과할당 선언의의미 int[] A = new int[0]; 자료형 : 차원배열 원소의수 : 0 첨자값의사용범위 : 0~9 의정수 각원소의자료형 : 정수 참조할배열이름 : A 실행시사용될자료의속성을컴파일러등에게알려주는것 바인딩을제공하는중요한방법 선언방법 : 명시적선언, 묵시적선언
선언과할당 선언과할당 선언문의목적 선언문의목적 주기억장치사용과접근방법의효율성 주기억장치경영의효율성 정적형검사가능 프로그램실행동안에변하지않는자료구조의속성들을한정 자료구조에접근하기위한계산을컴파일러가최적화함 주기억장치의절약및프로그램실행시간의절약 주기억장치사용과접근방법의효율성 주기억장치경영의효율성 정적형검사가능 자료구조의크기, 생성시기, 소멸시기등을번역시간에알게됨 보다효율적인기억장소배당기법을제공 선언과할당 선언과할당 선언문의목적 할당문의의미 주기억장치사용과접근방법의효율성 주기억장치경영의효율성 정적형검사가능 컴파일시혼합형연산에대한목적코드를형고정연산으로변환 잘못사용한자료형등을번역시간에찾아낼수있어, 프로그램의신뢰성을높일수있음 프로그래밍언어 할당문구문 C, Java, Fortran S = T Algol, Pascal S := T APL S T Basic LET S = T Cobol MOVE T TO S 변수의내용을변경할수있는연산 프로그램에서가장일반적으로나타나는연산
선언과할당 선언과할당 할당문의종류 6. 식으로서의할당문 단순할당문 다중목적변수할당문 조건목적변수할당문 4 복합할당연산자 A = B A, B, C = 0 (PL/) flag? N : M = 0 S += T 할당문은목적변수에할당된값과동일한결과를생성 할당문자체를식으로혹은다른식에포함된피연산자로사용가능 식부작용유발가능 프로그램의가독성저하 5 단항할당연산자 S++ 6 식으로서의할당문 7 혼합형할당문 while ( ( s = getchar() )!= \n ) { } 선언과할당 선언과할당 6. 식으로서의할당문 7. 혼합형할당문 C/C++ 안전성결여예 할당문의양쪽자료형이서로다른경우를의미 컴파일러가탐지할수없는오류. 할당을이항연산자처럼취급허용 언어설계결정사항에따른결과임. 산술식을 boolean 피연산자로허용. 매우비슷한두연산자 =, == 을완전히다른의미로사용작성된코드 : if (s = t) 원래의의도 : if (s == t) 고려사항 : 식의형과목적변수자료형의동일성검사, 불일치시묵시적형변환사용여부 int s, t; float w; w = s / t;
선언과할당 선언과할당 7. 혼합형할당문 상수 C/C++ 묵시적형변환이자유롭게적용됨 const float root =.445; static final float pi =.4596; C Java Java 확대형변환인경우에만허용 float s, t; int w; w = s / t; 변하지않는값을갖는변수의사용을지원 식별자로주어지며, 프로그램수행중변하지않음 상수에어떤값을재할당하려는경우컴파일러가쉽게인식 선언과할당 변수초기화 int m = 0;. 표현식 int[] s = new int[7]; int t[] = {0,,,, 4, 5, 6}; Java 에서배열의경우생성문 new 필요 초기값이주어지는경우 new 없이도생성가능
표현식 표현식 표현식 (expression, 식 ) 의개념 식의평가 A + 피연산자값에대하여주어진연산을실행함으로써이루어짐 B * (C D) 프로그램환경을변화시키지않고오직값만생성 ( 참조투명성 ) 평가순서 : 연산자우선순위, 좌결합법칙 (APL 등일부제외 ) 하나이상의피연산자를가지고자료값의계산을기술하는것 구성 : 피연산자 ( 상수, 변수 ), 연산자, 사용가능한함수호출 A / B - C * D 연산자우선순위적용 A + B + C 좌결합법칙적용 표현식 표현식 논리조건 피연산자 연산자피연산자 논리조건 적용순서 단락회로평가기법 일반적 : 두개의피연산자를우선평가한후연산자적용 논리연산자 : 논리조건에따라다름 컴파일러상의불일치를제거하기위함 n = 0 or m/n < n 0 and m/n < n 이 0 일때항상참 n 이 0 일때항상거짓 if n 0 and m/n < then Q else Q end if if n 0 then if m/n < then Q else Q end if else Q end if
제어문. 제어문 조건문 IF ( 논리식 ) X, X Fortran IF ( 수식 ) X, X, X 논리식의결과참 : X, 거짓 : X 수식의결과음수 : X, 0: X, 양수 : X 조건에따라실행되는부분이달라질때사용하는문장 제어문 제어문 내포된 if 문 switch 문 (C/C++, Java) 반복문 if (t ) X ; else if (t ) X ; else if (t ) X ; else if (t n ) X n ; else t n+ ; switch (< 정수식 >) { case < 정수상수식 >: < 문장 > case < 정수상수식 >: < 문장 > case < 정수상수식 >: < 문장 > case < 정수상수식 n >: < 문장 n > default: < 문장 n+ > } 한개이상의문장을 0 번이상반복하여실행시키는문장 반복기능이없는경우 모든동작의순차적기술의어려움 복잡성의증가와유연성의저하 가독성의저하와유지보수의어려움
제어문 제어문 사용자지정반복 사용자지정반복 반복수행을하려는일련의문장들을괄호로묶어서단위화시킴 개념적반복문 : loop-repeat문 반복문제어 : goto문, exit문 C/C++: exit 문대신 break 문사용 while (result >= 0) { getnext(number); if (number < 0) break; result -= number; } while (result >= 0) { getnext(number); if (number < 0) continue; result -= number; } 제어문 제어문 논리제어반복문 논리제어반복문 while (< 조건식 >) < 문장 > 4 거짓 while( < 조건식 > ) 참 < 문장 > until문 repeat < 문장 > do-while 문 do < 문장 > 초기조건검사후, 그결과가참이면반복문몸체를한번수행하고다시조건검사를행하는과정을반복 조건문결과가거짓이면반복문영역을벗어나다음문장으로수행제어가넘어감 until < 조건식 > 반복문몸체가적어도한번은수행됨 while (< 조건식 >);
제어문 제어변수반복문 제어변수의값수정조건식제어변수초기화 5 for (< 식 >; < 식 >; < 식 >) 프로그래밍언어론 for (< 식 >; < 식 >; < 식 >) < 문장 > 6 거짓 참 < 문장 > 4 수고하셨습니다 ~ 반복변수 ( 제어변수 ) 를사용하여고정된횟수의반복을표시