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

[프로그래밍 언어론] Sub Program part 1 - Base, Design Issues

* Sub Program : 명령형 언어중에서 가장 구현, 제공이 힘든 부분이다. * 특성 - Single entry Point : 서브프로그램을 호출하면 그 서브프로그램의 시작지점이 항상 일정하다. (Sub-Program 구현부) cf) 이거랑 비교대는 것으로 서브프로그램을 호출할때, 그 상태의 경우에 따라서 시작지점이 달라지는 것도 있다. - caller와 callee : caller는 서브프로그램을 호출하는 것이고, callee는 호출 되는 서브프로그램을 말한다. - caller가 발생하면, 호출한 위치에서 프로그램은 잠시 멈춘후(Suspended) callee를 실행한다. > callee가 종료되면(sub-program의 return발생), 프로그램은 이어서 실행을 한다. > 즉, 명령형언어의 s..

[프로그래밍 언어론] Statement - Level Control Structure Part 4 - Guarded Commands

* Guarded Commands ( Dijkstra 1975 ) - 목적 : 프로그램을 개발하면서 검증을 바로바로 하고 싶다. > 즉, 프로그램 개발이 끝난 동시에 검증이 끝나있음을 의미 한다. - 위의 목적을 이루기 위해서 selection과 loop를 새로 정의 하였다. * Selection of Guarded Command - []의 역할 > 일반 if-elseif문에서의 elseif와 같은 기능을한다. 그러나 여기엔 크나큰 차이가 있다. > 일반 if-elseif문과 다르게 모든 boolean expression에 대해서 T/F를 검사를 하여 True인 것 중에서 랜덤으로 하나의 stmt를 실행한다. > 조건이 모두 false이면 error를 출력해준다. - []의 기능으로 인한 이점 > 랜덤..

[프로그래밍 언어론] Statement - Level Control Structure Part 3 - Lterative Statements

* 반복구문이란? - 반복이 일어나는 구문을 말한다. - 컴퓨터에서 반복이 일어나는 경우는 iteration(for, while)이나 recursion(재귀호출)이 있다. > 두 가지의 경우 중 이번 페이지는 iteration의 경우만 보도록 한다. * Iteration control statement(반복 조정 구문) - 반복 조정 구문(이하 반복문)의 설계 이슈 ⓐ 어떻게 반복문을 제어할 것인가? > 제어 방법에는 counter방법과 logic방법이 있다. counter방법은 단순한 숫자로 돌아가는 것으로 for문이 이에해당한다. logic은 조건의 T/F로 반복을 정하는 것으로 while문이 이에 해당한다. ⓑ 어디서 반복여부를 체크 할 것인가? > 제어를 체크하는 위치는 앞과 뒤의 경우에 따라서 ..

[프로그래밍 언어론] Statement - Level Control Structure Part 2 - Multiple Selection Constructs

* if문에 의해서 2개를 선택하는 구조가 생성되었다. 더나아가 사람들은 다중선택 구조를 설계하였다. 대표적인 다중선택 구조는 switch-case문이라고 할 수 있다. 이번엔 이 다중선택 구조에 대해서 알아보자. * 설계 이슈 ⓐ 표현식의 구조와 선택구문의 타입은 어떤 것으로 할 것인가? > (in C) switch(선택구문){ ... } ⓑ 어떤 case를 선택하게 할 것인가? (single, compound, sequential) ⓒ 전체가 하나로 묶여 있는가? > 캡슐화가 되어 있는가? ⓓ 각 case에 해당하는 제어단위는 어떻게 할 것인가? > 해당 case만 실행할 것인가? case이하의 모든 구문(case문은 생략)을 실행할 것인가? ⓔ case로 제공되지 않은 표현에 대한 처리는 어떻게 해..

[프로그래밍 언어론] Statement - Level Control Structure Part 1 - if

* Statement - Level Control Structure - 문장 수준에서 일어나는 제어 구조 - 제어란? 컴퓨터가 실행하는 순서와 다르게 실행 위치를 변경하는 행동 * 제어가 일어나는 단계 ⓐ 여러개의 수식이 있을 경우 - a + b + c + d * e : 컴퓨터의 실행 순서에 따르면 'a+b'부터 실행해야 하지만, 'd*e'부터 실행한다. > 이 경우는 연산자의 우선순위와 결합법칙에 의해 컴퓨터의 실행 순서와 다르게 제어가 일어난다. ⓑ 프로그램 단위당 - 함수나 Sub-Program > 함수 호출에 의해서 실행 위치가 변경된다. ⓒ 프로그램 안에서의 문장에 의해서 실행위치가 변경 ※ ⓐ는 이미 이전에 설명한 것이므로 Pass하고 이번엔 ⓒ를 중점적으로 살펴 보겠다. * 제어 구조의 탄생..

