Chapter 01 컴파일러의개요
01 컴파일러의필요성 02 프로그래밍언어 03 번역기의종류
컴파일러가왜필요한지컴파일러의필요성을언어와연관지어이해하기 프로그래밍언어에대한일반적인개념들을프로그래밍언어들의특성별로나누어서설명하고이해하기 컴파일러를포함한여러가지번역기들에대해서이해하고, 언어처리시스템에대해서이해하기
1.1 컴파일러의필요성 컴파일러필요성 4
1.1 컴파일러의필요성 언어란? 의사전달을하기위한도구 형식언어의종류 언어의종류 자연언어 (natural language) 형식언어 (formal language) 5
1.1 컴파일러의필요성 프로그래밍언어 컴퓨터언어중에서어떤문제를풀기위해서일련의과정을기술하는데사용되는언어 기계어 - 프로그래밍언어중에서초기에사용된언어로 0 과 1 로구성된언어. 기계어를주로사용한이유는컴퓨터가 0 과 1 로만들어진추상기계 (abstract machine) 이기때문 그러나기계어로프로그래밍을하기란상당히어렵고매우복잡하다는단점. 어셈블리어 기계어의단점을보완하기위해나온언어가어셈블리어. 어셈블리어는 0 과 1 로구성된기계어대신더하기에 ADD, 빼기에 SUBT 등대응하는명령기호를사용함으로써프로그래밍작업에서기계어의단점을조금보완. 인간이어셈블리어를사용하니컴퓨터가이것을이해하지못했다. 서로이해할수있는언어가달랐기때문이다. 이를쉽게이해하기위해자연언어에빗대어살펴보자. 예를들어프랑스어를모르는한국인과한국어를모르는프랑스인이만나인사를한다고하자. 서로말을알아듣지못하니통역사가필요한데이러한통역사는 [ 그림 1-3] 과같이번역기 (translator) 의역할을수행한다. 어셈블리어를기계어로번역해주는번역기는어셈블러 (assembler) 6
1.1 컴파일러의필요성 고급언어 어셈블리어도저급언어의수준을벗어나지는못했으며, 그후저급언어의단점을보완하기위해 C, 파스칼, 알골, 포트란, 코볼등사람중심의고급언어가탄생 고급언어도저급언어와마찬가지로기계어로변환해주는번역기가필요한데이를컴파일러 7
1.1 컴파일러의필요성 컴파일러가필요한이유 ( 정리 ) 인간은문제를해결하기위해컴퓨터를사용하며컴퓨터와의사소통을하는데 언어 가필요하다. 컴퓨터는기계어를사용하지만인간이기계어를사용하여문제를표현하기란무척어렵기때문에인간은사람중심언어인고급언어를사용한다. 그런데인간이사용하는고급언어는컴퓨터가이해하지못한다. 따라서인간이사용하는고급언어를기계어로변환해주는번역기인컴파일러가필요하다 8
1.2 프로그래밍언어 고급언어의장점 특정한컴퓨터의구조에대한지식이없어도프로그래머의생각을자연스럽게표현할수있도록만들어져있다 저급언어에비해배우기가쉽고, 프로그래머의생산성 (productivity) 을높임. 이식성 (portability) 우수 : 한기종에서다른기종으로프로그램을쉽게가져감. 디버깅이용이함. 기계독립적 특정한컴퓨터의구조를모르고도프로그래밍을할수있음. 고급언어의분류방법 특성별 / 연대별 절차언어와비절차언어 블록언어와비블록언어 절차언어는명령형언어라고도하며다음과같은특징이있음 명령의순차적실행, 기억장소를표시하기위한변수사용, 값을저장하기위한치환문사용 9
1.2 프로그래밍언어 수치계산용언어 Fortran(FORmula TRANslation) I, II, III, IV, 77, 86, 90, HPF, FORTRAN D, CEDAR FORTRAN, KSR 매개변수전달방식 참조호출 (Call by reference) 매개변수전달 : 매개변수사이에값을주고받는것 매개변수에는함수정의구문에서기술되는매개변수인형식매개변수 (formal parameter) 와함수를호출할때기술되는매개변수인실매개변수 (actual parameter) 가있다. 실매개변수를기술할때는함수의헤더에정의된자료형과일치되게해야한다. 형식매개변수와실매개변수사이에값을어떻게주고받느냐에따라여러가지매개변수전달방법 (parameter passing) 이있는데, 여기서는참조호출 (call by reference, call by address, call by location), 값호출 (call by value), 이름호출 (call by name) 을간단히살펴보자. 10
1.2 프로그래밍언어 참조호출은실매개변수의주소를대응되는형식매개변수로넘겨주는것이며대표적으로포트란, PL/I(Programming Language/One) 과 C 언어의포인터변수에대한매개변수전달방식에사용. 하지만이방법은 2 개이상의단위프로그램에서 2 개이상의변수가기억장소를공유함으로써지역변수이외의변수값을변화시키는부작용 (side effect) 이발생, 이는프로그램을읽고이해하는데어려움을줌. 부작용을일으키는대표적인예로포트란의 COMMON 문장. 여기서는부작용과비슷한개념으로, 하나의단위프로그램에서 2 개이상의변수가기억장소를공유할때발생하는별칭 (alias) 도알아야한다. 별칭의대표적인예는포트란의 EQUIVALENCE 문장이다. 값호출은실매개변수와는별도로형식매개변수에대한기억장소를별도로할당하는방법으로, 부작용이발생하지않지만기억장소가추가로필요하다는단점. 블록구조언어인 C 나파스칼에서기본적으로값호출방법을사용. 이름호출은형식매개변수의이름이사용될때마다그에대응하는실매개변수자체가사용된것처럼매번다시계산하여시행하는방법으로, 초기프로그래밍언어인알골 60 에서사용. 11
1.2 프로그래밍언어 [ 예제 1-1] 참조호출, 값호출, 이름호출 다음과같은알골형태의프로그램에서참조호출, 값호출, 이름호출을한경우출력되는값을구하시오. Begin Integer A, B; Procedure F(X, Y, Z); Integer X, Y, Z; Begin Y := Y + 2; End F; A := 3; B := 5; F(A+B, A, A); PRINT A END Z := Z + X; 12
1.2 프로그래밍언어 [ 풀이 ] 1 참조호출의경우 : 처음에 A = 3, B = 5 이다. 프로시저 F 가호출되면 F(A+B, A, A) 에서 addr(a+b) = addr(x), addr(a) = addr(y), addr(a) = addr(z) 이다. Y := Y + 2 에서 Y = 3 + 2 = 5, Z := Z + X 에서 Z = 5 + 8 = 13 PRINT A 에서 A 의주소는 Z 의주소와같으므로 13 을출력한다. 2 값호출의경우 : 처음에 A = 3, B = 5 이다. 프로시저 F 가호출되면 F(A+B, A, A) 에서 X, Y, Z 에대한기억장소를별도로할당한다음 X = 8, Y = 3, Z = 3 을치환한다. Y := Y + 2 에서 Y = 3 + 2 = 5, Z := Z + X 에서 Z = 5 + 8 = 13 그런데프로시저가리턴되면서 X, Y, Z 에대한기억장소가삭제된다. PRINT A 에서 3 을출력한다. 3 이름호출의경우 : 처음에 A = 3, B = 5 이다. 프로시저 F 가호출되면 F(A+B, A, A) 가호출된다음 Y := Y + 2 에서 A = A + 2 = 3 + 2 = 5, Z := Z + X 에서 A = A + (A + B) = 5 + 5 + 5 = 15 PRINT A 에서 15 를출력한다. 13
1.2 프로그래밍언어 Algol(ALGOrithmic Language) 언어의구조와의미가명료하고다른언어에영향 블록구조, 재귀법, BNF 블록 (Block) 구조 : 프로그램을여러단계의블록으로나누어작성할수있도록해주는언어구조 프로그램작성시일련의문장을하나의프로시저나함수로묶고이러한프로시저나함수를계층적으로조직하여하나의프로그램을만들어내는것. 각블록은지역변수와다른블록을포함하며변수의유효범위가블록내로제한되므로메모리가절약되고에러의가능성이작다. 블록구조를사용하려면시스템에서스택 (stack) 을제공해야한다. 재귀법 (Recursion) : 수학적귀납법이라고도불리는재귀법은자신을정의하거나자기자신을재참조하는방법 알골에서처음으로사용 재귀법을사용하면프로그램을간단하게작성할수있지만, 실행시간이많이걸리고메모리를많이요구한다는단점. BNF : BNF(Backus-Naur Form) 는문법을표현하는방법으로가장많이사용되는것이다. 메타기호 (meta-symbol) 로치환을의미하는 ::=, 논터미널 (non-terminal) 기호를표시하는 < >, 선택을표시하는 를가지고문법을표현하는데더자세한내용은 3 장에서다룸. 14
1.2 프로그래밍언어 Basic(Beginners All-purpose Symbolic Instruction Code) 프로그램을잘알지못하는사람들이프로그래밍을쉽게할수있도록개발된절차형언어 교육용언어로개발되어언어를배우기가쉽고, 문법이쉬운언어로개발된인터프리터언어 시분할시스템 (time sharing) 비주얼베이직 (Visual basic) : 윈도용소프트웨어를개발하기위한프로그래밍언어로, 그래픽사용자인터페이스 (graphical user interface, GUI) 를구현하는프로그램을매우쉽게개발할수있다는것이특징 15
1.2 프로그래밍언어 사무처리용언어 : 코볼이대표적 Cobol(COmmon Business Oriented Language) 아직도가장널리쓰이는프로그래밍언어이지만대학에서는외면당하는편이다. 그이유중하나는복잡한알고리즘을프로그래밍하기가상당히어렵다는단점. 기계독립적 (machine independent) - 특정한기계에국한하지않고실행할수있는프로그램으로작성하는것. 문서화 (documentation) - 사람들을이해시키기위해문장, 도식등을사용하여문서화하는것으로, 프로그램을작성할때설계, 제조공정, 작업결과를나타내어유지 보수를위한정보를주는것이다. 코볼은프로그램이영어문장과유사하여프로그램자체가문서화되는언어이다 레코드 (record) 구조 구조형 (structured type) 의대표적인형으로는배열 (array) 과레코드가있다. 배열은첫번째원소의상대적위치인첨자로원소를식별하는동질성자료 (homogeneous data) 의집합이고, 레코드는원소를식별자로구별하는이질형자료 (heterogeneous data) 의집합이다 자료구조와실행부분분리 - 4 개 division(identification, environment, data, procedure) 16
1.2 프로그래밍언어 인공지능 (Artificial intelligence) 언어 Lisp(LISt Processing) 함수언어 - 함수형프로그래밍 (functional programming) 은계산을수학적함수의평가로취급하는프로그래밍패러다임의하나이다. 폴란드식표기법 (polish notation -prefix 형태 ) 폴란드의얀루카시에비치 (Jan Lukasiewicz) 가 1920 년대에제창한논리식의표기법으로산술식에도적용할수있다. 산술식을표기할때피연산자를연산자뒤에놓는표기법으로, 예를들면산술식 a (b +c) 를 a+bc 로나타내는것이다. 이진트리를선형으로표기하는방법 폴란드식표기법인전위 (prefix) 표기방법, 역폴란드식표기법 (reverse Polish notation) 이라불리는후위 (postfix) 표기방법, 그리고중위 (infix) 표기방법이있다. 전위표기방법, 후위표기방법, 중위표기방법은트리 (tree) 에저장되어있는자료를트리순회 (tree traversal) 한결과를선형으로표현하는방법으로, 전위 (preorder) 순회한결과를전위표기방법, 중위 (inorder) 순회한결과를중위표현방법, 후위 (postorder) 순회한결과를후위표기방법이라한다 17
1.2 프로그래밍언어 전위순회한결과인전위표현은 +*ab/cd, 후위순회한결과인후위표현은 ab*cd/+, 중위순회한결과인중위표현은 a*b+c/d 이다. 쓰레기수거 (garbage collection) - 메모리관리기법중의하나로, 프로그램이동적으로할당했던메모리영역중에서필요없게된영역을해제하는기능이다. 리스프의문제를해결하기위해존매카시가개발했다. 18
1.2 프로그래밍언어 Snobol(StriNg Oriented symbolic Language) 문자열처리, 패턴매칭 Prolog(PRO-gramming in LOGic) 논리언어 System languages C C++(OOPL : class, inheritance, polymorphism) C 언어의명령형특징을향상하고객체지향프로그래밍을지원하는구조를추가한것 C 언어의특징을대부분포함하고있어시스템프로그래밍에적합할뿐만아니라클래스, 연산자중복등과같은특징을갖추어객체지향프로그래밍에적합 OOPL(Object-Oriented Programming Language)) - 객체지향프로그래밍은 C, 파스칼과같은절차형언어가크고복잡한프로그램을구축하기어렵다는문제점을해결하기위해탄생되었고, 시뮬레이션언어인시뮬라 (Simula) 에서유래했다. 객체 (object) 라는작은단위로모든처리를기술하는프로그래밍방법으로, 이방법으로프로그램을작성하면프로그램이단순해지고생산성과신뢰성이높은시스템을구축할수있다. 19
1.2 프로그래밍언어 기타 APL(A Programming Language) 하버드대학의케네스아이버슨 (Kenneth E. Iverson) 이고안했으며, 배열과행렬을포함하는수학적연산을쉽게프로그래밍하기위한언어로 IBM 에서제작했다. 많은개념이일반적인프로그래밍언어의규칙에위배되는언어이다. Pascal 취리히대학의니클라우스위스 (Niklaus Wirth) 가고안한프로그래밍언어로, 프로그래밍에대한근본적인개념을명확하고자연스럽게그리고체계적으로가르칠수있도록프로그래밍언어론적인관점에서설계된교육용언어이다. 특히코드를간결하게작성할수있고, 여러가지자료형을제공하여자료구조, 알고리즘설계등컴퓨터분야의응용에적합하다. Ada 1980 년미국국방성 컴퓨터내장시스템 (embedded computer system) 을지원하기위한언어 실시간 (Real time) 응용에적합 다중처리 (multi-tasking), 예외처리등의특징이있다. 20
1.2 프로그래밍언어 Java 미국의선마이크로시스템스에서개발한객체지향프로그래밍언어 C++ 를바탕으로언어규격을규정하여더작고더단순하며더안전한언어로발전 임베디드시스템을위한언어, 가전, 운영체제및하드웨어플랫폼에독립적인언어 OOPL 자바와자바스크립트의차이 자바스크립트는 HTML 과같이사용자컴퓨터에의해인터프리트되는언어이다. 그러나자바는일단서버측에서컴파일해야하고, 프로그램의실행이사용자측에서이뤄진다. 자바와자바스크립트모두객체지향적언어이다. 하지만자바스크립트에는상속성이나클래스가존재하지않는다. 자바스크립트는 HTML 코드에끼워져서 (embedded) 사용되지만자바는 HTML 과독립적으로사용가능하다. 단, HTML 을이용해야자바프로그램에접근할수있다. 자바와자바스크립트모두안전하다. 그런데자바스크립트의경우 HTML 코드에직접끼워져있기때문에누구든지볼수있지만자바는이와다르다. 자바소스코드를컴파일하면바이트코드라고불리는클래스파일이생성된다. 따라서프로그램작성자가디렉터리안의소스코드를지워도 HTML 에서부르는것은자바클래스파일이기때문에다른사람이그소스코드를보지못한다는데차이가있다. 21
1.2 프로그래밍언어 인터넷프로그램 웹브라우저에서실행될수있는프로그램. 서버사이드언어 (PERL, PHP, ASP, JSP) 와클라이언트사이드언어 (HTML, DHTML, 자바스크립트, 자바애플릿 ) 로구분 펄 (PERL) : Practical Extraction and Report Language 의약자로, 1987 년래리월 (Larry Wall) 이개발했다.» C 언어와구문이비슷하며, 초기에는 sh 와 awk 의결합으로만든유닉스기능을포함하는스크립트프로그래밍언어» C 언어의형태를가지고있으면서도텍스트를처리하는기능이나문자열의일치여부검색, 치환등의기능이뛰어날뿐아니라코딩도쉽다. 또한인터프리터언어이며, 특히텍스트처리기능이뛰어나 CGI(common gateway interface) 프로그램을개발하는데많이사용된다.» 유닉스와윈도 NT 등여러가지운영체제에사용할수있으므로소스파일을이식하기도쉬워서버나운영체제를바꾸는경우에도부담이되지않는다. PHP(Personal Hypertext Preprocessor) : HTML 에포함되어동작하는스크립트언어로처음에는 Personal Home Page 라고불렸다.» 공개된무료소스로원래는동적웹페이지를만들기위해설계되었으며, 이를구현하기위해 PHP 로작성된코드를 HTML 소스문서안에넣으면 PHP 처리기능이있는웹서버에서해당코드를인식하여작성자가원하는웹페이지를생성한다. PHP 스크립트가포함된 HTML 페이지에는.php,.php3,.phtml 이붙는파일이름이부여된다 22
1.2 프로그래밍언어 ASP(Active Server Pages) : 하나이상의작은내장프로그램을가지고있는 HTML 페이지를사용자에게보여주기위해서버에서수행되는것이다. 클라이언트가요청하면서버에서응답해주는방식의서버측프로그램으로, 이를사용하면서버에서웹을프로그래밍할수있고기존의 HTML 페이지와는다른동적인구성을할수있다. 서버에서작동하므로서버의사양에따라속도가다르며, 클라이언트측은인터넷을사용하는사용자의사양에따라속도가다르다. JSP(Java Server Pages) : HTML 내에자바코드를삽입하여웹서버에서동적으로웹페이지를생성하고웹브라우저에돌려주는언어이다. JSP 는자바서블릿으로변환된후실행되므로서블릿과거의유사하다고볼수있으나, 서블릿과달리 HTML 표준에따라작성되므로웹디자인을하기에편리하다 HTML(HyperText Markup Language) : 월드와이드웹을통해볼수있는문서를만들때사용하는언어로, 별도의컴파일러가필요하지않고웹브라우저에서해석이가능하며사용하기쉽다. HTML 은문서의글자크기, 글자색, 글자모양, 그래픽, 문서이동 ( 하이퍼링크 ) 등을정의하는명령어로서홈페이지는기본적으로 HTML 을사용하여구현되며제목, 문단, 리스트, 하이퍼링크등이모두태그로구조화된다. 그러나프로그래밍코드를사용할수없고데이터베이스를연동할수없다는단점이있다. DHTML(Dynamic HTML) : 동적인작용을할수있는 HTML 문서이다. 23
1.2 프로그래밍언어 자바스크립트 (Java Script) : 선마이크로시스템스와넷스케이프가개발한스크립트언어이다. 자바를응용하여사용하기쉽게만든자바스크립트는표준 HTML 문서에사용되어쌍방향 interactive 웹페이지를만들수있게해준다. 자바애플릿 (Java applet) : 자바언어로작성된작은소프트웨어로서, applet 은 응용 을뜻하는 application 과 작다 는의미의접미사 let 을조합한합성어이다. 크기가작아네트워크에서의전송에적합하고, 월드와이드웹을사용하여배포할수있다. 독립실행을하는자바애플리케이션과달리웹문서상에포함되어클라이언트 ( 브라우저 ) 의요구시실행코드를내려받아사용자의마우스동작, 문자입력등에따라작동하는형태이다. 일단브라우저에서실행되면동적이고멀티미디어적인기능을발휘하지만그실행까지가너무느리다는것이단점이다. 24
1.2 프로그래밍언어 프로그래밍언어의기본개념 식별자 (identifier) 와변수 (variable) 식별자와변수는만드는방법이이름 (name) 과동일하다. 식별자는어떤대상을유일하게식별및구별할수있는이름을뜻하며, 이는정보를처리하려면그정보를가리킬방법이있어야하기때문에필요하다. 변수는실행시간에저장된값이변경될수있는객체를의미하며, 값을저장할기억장소의특별한위치를나타낸다. 많은프로그래밍언어는식별자로사용될수있는문자에제한을두는데, 예를들어 C 와 C++ 계열에서는영문대문자와소문자, 숫자, 언더바 (underscore) 만식별자로쓸수있으며 a123, aaa 는모두식별자와변수가될수있다. 변수가되려면값을저장하는기억장소의위치를나타내야한다. 25
1.3 번역기의종류 번역기란? 하나의프로그래밍언어로작성된프로그램을입력으로하여그와동등한의미를갖는다른프로그래밍언어로된프로그램을출력하는일종의프로그램 번역기의종류와기능 26
1.3 번역기의종류 어셈블러 어셈블리어로작성된프로그램을그에대응하는기계어로번역하는번역기 어셈블리코드 (assembly code) 사람이좀더이해하기쉽게기호화한것이다. 어셈블리명령어 (instruction) 의전형적인예 LOAD R 1, a ( 변수 a에있는값을레지스터 R 1 에적재 ) ADD R 1, #2 ( 레지스터 R 1 에있는값과상수 2를더해서다시레지스터 R 1 에저장 ) STORE b, R 1 ( 마지막으로레지스터 R 1 에저장되어있는값을변수 b에저장 ) 이렇게해서 b = a+2 를계산 27
1.3 번역기의종류 대부분 two pass assembler 로구성 pass : 하나의입력파일 (file) 을단한번만읽는것으로구성되는단위로하나의 pass 는일반적으로여러개의 phase 들로구성됨 phase : source program 을하나의표현에서다른표현으로변환하는것 first pass : assembly code 를가지고기호표 (symbol table) 작성 단, 하나의단어 (word) 는 4 바이트로구성되고, 각식별자의주소는 0 바이트로부터시작한다고가정 second pass : operation code 를기계어로표현하는 bit 들의 sequence 로표시 0001 01 00 00000000* 0011 01 10 00000010 0010 01 00 00000100* 첫번째 4 개의비트는명령어로서 0001 은 LOAD, 0010 은 STORE, 0011 은 ADD 를나타낸다. 그다음두개의비트는레지스터를표시하는것으로여기서 01 은레지스터 1 을의미한다. 이어서그다음두개의비트는태그 (tag) 를나타낸다. 00 은다음의 8 비트가메모리주소를가리키는일반적인주소방식 (ordinary address mode) 이고 10 은다음의 8 비트가피연산자 (operand) 인직접번지지정방식 (immediate address mode) 일때사용된다. * 는각각의피연산자가재배치 (relocatable) 가능기계어에서재배치비트임을알려주는것이다. 28
1.3 번역기의종류 프리프로세서 (preprocessor, 전처리기 ) 프로그래밍언어에유용한기능들을추가하여언어를확장시켜주는역할을하는것으로원시언어와목적언어가모두고급언어인번역기 코볼프로그램은있는데코볼컴파일러가없을때, C 컴파일러가있다면실행해볼수있다. 코볼언어로작성된프로그램을 C 언어로작성된프로그램으로변환하고 C 언어로변환된프로그램을 C 컴파일러를사용해서실행할수있다. 이때코볼을 C 로변환하는코볼 -C 프리프로세서가필요하다. C 프리프로세서의 3 가지기능 1) 파일포함 (file inclusion) 기능 프로그램에헤더파일 (header file) 들을포함 예 - C 프리프로세서는파일에 #include <global.h> 라는문장이포함되어있다면그자리에 <global.h> 파일의내용을대체. 2) 매크로 (macro) 처리기능 매크로로정의된부분들에대해서필요할때마다확장 #define max 45=> max 가나타날때마다 45 로바꾸어줌 29
1.3 번역기의종류 3) 조건부컴파일조건에따라소스프로그램의일부분을선택적으로삽입혹은삭제하는가능 #if SYSTEM == WINDOWS #include "stdio.h #elif SYSTEM == UNIX #include "unix.h #else #include "etc.h #endif 30
1.3 번역기의종류 인터프리터와컴파일러 반복문이나계속호출되는부프로그램처럼많은횟수를반복처리하는프로그램의경우에는컴파일러기법이큰도움이될수있다. 인터프리터기법에서는반복처리할때마다다시디코딩해야하지만, 컴파일러기법에서는전체적으로한번디코딩하면그다음부터는실행만하므로실행시간측면에서효율적이기때문이다. 그러나컴파일러기법은때로몇줄의소스프로그램이몇백줄의기계어로번역되어큰기억장소를필요로한다는단점이있다. 간단한컴파일러처리과정 31
1.3 번역기의종류 인터프리터와컴파일러 인터프리터와컴파일러는서로상반관계 trade-off( 두변수가서로반대방향으로움직이는것 ) 이다. 일반적으로컴파일러기법은인터프리터기법보다실행속도가 10 배이상빠르다. 인터프리터의경우고급언어로작성된프로그램을한줄단위로번역과실행을하여특히반복문일때실행시간이많이늘어나기때문이다. 반면에한줄단위로번역과실행을하여매번같은기억장소를사용하므로기억장소를줄일수있다는것이장점이다. 간단한인터프리터처리과정 32
1.3 번역기의종류 컴파일러와인터프리터의비교 ( 반복문, speed, storage) 컴파일러언어 - FORTRAN, ALGOL, PL/I, PASCAL, COBOL, C 인터프리터언어 - LISP, SNOBOL, APL 33
1.3 번역기의종류 기타번역기 크로스컴파일러 (cross compiler) 원시프로그램을컴파일러가수행되고있는컴퓨터의기계어로번역하는것이아니라다른컴퓨터의기계어로번역. 예 - 목적프로그램이수행되어지는컴퓨터의용량이커야할경우용량이작은컴퓨터에서크로스컴파일러에의하여번역만하고번역된목적프로그램은용량이큰컴퓨터에서실행. 실리콘컴파일러 (silicon compiler) : 기존의언어와유사한소스언어를가지고있으나이언어에서사용되는변수는기억장소의위치를나타내지않고스위치회로에서의논리적신호 (0 혹은 1) 나논리신호의군 (group) 을나타낸다. 또한실리콘컴파일러의출력은어떤적당한언어로표현된회로설계도 (circuit design) 이다. 바이트코드컴파일러 bytecode compiler : 자바언어가대표적인예이다. 바이트코드컴파일러는자바소스프로그램을바이트코드라불리는중간코드로컴파일한다. 그런다음바이트코드는자바가상기계에서인터프리트되어실행된다. 그래서자바언어처리기를컴파일러방법과인터프리터방법을결합한혼합형컴파일러라하며, 이를 [ 그림 1-10] 에나타냈다 34
1.3 번역기의종류 질의인터프리터 (query interpreter) : 관계연산자나부울연산자 Boolean operator 를포함하는술어 predicate 를하나의데이터베이스에서그술어를만족하는레코드를찾기위한명령어로번역하는것이다. 여기서술어는한객체의성질이나객체와객체사이의관계를표현하는것을말한다. 35
1.3 번역기의종류 언어처리시스템 문제가주어지고그문제에대한알고리즘을작성해서소스프로그램으로부터실행가능한목적프로그램을생성하는것을언어처리시스템이라하며, 이때컴파일러이외에여러가지다른번역기가필요할수도있다. 36
Thank You 37