프로그래밍[Univ]/프로그래밍 언어론 39

[Lex&Yacc] C언어를 기반으로한 Lex_Yacc 공학계산기...

calc_lex.l /* DEFINITION SECTION */ %{ #include "calc_yacc.h" #include extern double yylval; %} WHITE_SPACE [ \t]+ END_MARKER "$" DOUBLE_VAL ([0-9]+|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) %% /* RULE SECTION */ {DOUBLE_VAL} { yylval = atof(yytext); return NUMBER; } "+"{ return PLUS; } "-"{ return MINUS; } "*"{ return MULT; } "/"{ return DIV; } "abs"{ return ABS; } "sqrt"{ return SQRT; } "log"{ retur..

[프로그래밍 언어론] OOP (객체지향 프로그래밍론) Part 2 - Design Issue

1. The Exclusivity of Object? (객체를 얼마나 배타적으로 취급할 것인가?) - Everything is an object : 모든 것을 객체로 만들어서 정의(모든 타입(primitive type 포함)의 객체화) > 장점 : 순수하고 우화하다. 모든것이 객체이다. > 단점 : Message protocol을 이용하여 모든 것을 수행하여 느리다. Dynamic Binding과 Type check때문에 느리다. ex) small talk - Add objects to a complete typing system(명령형 언어에 객체 개념이 추가된 언어가 취하는 형식) > 명령형언어에서 가지고 있는 모든 것을 수용하였다. record, struct, primitive type, ... +..

[프로그래밍 언어론] OOP (객체지향 프로그래밍론) Part 1

* OOP Language의 탄생형태 ⓐ 이미 존재한 언어에 객체 지향 개념을 Add ex) C++ - C언어에 객체 지향 개념 Add Ada96 - Ada에 객체 지향 개념 Add CLOS - Lisp에 객체 지향 개념 Add ⓑ 객체 지향을 목적을 태어난 언어중 구조가 이전에 있던 언어와 비슷하게 만들어진 경우 ex) Java - C++에 기초를 두어 만듬 ⓒ 객체 지향을 목적으로 태어난 언어중 새로운 형태로 나온 언어 ex) small Talk * 프로그램언어의 개발 관점 변경 이건 앞에서도 필자가 한번 정의한 것 같지만, 한번더 정리 해보겠다. - 1950~70 : procedural > Sub Program에 중점을 둠 - 1980 초 : Data-Oriented > Data에 중점을 두었다. ..

[프로그래밍 언어론] Abstract Data Types(추상화 타입)

* Abstract Data Type의 시작 - 복잡한 부분을 가리는 역할을 한다. - 1980년대 이전 : Process Abstraction은 이미 존재하였다.(서브프로그램) - 1980년대 이후 : 언어개발의 관심사가 Process에서 Data로 이동되었다. > module, package, class라는 것을 이용하여 각각의 언어에서 ADT(Abstract Data Types)을 정의하기 시작 - Built - in Type이 아니다. > Built - in Type 또한 이미 누군가 정의해 놓은 ADT중 하나이다. 하지만 ADT란 Built-in Type이 아닌 사용자가 정의한 User-Defined Type이다. * Abstract Data Type를 만족하기 위해서는... - Data rep..

[프로그래밍 언어론] Sub-Program 구현 방식 Part 2 Dynamic Language

동적언어에서 서브프로그램을 구현하는 방법으로는 Deep Access와 Shallow Access가 존재한다. 각각의 방법에 대해서 살펴보도록 하자. * Deep Access - 매번 호출 마다 Dynamic Link를 이용해 구현(Static chain과 비슷한 형태) ex) Deep Access Linking ( x , y ) = x번 Activation Record를 찾아간후 y번째를 참조해주세요. - Deep Access의 Activation Record의 모습은 Static에서 구현된 Activation Record에서 Static Link가 사라진 모습이다. - 특징 : 각 변수를 참조하기 위해서는 Dynamic Link를 일일이 찾아가야한다. Static Language의 static chai..

[프로그래밍 언어론] Sub-Program 구현 방식 Part 1 Static Language