[프로그래밍 언어론] Expressions and Assignment Statements

* Arithmetic Expression (수학적 표현식) - 수학적 표현식은 다음의 4가지로 구성이 된다. > Operator(연산자), Operands(피연산자), Parentheses(괄호), Function calls(함수 호출) - 수학적 표현식을 나타낼때는 다음의 설계 이슈를 가진다. > 연산자 우선순위는 어떻게 할 것인가? > 연산자 결합법칙은 어떻게 할 것인가? > 피연산자들의 평가 순서는 어떻게 할 것인가? > 부작용에 대한 대처는 어떻게 해줄 것인가? > 다양한 타입이 섞여있는 표현을 허락할 것인가? * 연산자 우선순위 - 연산자 종류는 연산자하나에 오는 피연산자들의 수에 따라서 달라진다. > A unary operator(단항연산자) : -a, -1, ++a > A binary op..

[프로그래밍 언어론] Type Compatibility

* Type Compatibility = Type Equivalence = 타입 호환성 - 같은 선언문에 있거나, 같은 타입이름을 갖는 것 ex) int a, b, c; // 같은 선언문에 있다. int a; int b; // 같은 타입이름을 갖는다. - Compatibility 방식에는 이름을 가지고 하는 것과 구조를 가지고 하는 것 두 가지로 나뉜다. * Name Type Compatibility - 반드시 정규 파라메터와 실제 파라메터의 타입 이름이 같아야 한다. (formal parameters = actual parameters) - 구현하기가 쉽다. - 매우 제한적이다. ex) type indextype = 1...100; //indextype을 새로 정의, 이것은 integer 1~100만을..

[프로그래밍 언어론] Type-Checking

1. Type-Checking의 필요성 - 연산자에 제공되는 피연산자들이 호환이 가능한 Type인지를 판단하는 것이다. - 호환이 가능한 Type이란 무엇인가? > 원래 법칙상 모호성이 없는 것 / 즉, int타입들의 합이 int타입의 결과값에 들어간다는 것과 같은것 ex) int result; int i1 = 3; int i2 = 5; result = i1 + i2; // i1과 i2와 result가 모두 같은 타입으로 법칙상 모호성이 없다. > Coercion(묵시적 형변환)rule을 제공하는가? / 암암리에 컴파일러가 Type를 변환하는 것 ex) (In C) int_i = float_f1 + float_f2; // C언어의 경우 컴파일시 컴파일러가 경고만 해주고 자신이 알아서 타입변환을 한다. /..

[프로그래밍 언어론] Data Type part 5 - Pointer

* Pointer - 주소 값과 Null만 가지는 특수한 Type - 필요성 > 주소를 자유자제로 이동하기 > Dynamic 한 메모리 관리를 위해서 - 설계 이슈 ⓐ Scope ⓑ Heap-Dynamic Life time? ⓒ 포인터가 가르키는 타입에 맞춰서 Type을 명시하는가? 안하는가? ⓓ 동적 메모리할당과 주소를 가르키는 것 중 어떤 기능을 제공할 것인가?(둘다 제공도 가능) ⓔ 포인터 타입과 레퍼런스 타입을 모두 제공해주는가? * Pointer Operation int b = 3; int *ptr; ptr = &b; // '=' assignment가능 하다. printf("%d",*ptr); // Dereference 이 가능하다. * Pointer 사용에 따른 위험현상 ⓐ Dangling P..

[프로그래밍 언어론] Data Type part 4 - Union

* Union(ppt를 좀 많이보자... 설명의 한계) - 하나의 메모리에 두개 이상의 변수로 사용 하는 것 - 메모리 절약과 공통으로 공유할 정보를 효율적으로 공유할 목적으로 만듬. ex) 1024 주소를 a,b,c,d 변수가 동시에 가르키고 있다면, a = 24;를 하면 b = c = d = 24;도 같이 실행됨 - 설계 이슈 ⓐ Type checking을 해줄 것인가? > 타입 체킹을 해주면 신뢰성이 높아진다. > 타입 체킹을 하지 않을 시 생기는 문제점 > 만약, 어떤 주소를 int형 a와 float형 b와 char형 c변수가 동시에 가르키고 있을때, b = 1.5를 해주면 a = 1로 저장이 되면서 0.5의 데이터 손실이 생기면서 신뢰성이 크게 떨어진다. ex) (In FORTRAN) EQUIV..