* Sub Program 구현 방향 - 서브프로그램이 "Linkage(연계=call과 return)"에 대한 것이 원할하게 이뤄지게 구현해야한다. * 최초의 Sub-Program을 지원한 FORTRAN 77(Passing Method:Call by Reference) - FORTRAN77은 Sub-Program을 지원하기 위해서 다음의 과정을 밟았다. ⓐ 서브프로그램을 실행하기 위해서는 함수를 호출하는(call)과 서브프로그램이 종료되어 되돌려 받는(return)이라는 2가지 step이 존재하는 것을 알게되었다. ⓑ 각각 Step에서는 다음과 같은 순서로 세분화 된다. 1) Call step ① 호출하는 자신(caller)은 자신의 현 상태를 저장한다. ② 호출과 동시에 Parameter passing은..

[프로그래밍 언어론] Sub Program Part 4 - 나머지 Phase 2

* Generic Sub-Programs - 특정 조건(Types, ...)에 관계없이 돌아가는 서브프로그램(로직) ⓐ In Ada > 타입, 배열의 길이, 상수 값, 서브프로그램가 파라미터로 들어오는 것에 대해서 Generic Sub-program을 지원 > 선언, 구현, 사례화(생산), 사용의 4단계에 걸쳐서 사용이 가능하다. ex1) sort 프로그램 // 들어오는 타입에 관계없이 돌아가는 Type Generic Sub-program ex2) parameter로 서브프로그램을 받는 Sub-program Generic Sub-program ⓑ In C++ - C++에서는 Generic Sub-program을 Template라는 것으로 정의 하였다. - 암시적으로 사례화가 일어나기 때문에 Ada에 비해..

[프로그래밍 언어론] Sub Program Part 4 - 나머지 Phase 1

설계 이슈중에서 지금까지 다루지 않았던 것들을 "나머지..."를 통해서 설명하겠다. * Multidimensional Array as Parameter ( 파라미터로서의 다체원 배열 Passing ) - C언어에서 프로그램을 개발한다고 생각하자. A라는 사람이 main을 구현하고 B라는 사람이 sub을 구현한다. 이 경우 main의 개발자 A가 sub에 다차원배열을 보내려고한다고 하자. 그러면 B는 main에서 오는 배열의 크기가 정해지지 않는한 구현할 수가 없게 된다. - 즉, 파라미터로 배열을 Passing하게되면, 프로그램을 나눠서 구현할 때의 문제점이 발생한다. - 또한, Data Type의 배열에서 봤듯이 다차원 배열에서 저장장소의 위치에 접근하기 위해서는 column size를 알아야한다. 즉..

[프로그래밍 언어론] Sub Program Part 3 - Type Check, Parameter Passing 구현법

* Type Checking of Parameters - FORTRAN & Original C : none - FORTRAN90, JAVA, Ada, Pascal, Modula-2 : 항상 실행 - ANSI C, C++ : 사용자의 선택으로 type check를 할지 안할지 여부를 정할 수 있다. ex) * Parameter Passing 구현법 - 대부분 runtime stack을 이용하여 passing 방법을 구현한다. - pass-by-name의 경우에는 stack에 치환에 필요한 코드가 들어간다.(비용 높아짐) > 이러한 코드를 code segment 또는 thunks라고 부른다. * Parameter Passing 선택 - 일반적으로 언어들은 call by value 와 call by refer..

[프로그래밍 언어론] Sub Program Part 2 - Local variable, Passing Models

1. Sub-Program의 Local 변수를 static으로 할 것인가 dynamic으로 할 것인가? - 대부분의 언어는 stack-dynamic방식을 취하고 있다. (>stack-dynamic방식이란 예전에 말했듯이, 상대위치를 저장후 call시 메모리를 할당하는 것이다) - 장점 > recursion이 가능하다. > 기억 공간을 다른 서브프로그램과 공유를 한다. 메모리 절약 ( 특정 서브프로그램이 메모리를 사용 후 반납을 한 공간을 다른 서브프로그램이 사용가능한 것을 의미) - 단점 > 지속적인 할당과 회수로 인한 오버해드가 발생한다 > 직접적이지 않은, (상대적 위치를 고려하여 메모리 계산)주소 참조로 속도가 느리다. > 이전에 서브프로그램에서 수행한 값을 같은 서브프로그램과 공유할 수 없다. -..