프로그래밍 언어론제10장 부 프로그램부 프로그램(Subprogram or procedure)프로그램 모듈화의 단위 종류 함수(function) 함수 이름으로 값 반환 서브루틴(subroutine) 함수 이름으로 값 반환하지 않음프로시저의 구성Name Parameter list Body Environment Return valueprocedure Procedure_Name(Parameter_List) Declarations Body end Procedure_Name함수 반환 값반환 방법 함수 이름에 결과값을 배정 RETURN 문으로 결과값 반환 반환 값 종류 FORTRAN, ALGOL 60 : 스칼라형(실수, 정수, 논리형 등) Pascal : 스칼라형, 포인터 PL/I : 스칼라형, 포인터, 문자열 Ada : 모든 자료형(배열, 레코드 등 포함)프로시저에서 사용되는 식별자프로시저에서 사용되는 식별자의 종류 형식 매개 변수 지역 변수 비지역 변수형식 매개변수, 실 매개 변수실 매개 변수(Actual parameter) 부 프로그램으로 전달하기 위하여 호출 시 사용된 식 또는 이름 형식 매개 변수(Formal parameter) 부 프로그램이 실행될 때, 실 매개 변수를 대신하여 사용되는 이름 프로시저의 정의부에서 명명되어 일반적으로 지역 변수 역할형식 매개 변수, 실 매개 변수형식 매개 변수와 실 매개 변수의 대응 방법 순서 대응 형식 매개 변수와 실 매개 변수가 순서대로 대응 이름 대응 실 매개 변수에서 대응되는 형식 매개 변수 이름 사용값 전달 기법(Call by value)값 전달 기법(Call by value) 형식 매개 변수의 지역 변수화 실 매개 변수 값을 대응 지역 변수로 복사 호출된 부 프로그램은 r-value를 구하여 형식 매개 변수의 기억 장소에 복사하고, 이후 다른 지역 변수와 동일하게 취급 실 매개 변수 값 불변procedure p (x, y) call p (a, b)axbycopycopy참조 전달 기법(Call by reference)실 매개 변수 주소를 대응되는 형식 매개 변수에 보내는 방법 procedure p (x, y) call p (a, b)axbyCall-by-reference effect in C languageTrue call by reference?Pointer argument in C Pointers can be pointed to another object at any timeCall by reference in C++Reference in C++ A reference must be initialized when it is created Pointers can be initialized at any time Once initialized, it cannot be changed to refer to another object Pointers can be pointed to another object at any time You cannot have NULL references결과 전달 기법 (Call by result)실 매개 변수에서 형식 매개 변수로 값이 전달 되지 않음 형식 매개 변수의 초기 값은 미정의 형식 매개 변수는 지역 변수 취급 최종적 연산 결과를 실 매개 변수에 복사하여 반환 호출 프로그램에서 호출된 부 프로그램으로 정보 전달은 이루어 지지 않고 호출된 부 프로그램에서 호출 프로그램의 정보 전달만 이루어 지는 것procedure p (x, y) call p (a, b)axbycopycopy값-결과 전달 기법(Call by value-result)값 전달 기법과 결과 전달 기법을 함께 사용한 방법 실 매개 변수는 형식 매개 변수로 사본이 전달 됨 최종 결과는 형식 매개 변수들을 원래의 실 매개 변수로 복사 Copy-in, Copy-outprocedure p (x, y) call p (a, b)axbyCopy-inCopy-inCopy-outCopy-out참조 전달 기법과의 차이점No aliasing effect in call by value-result이름 전달 기법 (Call by name)형식 매개 변수의 이름이 사용될 때마다 그에 대응되는 실 매개 변수 자체가 사용된 것으로 간주 필요한 r-value 또는 l-value를 매번 계산 단점 구현 난해 프로그램 판독성 난해123456789A[0]A[1]A[2]A[3]A[4]A[5]A[6]A[7]A[8]10A[9]3i형식 매개 변수 명세실 매개 변수와 형식 매개 변수와의 정적 형 검사를 위해 형식 매개 변수 명세를 사용 형식 매개 변수 명세 자료형, 전달 기법, 초기 값, 대응 관계 등 각종 언어의 형식 매개 변수 명세 Pascal 값 전달 기법 기본 참조 전달 : var 선언 Algol 60 이름 전달 기본 값 전달 : value 선언 Ada 값 전달 : in 선언 결과 전달 : out 선언 값, 결과 전달 : in out 선언 형식 매개 변수의 초기값 선언 가능프로그래밍 언어에서 유해한 특징들프로그래밍 언어의 유해한 특징 GOTO 문 부작용 (side effect) 지역 변수 이외의 변수 값을 변경 매개 변수 전달 기법 : Call by reference 이명(aliasing) 한 단위 프로그램 내에서 동일 기억 장소를 사용하고 있는 서로 다른 변수 이름 한 변수 값을 변경하면 동일 장소를 이용하는 변수의 값을 동시에 변경연산자 중복 표현(Operator overloading)중복 표현(Overloading) 명칭, 함수 이름, 연산자 등이 두 가지 이상의 개념으로 사용 하나의 자료형 또는 자료 구조에 여러 가지 의미 부여 정수형 덧셈, 실수형 덧셈, … 동일한 이름이나 연산자를 문맥에 따라 적용 가독성(Readability) 증가 연산자 중복 표현 특정 연산자에 대해 주어진 연산자 개념 이외에 새로운 의미를 사용자가 추가 function * (X, Y : MATRIX) return MATRIX; … A = B * C ;자료형 MATRIX는 별도 선언 B, C가 MATRIX 형 - 위 함수 정의대로 수행 B, C가 integer 형 - 정수 곱셈 B, C가 real 형 - 실수 곱셈중복 표현 연산자를 결정하기 위한 방법 연산자의 의미를 문맥상에서 컴파일러가 결정 자료형 정보를 파스 트리 형태로 구성COMPLEX C INTEGER I REAL R . . C = 2 * I + R(complex)(complex)=+ (real)* (integer)C2(integer)I(integer)R (real)Operator overloading in C++포괄 기능(Generic Functions)포괄 프로시저(generic procedure, template) 하나 이상의 자료형을 매개변수로 받아들여 동일한 기능을 수행 컴파일 시간에 실제 자료형에 알맞은 프로시저 생성 실제 프로시저는 번역시 정적 생성 (instantiation) 프로그래밍 작성 오류(coding error) 감소 프로그램의 길이 축소 추상화 개념 제공 매크로(macro)의 확장된 개념Sort procedureintegerdoubleFloatTemplate in C++코 루틴(Co-routines)부 프로그램간의 관계 주종 관계(Master-slave relation) 호출된 프로그램의 수행을 종료한 후 호출 프로그램의 수행 재개 대칭적 관계(Symmetric relation) 코 루틴 코 루틴(Co-routine) 호출된 프로시저의 수행이 종료되기 전에 호출 프로시저로 제어 반환 제어를 반환한 프로시저는 일시적으로 수행 중지(suspend) 정지된 부분은 코 루틴의 시작으로 수행 재개(resume) resume문장의 수행으로 다른 프로시저 호출 결과값 반환문(return statement)이 존재하지 않음Resume ABResume BResume BResume BAResume A코 루틴 사이의 제어 수행도{nameOfApplication=Show}
프로그래밍 언어론7장 자료형7.1 자료형과 형 선언7.1 자료형과 형 선언 자료형 - 객체 집합 + 연산(생성, 작성, 소멸, 수정, 분해) 예) 명령형 PL 기본 자료형 : 정수, 실수, 문자, 논리 등 자료형의 범주 ① 내장 자료형 - 표현법, 연산 ② 사용자 정의 자료형 기본 자료형Fortran 77Algol 60PascalAdaINTEGER REAL LOGICAL CHARACTER DOUBLE COMPLEXinteger real booleaninteger real boolean charinteger float boolean character natural duration priority자료형과 형 선언자료형 기법(typing mechanism) 자료형을 정의하고, 변수를 특정 자료형으로 선언하는 설비 기존 언어에서 제공 - Fortran : 빈약한 제공, 최근언어 : 다양한 제공 변수 자료형 선언 ① 정적인 자료형 검사 ② 명세부를 구현부와 분리 추상 자료형 ③ 프로그램 신뢰성 증가 ③ 프로그램 판독성 증가 자료형 쟁점 사항 자료형 정보의 바인딩 시점(번역시간 또는 실행시간) 강 자료형(strongly type) 신뢰성, 유지보수성, 판독성 증가 자료의 적법성(compatibility)과 동치 관계 자료형의 매개 변수화와 매개변수의 평가 시점자료형의 구성원 (객체, 요소, 값) - 영역(domain) 구성 자료형의 영역이 상수 값들일 경우 - 스칼라 형7.2 열거 자료형열거 자료형(Enumeration Type) 사용되는 자료집합을 리스트 형태(순서 정의) 로 정의 열거형 연산 - 동등관계, 순서 관계, 배정연산 허용 열거형 연산은 프로그래밍 언어의 능력을 향상 예) Pascal의 열거형 사용 예 type months = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); var x, y, z:months; ... x :=Jan ; y :=Jun ; if x = y then z := Nov el수에 배정 예) 14H HONG KIL DONG PL/I : 매우 다양한 문자 처리 기능 제공 DCL A CHAR(10); DCL B CHAR(80) VARYING; DCL C PIC 'AAXX99';A - 길이 10인 문자열 B - 최대 길이 80인 문자열 C - 영문자(2) +임의 문자(2) + 숫자(2)의 문자열기본 자료형PL/I 에서의 문자열 연산 ( |, INDEX, LENGTH, SUBSTR, TRANSLATE, VERIFY) PL/I 에서 문자열 처리 예 DCL A CHAR(15) , (B , C , D) CHAR (20) VARYING; A = 'WHAT,' | '?' | 'ME' | '?' | 'WORRY?'; A에 WHAT,?ME?WORRY?' 저장 LENGTH(A) 길이 15 반환 SUBSTR(A, 7, 2) 'ME' 반환 SUBSTR(A, 7, 2) = 'US' A에 'WHAT,?US?WORRY?' 저장 INDEX(A, B) A에서 문자열 B의 시작위치 반환(없으면 0)기본 자료형VERIFY(GSTRING , 'ABCDEFGHIJKLMNOPQRSTYVWXYZ') GSTRING에서 두 번째 파라메터에 없는 문자의 위치 반환 TRANSLATE(A , '-' , '?') A를 'WHAT,-ME-WORRY-' 로 변환 Pascal (PL/I의 문자열 처리 기능 제거 고비용 ) char 자료형 만 존재 문자열 : 문자형 1차원 배열 문자열에 대한 함수 없음 ord(c), chr(x) 함수 제공기본 자료형Snobol 문자열 기계 독립적(Machine independent) 구현 문자열 연산 사용 예 1) 연결 연산 - 공백 Y = 'UP' X = 'HURRY' Z = X Y 문자 연결 연산('HURRYUP') 2) 널 문자 배정 X = 3) 패턴 매칭(Pattern matching) ① [ label ] subject pattern [:goto ] /* 레이블은 첫열 시작 */ AXIOM = 'SNOBOL IS A NIFTY LANGUAGE' AXI1.. numberofdays] of real; 고정 크기의 배열 , 판독성, 유지보수 편리성 제공구조 자료형 - 배열Ada (동적 배열 허용) type SEQUENCE is array(INTEGER range ) of FLOAT; type SEQREF is access SEQUENCE; P:SEQREF; . . . P := new SEQUENCE(M .. N); 동적 배열(dynamic array) 허용 언어 Ada, PL/I, Algol60, Simula 등 Heap에 할당 후 포인터에 배정 배열 저장 순서( A(1:2, 1:3)에 대해) 행 우선(row major) : 대부분 언어 A(1,1), A(1,2), A(1,3), A(2,1), A(2,2), A(2,3) 열 우선(column major) : Fortran A(1,1), A(2,1), A(1,2), A(2,2), A(1,3), A(2,3)구조 자료형 - 배열배열 명세표(descriptor) 배열의 정보 저장 테이블 배열 이름, 원소형, 길이, 시작 주소, 차원 수, 각 차원 상/하한 값 명세표 사용 예one locationA1realα-22real A(-2:2)배열명첨자 상한원소형원소 길이차원수시작주소첨자 하한13.3.45.521.14.3αα+1α+2α+3α+4A(-2)A(-1)A(0)A(1)A(2)one locationB2integerβ02integer B(0:2,1:2)배열명첨자 상한원소형원소 길이차원수시작주소첨자 하한13352114ββ+1β+2β+3β+4B(0,1)B(0,2)B(1,1)B(1,2)B(2,1)12첨자 하한첨자 상한25β+5B(2,2)구조 자료형 - 배열원소의 저장 위치 (행 우선 시) 1차원 배열 A(L : U) A(i)의 저장 위치? Loc( A(i) ) = Base Address + (i - L) * SA(L)A(L + 1)A(L + 2)...A(i)Base AddressS bytes per element...Loc( A(i) ) ?구조 자료형 - 배열원소의 저장 위치 (행FFLIGHTS; end record; . . . X, Y : LISTOFFLIGHTS; . . . X.RETURNFLIGHTS := Y;X.RETURNFLIGHTS : FLIGHT형을 가리키는 포인터 (여기서는 Y를 가리킴) 사용 X.RETURNFLIGHTS.FLIGHTNO X.RETURNFLIGHTS.SOURCE구조 자료형 - 레코드가변부(variant part) 판별자를 이용한 필드들의 택일 변환 기술 Ada, Pascal 가변부 : case문 사용 Pascal 예 type listptr =↑listnode; type listnode = record link:listptr; case tag:boolean of false : (data : char); true : (downlink : listptr) end var p, q : listptr Pascal과 같은 가변부의 사용은 심각한 오류 발생 유도 (판별자 값만 바뀌고 내용이 변화되지 않은 상태에서 접근하는 경우)판별자 tag 값에 따라 필드 결정 1) tag = false이면 data 필드 생성 2) tag = true이면 downlink 필드 생성 다음 문장 가능 p↑.tag := true; p↑.downlink := q; p↑.tag := false; writeln(p↑.data)구조 자료형 - 레코드C언어 판별자를 갖지 않은 공용체 - 자유 공용체 union data { int num; char ch; char array[4]; } BOX;구조 자료형 - 레코드EUCLID 매개변수화 선언 : 실행중 판별자 값이 변함으로써 발생되는 오류 제거 var x:listnode(true) var y:listnode(false) var z:listnode(any) 위의 예제에서 z := y는 가능, y := z 불가 해결 방법 case discreminating w = z on tag of true = x := w; end false = y := w; end end case Ada : 매개 변수화 선언에 any71~8, 18~199~171~8, 18~19각 변수 영역 줄 번호1 a : begin integer i, j; real x, y; 2 b : procedure test(integer a, b) 3 begin boolean i; 4 . . . 5 x := i * j + y; 6 . . . 7 end b; 8 . . . 9 c : begin integer x, y; real i, j; 10 . . . 11 d : begin boolean j; 12 . . . 13 call test(x, y) 14 . . . 15 end d; 16 . . . 17 end c; 18 . . . 19 end a;정적 영역 규칙과 동적 영역 규칙동적 영역 규칙(Dynamic scope rule)1) 주프로그램에서 “SUB 2” 호출 SUB X, Z : 전역변수(주프로그램) Y : 지역변수 1-1) SUB에서 “FUN I” 호출 FUN Y : 비지역 변수(SUB) X : 지역변수 2) 주프로그램에서 “FUN Y” 호출 FUN Y : 전역변수(주프로그램) X : 지역변수SUB I; Y : I는 형식 매개 변수Z FUN I;XYFUN N; X : N은 형식 매개 변수XYZ0X5Y7SUB 2 Z FUN Y: 2 는 실 매개 변수 : Y는 실 매개 변수, 결과를 Z에 배정주프로그램부프로그램 SUB함수 부프로그램 FUNX는 지역변수: Y는 지역변수정적 영역 규칙과 동적 영역 규칙program scope; var a, b : integer; begin a :=p; q; end scopefunction p : integer; var a : integer; begin a :=0; b :=1; p :=2 end p;procedure print; begin write(a); write(b); writeln(p) end print;procedure q; var b, p : integer; begin a :=3; b :=4; p :=5; print end q;실행과정 1) scope 실행 2) 함수 p 호출ow}
프로그래밍 언어론4장 프로그래밍 언어 구현 기법 속성과 바인딩가상 컴퓨터(Virtual computer)컴퓨터(Computer) 프로그램을 저장하고 실행할 수 있는 알고리즘과 자료를 저장하는 자료구조의 집합 Actual computer VS. Software simulated computer 가상 컴퓨터(Virtual computer) 하드웨어 + 소프트웨어computerhardware운영 체제Cobol번역기운영체제명령어번역기C++번역기.......Ada번역기어셈블러Lisp인터프리터가상의Cobol컴퓨터가상의C++컴퓨터가상의Ada컴퓨터가상의Assembly언어컴퓨터가상의Lisp컴퓨터프로그램 언어 구현 - 번역 기법번역기(Translator) 특정 언어로 작성된 프로그램을 입력으로 받아 그와 동등한 의미를 가진 다른 프로그래밍 언어를 출력해 주는 시스템 프로그램 고급 언어의 프로그램을 번역하여 동등한 의미를 가진 기계어 프로그램을 출력 컴파일러, 어셈블러, 로더, 링커, 전처리기TranslatorSource language : High/low level languageTarget language : High/low level language컴파일러(Compiler) 원시 언어 : 고급 언어 목적 언어 : 실제 기계어에 가까운 준 기계어, 어셈블리 언어 준 기계어? Re-locatable code, object code 어셈블러(Assembler) 원시언어 : 어셈블리 언어 목적 언어 : 준 기계어Prog. AOS, TSR, ...Func. FProg. BOS, TSR, ...Func. FRe-locatable code링키지 에디터(Linkage editor, or Linker) 여러 개의 프로그램(재배치 형태 기계어)을 묶어서 로드 모듈 생성 로드 모듈 어느 정도 실행 가능한 하나의 기계어 프로그램 로더(Loader) 기계어 프로그램(로드 모듈)을 실제 실행 가능한 기계어로 번역해서 주기억 장치에 적재전처리기(Pre-processor) 프로그래밍 언어에 유용한 기능 대한 선택 번역기에 의해 결정되는 바인딩 프로그래머의 지정 없이 번역 시간에 번역기에 의해 수행 FORTRAN에서 변수에 대한 기억 장소 할당은 로드 시간에 결정 목적 프로그램에 대한 원시 프로그램의 바인딩 동작은 대부분 번역기에 의해 수행언어 구현 시간 바인딩 프로그래밍 언어 정의 시에 각 프로그래밍 원소들에 대한 특성을 지정하지 않고 실제로 구현 시간에 특성을 지정하는 방법 정수, 실수 등의 표현들과 수행될 수 있는 연산 동작의 결정은 하드웨어 구조에 의존하므로 실제로 언어 구현시간에 바인딩 구현 시간에 지정된 특성을 이용하는 프로그램은 구현 환경이 다른 경우에는 실행이 불가능 대부분의 프로그래밍 언어의 구현은 구현시간 바인딩을 최소화 언어 정의(설계) 시간 바인딩 대부분의 프로그램 구조는 언어 정의 시에 결정 자료 구조, 프로그램 구조, 택일문, … 혼합형 연산이 허용되는 덧셈, 곱셈에서 오퍼랜드의 형에 따라 어떤 연산이 실행될 것인가 등x := y + 10;바인딩 시간바인딩 동작언어 정의(설계) 시간사용할 수 있는 자료 형 (integer, float, double, char, …) 연산자 평가순서, 우선 순위언어 구현 시간정수, 실수 등 자료 형에 대한 표현 방법 (상수의 표현 방법 등) 연산에 대한 기계어 코드 연산의 유효 숫자, 한계 값번역 시간이름과 형의 바인딩(x, y의 자료 형) 형에 따른 기억 장소의 크기 기억 장소에 상수 값 할당실행 시간이름과 값의 바인딩(x, y의 값) 오퍼랜드의 종류에 따른 연산의 실제 종류 (혼합 연산의 경우)Early bindingLate binding바인딩 시간의 중요성언어들간의 중요하고, 미묘한 차이점은 바인딩 시간의 차이점에서 발생 예) 큰 배열에 많은 연산이 포함된 문제는 FORTRAN이 적당 번역시 대부분의 바인딩이 이루어지고 실행 시에는 극히 일부만을 바인딩 배열의 크기나 자료형이 실행 시 변화되는 자료형의 처리는 SNOBOL 4가 적당 번역시 바인딩이 거의 이루어지지 않고, 입력 자료를 읽어 들여 자수 있음 [x]는 {x}01과 같은 의미if_statement ::= if condition then statement [else statement ]선택적 택일 메타 심볼 ( )와 |를 사용 여러 생성 규칙들을 묶어서 간단히 표현 exp ::= exp + exp | exp - exp | exp * exp | exp / exp exp ::= exp ( + | - | * | / ) exp 메타 심볼이 터미널 심볼로 사용되는 경우 터미널 심볼은 ' '로 묶어서 표현 BNF_rule ::= left_part '::=' right_part right_part ::= right_part_element { '|' right_part_element }예) Subpascal 시작부에 대한 EBNF 표기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구문 도표(Syntax diagram)그 형태가 순서도와 유사 EBNF와 일대일 대응 정의 대상은 네모 칸으로 표현 터미널은 원이나 타원으로 표현 이들 사이는 지시 선으로 연결XBTerminal xNon-terminal BA ::= X1 X2 … Xn Xi가 nonterminal인 경우 Xi가 terminal인 경우 A ::= a1 a2 … anAX1X2Xn...A...x1x2xna2ana1...AEBNF A ::= {a} EBNF A ::= [a] EBNF A ::장 A ← B B의 l-value (B의 주소)를 변수 A에 저장 Algol 68 선언문에서 “ref” 사용하여 l-value 표현 e.g.) ref int x (* 변수 x를 integer 선언 *) int y (* y는 integer 상수로 선언 *) ref ref real z (* 변수 z는 real값이 들어 있는 위치에 대한 포인터 *)배정문의 구현배정문 A := expr 에 대한 구현 l-value 중심 배정 ( Fortran, C 등 컴파일러 언어가 사용) “수식 e를 계산하고, A의 속성으로 변환 후 배정” 효율적인 기억장소 경영 정적 형 검사 빠른 접근 효율성 증가 r-value중심 배정 (APL 등 인터프리터 언어가 사용) “수식 e를 계산하고, A의 속성을 e의 계산 결과와 동일한 속성으로 변환 후 배정하는 기법” 동적 형 검사 불필요한 변환 없음 적응성(flexibility) 증가배정 연산에 관한 기타사항이명(alias) 2개 이상의 변수가 동일한 기억 장소를 참조할 때에 이들 변수 사이의 관계 X는 Y에 이명(aliasing) - (역도 성립 : Y는 X에 이명) Fortran의 EQUIVALENCE, Cobol의 REDEFINES, C의 union (기억장소 공유) 기억 장소 공유가 프로그램의 심각한 오류 발생, 최적화에 방해 Euclid : 주요 설계 목적으로 aliasing 제거 노력, 완벽하지 못함 C : 포인터 변수를 이용한 alias 발생 alias가 매개변수에 의하여 발생되기도 함 (call by reference의 경우)이명(Aliasing)아규먼트 평가 순서 배정 연산 순위 a[b←1]←b A[x]←P(x) N1,N2,…,Nk := e1,e2,…,ek p, q := q, p (서로 값이 교환될까?) b[I], b[j] := p, q ( i = j 일 때 결과는?)해석 방법 1) b←1, a[b] ← b 2) a[b] ← b, b←1x가 p(x)에서 변경 될 경우 - A[x]와 P[x] 중 누가 먼저 평가되나? - Pascand1, operand2를 계산한 후 연산자 op를 적용 논리 연산에서는 이 적용 순서를 바꿀 수 있는 특성이 있음 예 (1) x ≠ 0 or y / x 1 (2) x ≠ 0 and y / x 1 (1)의 경우 : x가 0이 아니면 무조건 참 (2)의 경우 : x가 0이면 무조건 거짓, 더구나 x 값이 0일 때는 값이 거짓으로 결과가 존재하나, 위의 적용 순서를 따르면 y / x에서 overflow 발생 이러한 경우 일부 언어에서는 Short circuit 평가 기법을 제공조건문(Conditional Statements)조건문 FORTRAN IF (BCOND) L1 , L2 IF (ACOND) L1 , L2 , L3 IF (BCOND) STMT Algol60 if cond then S1 else S2STMT 는 단일 문장 GOTO문 요구, 판독성 저하택일문 처리 S1, S2 : 복합문 가능CASE 문 - if-then-else를 확장한 택일문 Algol-w(Hoare, Wirth) case integer expression of begin S1;S2;. . .;Sn end Pascal case expr of case label list : stmt ... case label list : stmt endinteger expression : (1 ~ n) 정수 임의 i 이면 Si 실행열거형 도입 case label list 는 expr 의 상수Pascal case문 사용 예 case thismonth of Feb, Apr, Jun, Jul, Aug : birthday := 4; Sep : birthday := 1; Jan, Mar, May, Oct, Nov, Dec :birthday := 0; end; Ada others절 도입 열거형과 부분범위(range)형 예 case thismonth is when Feb|Apr|Jun..Aug ⇒ birthday := 4; when Sep ⇒ birthday := 1; when others ⇒ birthday := 0; e}
프로그래밍 언어론1장 프로그래밍 언어 소개언어? 의사 소통하는 방식(언어) 생각하는 방법(사고)프로그래밍 언어란?WorldProblem space프로그래밍 언어?프로그래밍 언어 컴퓨터에 대한 이해와 활용에 영향 컴퓨터의 발전 컴퓨터에 대한 생각 프로그래밍 언어의 변화 요구프로그래밍 방법컴퓨터에 대한 생각프로그래밍 언어프로그래밍 언어의 정의 “컴퓨터와 의사 소통하기 위한 표기법” ? 프로그래밍 언어의 등장 1940년대 이전에는 Hard-wired 방식으로 프로그램(프로그램 언어?) 1940년대 이후 폰 노이만(Von Neumann) 방식 등장 CPU가 처리해야 할 명령들을 일련의 명령 코드로 작성 “프로그래밍” 개념 시작 어셈블리 언어 탄생(Symbol) 사용 기계 종속적 저급 수준의 추상화 읽고 쓰기 어려움 고급 수준의 추상화 요구 : 고급 언어 등장 간략한 프로그램 이해 용이 이식성(portability) 증가Z := X + YLDA X ADD Y STA Z“기계가 읽을 수 있고, 사람이 읽을 수 있는 형태로 계산을 기술하는 표현 체계”기계 독립적 추상성 제공 자연어 형태, 모국어 프로그램의 대형화 프로그램 언어가 S/W 개발 환경에 포함되는 경향효과적 번역 가능 단순 구조 언어 단순 번역 알고리즘 존재 제한된 시간 내 번역 가능 문맥 자유 언어일반적으로 컴퓨터가 처리할 수 있는 모든 작업 튜링 머신의 수학적 개념으로 형식적인 정의 가능Human readableMachine readableComputationPL프로그래밍 언어를 배우는 이유프로그래밍 언어를 쉽게 이해 프로그래밍 구사 능력 증가 프로그래밍 언어 선택 능력 증가 새로운 프로그래밍 언어에 대한 습득 용이 프로그래밍 언어 설계 능력 증대Add a with b프로그래밍 언어에서의 추상화추상화(Abstraction)의 개념 객체의 중요하지 않은 상세한 내부의 내용을 숨기고 간략히 나타내는 것 속성들의 일부분만을 가지고 주어진 작업이나 객체들을 필요한 정도로 묘사할 수 있는 방법을 지원 하는 것 필수적인단위 프로그램 화 지원 도구 : library형태 지원 C++, Object Pascal, Smalltalk : class Modula-2 : module Ada : package계산 전형(Computational Paradigm)명령형 언어(Imperative L.) 또는 절차적 언어(Procedural L.) 특징 기계 중심의 언어 명령의 순차적 실행 기억 장소를 표시하는 변수의 사용 변수의 값을 변경하기 위한 배정문의 사용 대표적 언어 C, Ada, Pascal, FORTRAN, BASIC 등 대부분 언어 문제점 계산이 순차적 명령어에 의해 실행되므로 폰 노이만 병목현상 발생 많은 자료의 동시 계산, 비 결정적 계산, 순서에 의존하지 않는 계산등에 비 효율적함수형 언어(Functional L.) 또는 적용형 언어(Applicative L.) 특징 함수의 평가와 함수 적용을 기본으로 함 변수, 배정문이 없음 반복적인 연산은 재귀적 함수 이론에 의해 기술 됨 대표적 언어 Lisp, APL, Hope논리형 언어(Logical L.) 또는 선언적 언어(Declarative L.) 특징 기호 논리학에 근거 계산의 실행 순서를 기술하는 대신 무엇을 하려고 하는지를 선언 반복이나 선택 개념 불 필요 대표적 언어 Prolog, Snobol4, SETL, SQL객체 지향 언어(Object-Oriented Language) 특징 객체에 기반을 둔 언어 객체란 상태를 의미하는 기억 장소와 상태를 변경할 수 있는 연산의 집합 객체는 클래스로 그룹화 Simula-67에 의해 객체 지향 방법 소개 대표적 언어 C++, Java, Object-Pascal, Smalltalk, Simula-67,언어 정의프로그래밍 언어의 정확한 형식 정의가 필요한 이유 언어의 구조와 계산에 적용되는 의미의 정확한 기술 없이 어떻게 프로그래밍해야 할 지를 아는 것은 불가능 함 언어가 모호함 없이 구현되기 위해 프로그래밍 과정에서 프로그램이 어떻게 동작할 것인가에 대한 문제 발생시 참고가 됨 프로그램 nemonics) 기계 의존적 자연어와 상이한 구문 1950년대 중반 Fortran (FORmula TRANslation) 1954 ~ 1957, IBM의 John Backus에 의해 고안된 최초의 고급 언어 Fortran II, Fortran IV, Fortran 66, Fortran 77, Fortran 90으로 발전 효율적인 기계어 코드를 생성하는 것을 목적 배열, 반복 구조, 분기문, 부 프로그램 등은 이후 언어에 큰 영향 이후 추가된 특징 부 프로그램 간 통신 기법 전역, 지역 변수 개념 등장 공유 변수 사용 방법 구현 주소에 의한 매개 변수 전달 기법 사용1950대 후반 COBOL (Common Business-Oriented Language) 1959 ~ 1960, 미 국방성의 Grace Hopper에 의해 고안 상업 자료 처리용 사용자들이 프로그램을 읽기 쉽고, 이해하기 쉽게 하는 것이 목적 언어의 특징 레코드 구조 도입 자료 구조와 실행 부분을 분리 “ PICTURE”를 써서 원하는 출력 양식의 가변성 부가 단점 문법이 복잡하여 복잡한 알고리즘을 프로그램하기 어려움 현재, 가장 널리 쓰이는 언어 중 하나ALGOL 60 (AlGorithmic Language 60) 1958 ~ 60 알고리즘 서술을 위한 일반적인 표현 언어 특징 양식의 자유화(Free format) 구조적 명령문 Begin ~ End 블록, 스택 기반 실행 환경 자료형 검사 및 자료형 표기법 등장 생존 범위(Life time) 및 범위 규칙(Scope rule)개념 등장 Call by value, Call by reference Backus-Naur Forms(BNF) 최초로 사용 정적 기억 장소 할당 및 동적 기억 장소 할당 세계적으로 광범위하게 사용되지는 않았지만 60년대에 가장 큰 영향력을 지닌 언어로서 이후의 언어에 막대한 영향을 미침 Pascal, Modula 2, Ada, CLisp (LISt Processor) 1950년대 후반, MIT의 John McCarthy에 anguage 부 프로그램(Sub program) Function, Procedure 다양한 자료형 제공 정수형, 실수형, 문자형, 논리형, 복합형(Composite type) 단점 분리 컴파일(Separate compilation)이 불가능 스트링 형(String type)을 제공하지 않음C (1972, Bell Lab.의 Dennis Ritchie) Pascal과는 다른 각도의 간결성 추구 수식 위주, 형 시스템(type system)과 실행 환경 축소 하드웨어 접근 용이 운영 체제 프로그래밍 용으로 개발 C언어로 작성된 Unix의 성공으로 대중화에 성공 현재 가장 널리 사용되고 있는 언어 중 하나간결성, 소 그룹의 고안에 의한 디자인 일관성C, Pascal1970년대 중, 후반 언어적 특징 자료 추상화, 병행성, 증명 등의 메커니즘을 집중적으로 시도 1970년대 중, 후반에 등장한 언어 CLU(1974 ~ 77, MIT의 Babara Liskov) 추상화 기법을 위한 일관성 있는 접근 방식이 목적 자료 추상화 제어 추상화 예외 처리 방식 Cluster를 통한 자료 추상화 Simula의 class와 유사 iterator를 통한 제어 추상화 Ada와 유사한 예외 처리 구조 제안Euclid (1976 ~ 77, 토론토 대학) Pascal을 개선한 언어 프로그램의 형식적 검증이 목적 Pascal의 단점인 이명(Aliasing, 별명) 개선, 자료형의 추상화, 프로그램의 증명 보조를 추가 Mesa (1976 ~ 79, Xerox의 Palo Alto연구소) Pascal 구조 모듈 구조, 예외 처리기, 병행성, 병렬 프로그래밍의 개념 추가 운영체제 등 시스템 프로그래밍 용 Modula-2 메커니즘 고안에 지대한 영향80's : 통합과 새로운 방향1980년대 언어의 특징 Ada의 등장 함수형 언어에 새로운 관심 부여 Scheme, ML(Meta Language) 개발 논리형 프로그래밍 언어인 Prolog 등장 객체 지향 언어에 대한 활발한 연구 및 개발 1980년대에 어프로그래밍 언어론3장 프로그래밍 언어 설계주요 언어의 성공 요인 및 설계 목적주요 언어의 성공 요인 주요 언어의 설계 목적언어성 공 요 인Fortran컴퓨터 제조회사의 후원COBOL미 국방성 지원LISP인공 지능 분야에서 사용Pascal교육용, 마이크로 컴퓨터 표준 언어 역할PL/1IBM의 적극적인 후원CUNIX운영 체제의 성공Ada미 국방성 지원언어설 계 목 적Fortran실행의 효율성COBOL영어와 유사한 문법구조로 프로그램 판독성 용이Algol 60블록 구조 제공으로 알고리즘 작성 용이Pascal간단한 명령형 언어, 하향실 설계 증진역사와 설계 기준1950년대 초기에는 실행의 효율성 중시 (Fortran) COBOL, Algol 60의 등장으로 효율성 보다 일반적 원칙 중시 Algol 60 블록 구조, 재귀적 용법으로 논리적으로 간결 명료한 알고리즘 표현 용이 COBOL 영어와 유사한 문법 구조를 채택함으로써 프로그램 판독성 증가 1960년대 복잡성 제어(Complexity control) 필요성 인식 추상화 기법 언어 규칙과 제한의 감소 필요성 Simula 67 강력한 추상화 기법 제공 Algol 68 언어의 복잡성 감소1970 ~ 80년대 초 간결성(Simplicity), 추상화(Abstraction)강조 Pascal, C, Euclid, Modula-2, Ada 언어 구성에 수학적 정의 도입 프로그램의 신뢰성 증진 도모 1980년대 언어에 논리 또는 수학 개념의 삽입 증진 논리를 프로그래밍 언어 자체에 포함 함수형 언어 ML, Miranda, Scheme 객체 지향 언어 C++프로그래밍 언어 설계 원칙언어 설계의 기본 원칙 효율성(Efficiency) 일반성(Generality) 직교성(Orthogonality) 단일성(Uniformity, 획일성) 기타 설계 원칙 간결성(Simplicity) 기계 독립성(Machine independence) 확장성(Extensibility) 정확성(Preciseness) 표현력(Expressiveness) 보안}
목조주택 이란?목조주택이란 무었인가 알아야 할 것 같다. 주택을 포함한 모든 건축물을 건축할 때에는 그 공정상 크게 두가지로 나누어진다. 첫째는 뼈대를 이루는 골조(구조체)공정이고, 둘째는 그 뼈대에 살을 입히고 화장을 하는 마감공정이다. 목조주택이란 이 두가지 공정 중 뼈대를 이루는 구조체를 목재로 건축한 주택을 말하며, 만약 구조체를 벽돌로 하였다면 조적조주택, 구조체를 콘크리트로 하였다면 콘크리트주택, 구조체를 철골로 하였다면 철골주택으로 분류 할 수 있는 것이다.즉, 목조주택이란 목재를 구조체로 하여 지어진 주택을 말한다.목조주택의 특징1. 쾌적한 실내 환경 유지목재를 구조재로 사용하는 목구조주택은 수분과 공기가 안팎으로 드나드는 성질을 갖고 있다. 실내의 습도가 높을때는 외부의 수분을 흡수하고 반대로 건조할 때는 목재가 갖고 있는 습기를 실내로 방출하여 쾌적한 상태를 유지시킨다. 밀폐된 아파트의 경우 환기가 제대로 안되는 불편함이 있으나 목구조주택은 환기를 자주 시키지 않아도 항상 신선한 실내 공기를 유지한다.2. 높은 단열 성능적정하게 시공된 경량 목구조는 일반적으로 에너지 효율이 매우 뛰어나다. 목재의 단열성은 콘크리트의 7배, 철의 176배, 일반 단열재의 1.5배이다. 최근 시공방법은 더욱 두꺼운 단열재를 사용하거나 외장 마감 전에 벽체에 고형 단열재를 시공하는 방법으로 단열 효과를 더욱 높이고 있다. 또 스터드, 장선, 서까래 사이의 중공을 유리섬유와 같은 단열재로 충진함으로써 높은 단열성능을 발휘하게 된다. 실제로 같은 평수의 목구조주택과 일반 주택을 비교할 때 냉.난방비를 30%정도 절약할 수 있다.3. 내화구조에 의해 화재 안전경량 목구조의 내화성능은 일차적으로 내장 석고보드에 의존한다. 벽과 천장에 시공된 석고보드는 20분에서 2시간의 내화성능을 지닐 수 있다. 석고보드가 구조용 목재로부터 폭발성 물질의 접촉을 충분히 보호하기 때문에 상대적으로 화염의 진행속도가 느리며 일정 치수 이상의 목재는 강철보다 열전도율이 훨씬 낮아 화재가 발생ucco) 혹은 벽돌 등 어떠한 외장재료로도 마감될 수 있는 다양성을 지니고 있다.6. 공사비의 절감최근 시공할 대 인건비가 차지하는 비율이 예전보다 상대적으로 높아지고 있다. 경량 목구조주택은 구조재 뿐만 아니라 창, 문, 기타 마감재들이 표준화, 규격화, 시스템화 되어 있기 때문에 소수의 숙련공만 있으면 시공할 수 있다. 공간의 구성이나 형태의 변화도 자유롭고 저렴하여 대량 공급의 저렴한 주택에서 고급주택까지 다양한 설계가 모두 가능하다. 또한 건식공법이기 때문에 계절의 영향을 받지 않아서 자재 준비나 기능공 확보등 사전준비를 철저히 한다면 겨울공사도 합리적이다. 2인치 두께의 목재로 시공되기 때문에 건축자재가 차지하는 공간이 상대적으로 적어 실평수가 넓어 공간 활용에도 매우 효과적이다.목조주택의 종류목구조주택은 나무를 구조체로하여 지어진 건축물을 말하며 구조재로 사용된 목재의 규격, 크기 및 시공방법에 따라 통나무 주택(Log House), 기둥-보 구조주택(Post & Beam), 경량 목구조주택(Light Weight Wood Frame House)등으로 분류된다. 경량 목구조주택은 말그대로 사용된 구조용 목재가 대부분이 두께 2인치, 폭 4인치로서 다른 구조보다 가벼운 목재를 사용하기 때문에 붙여진 이름이지만 오늘날 가장 과학적으로 발전된 건축양식이며, 미국에서는 일반 주택의 거의가 이 방식으로 건축되고 있다. 일본에서는 일본 전통식 기둥-보 구조와 구분하기 위하여 2x4주택으로 부르고 있기도 하다.경량 목구조주택은 시공기술, 건물용도 및 시공방법에 따라 다시 다음과 같이 분류된다.1. 구조재 크기에 따른 일반 목구조 건축분류*경량목구조 (Light Weight Wood Frame House)*기둥-보 구조방식 (Post & Beam)*중(重)목구조 방식 (Heavy Timber Framing System)*통나무 구조방식 (Log House)2. 경량 목구조에 따른 분류*발룬 구조 (Balloon Framing)*플랫폼 구조 (Platform Fr목재는 강압 방부 처리된 목재(일반적으로 CCA방부처리)를 사용하고 콘크리트면과 접하는 부분에는 패드(Sill Sealer)를 부착하여 콘크리트에 잘 정착된 앵커 볼트로 고정하되, 이 방부 목재의 수평과 수직이 건물의 수평과 수직을 좌우하므로 주의 깊게 설치한다. 바닥구조의 온돌기초의 경우 콘크리트 스라브가 곧 일층의 바닥구조를 형성하게 되므로 곧 토대 위에 벽구조를 설치할 수 있다. 이때 콘크리트 하부면에 단열과 방수층의 설치가 선행되어야 한다. 콘크리트 줄기초로 구성된 경우 목재로 바닥구조를 형성하게 되는데 다음과 같이 구성된다.기둥 및 보는 외주부 콘크리트 줄기초 내부에서 장선을 지탱할 대형 부재로 방부 처리가 된 구조적 강성이 좋은 목재를 사용한다. 장선은 지지하는 스팬(Span)에 따라 일반 각재 혹은 집성목재를 사용한다. 바닥구조의 바닥 난방구조의 하중을 고려한다면 4.5m이하의 경우 2x12 일반 각재를 그 이상의 경우 집성재(I Joist)를 사용하는 것이 바람직하다. 바닥의 처짐은 스팬의 길이에 의해 결정되므로, 가급적 스팬을 짧게 하는 것이 좋다. 바닥판은 일반적으로 19㎜두께의 제혀쪽매 합판을 사용하여 장선 위에 접착제를 도포하여 스크류 형상의 못으로 시공하여 장선과 합판의 격리를 방지한다.벽구조는 외벽의 단열효과, 외장재료, 창호내부의 마감 등을 고려하여 2x4 혹은 2x6 스터드로 결정한다.2x4벽체에 사용되는 단열재가 일반적으로 R-11의 등급을 지니고 있는데, 이는 약 80㎜두께의 단열효과를 지닌다. 2x4벽체의 경우에는 2층에 화장실등 설비 공간이 계획된 경우 설비 배관의 통행을 위해 직하부 벽체는 2x6로 한다. 2층 바닥 구조는 1층 목재바닥 구조와 동일하게 시공된다. 1층 상부의 천장을 목구조재로 노출하는 경우에는 보 부재와 구조용 널재(Structural Decking)를 사용하는 것도 효과적이다.지붕구조는 지붕에는 일반적으로 트러스(Truss)와 서까래로 구성하는데, 트러스는 공장에서 제작된 것을 사용하고 현장에서 제작할 우드슁글, 기와 등이 있다. 지붕공사의 주의할 부위는 천창, 굴뚝, 배기파이프 등 지붕을 관통하는 주위의 누수를 방지하기 위한 후레싱 시공에 세심한 주의를 요한다.목구조주택의 지붕속 자연환기를 위해 처마 및 용마루의 환기구 설치를 필히 하여야 한다. 처마 물받이 설치를 위한 홈통받이(Drip Edge)를 설치하는 것을 잊지 말아야 한다. 주택의 외장공사의 완성도를 높이기 위해서는 창문틀 주위나 처마 동의 세부몰딩(Moulding)과 굴뚝, 현관포치(Porch) 및 데크(Deck) 등의 부분장식들의 마무리까지 세심한 손질이 필요하다.4. 내장공사목구조주택의 내장공사는 건식마감이기 때문에 공정관리가 비교적 단순하고 신속히 진행될 수 있다. 구체공사가 된 상태에서 바닥, 외벽 및 지붕의 구체사이에 단열재를 설치하는데 단열재의 장기 처짐을 막기 위한 밀실한 채움이 있어야 한다. 그 다음 공정은 내벽과 천장에 1/2인치 석고보드를 붙이고 페인트나 도배로 마감하면 내장공사가 마무리된다. 욕실이나 다용도실에는 방수 석고보드를 필히 사용하여야 하고 바닥에 물을 사용하는 부위는 방수를 철저히 한 후 타일마감을 한다. 2층 구조의 주택 실내계단은 기성품 목재계단을 이용하게 되는데 현장 시공이 용이하고 품질이 보증되어 경제적이기 때문이다.한국인의 생활습성에는 온돌난방이 적합하다. 온돌공사는 습식방법과 건식방법의 두 가지가 있는데 시공의 정밀성 및 보수관리 측면에서 보면 건식방법이 바람직하다고 본다.건식온돌방법은 조립식 판넬 공법과 현장 가구식 방법이 주로 적용된다. 특히 바닥 난방 위에 온돌마루를 설치할 경우에는 마루재의 신축팽창을 고려한 벽면띄우기가 필히 요구되며 마루깔기전 습기제거가 완벽히 이루어져야 마루의 변형을 방지할 수 있다.5. 설비공사목구조주택의 설비공사는 급배수공사, 난방공사, 전기공사 등으로 구분된다. 급배수를 위한 수평 배관공사는 바닥장선 사이에서 이루어지고 수직배관의 경우에는 벽체의 두께를 6인치로 해서 그 공간을 이용하면 되므로 별도의 배관공간이 필요하다.알리는 고사를 지낸다. 그리고 집이 설 자리를 잡아 흙을 깍거나 돋우어 집이 얹을 자리와 마당을 평평하게 만든다. 이 때 집 자리는 마당보다 1자 이상 높게 형성하여 기단을 쌓을 수 있도록 한다. 이래야 땅의 습기로부터 방바닥은 보호할 수 있고 집도 품위가 있어 보인다. 우리 선조는 집터를 닦을 때에도 자연을 잘 살펴서 활용하도록 마당을 만들어서 자연과 조화되는 환경을 만들었다.2. 기초다짐기둥이 설 자리(주춧돌이 놓일 자리) 밑을 더욱 튼튼히 다지는 일로 모래, 자갈, 잡석, 장대석 따위를 쓴다.◎ 적심돌 : 주추자리 밑에 넣고 다진돌◎ 장대석 : 보통 길이 3자 내외 단면 1자 정도의 긴 석재◎ 4-5자 깊이로 주춧돌보다 3-4배 넓이의 큰 구덩이를 판 뒤 모래를 채우면서 물을 흠뻑 담아준다. 그러면 물이 잦아들면서 모래도 가라앉아 저절로 치밀하게 다져진다(모래다짐).◎ 모래보다 자갈을 쓰면, 물다짐할 필요도 없고 간단히 몽둥이로 다지면 된다. 지금은 굴삭기를 이용하여 다진다.(잡석다짐)◎ 튼튼한 지층까지 터를 파고 석재(장대석)를 우물 정 자로 가지런히 쌓는 다음 그 위에 판돌을 덮는다. (장대석 다짐)3. 주춧돌 놓기주춧돌은 기둥이 안정되게 하려고 윗면을 다듬지만 평평한 자연석을 그대로 쓸 때가 많다. 주춧돌은 기둥 굵기보다 2-3배 크면 좋고, 두께는 크기의 1/3 이상으로 쓴다.◎자연석은 금이 가지 않고 울퉁불퉁하지 않으면 된다. 모양은 둥글넓적한 게 좋다. 다만, 윗면이 조금 도드라져서 움푹하지 않으면 더 좋고, 밑면도 고임돌로 간단히 안정시킬 수 있으면 더욱 좋다.◎ 자연석 주춧돌을 네 귀가 안정되게 수평으로 놓고 중심점을 정하고 사방이 직교하는 먹줄을 친다. 이 때에는 다짐 위에 먹인 먹줄과 쉽게 맞출 수 있도록 옆면 아래까지 친다.◎주춧돌을 제 자리에 정확히 맞춰 놓고 고임돌을 써서 높이를 수평실에 닿을까말까하게 놓는다. 그런 다음에 주춧돌 밑 빈틈에다가 들뜨거나 건들거리지 않게 회모래반죽이나 잔돌을 밀어넣어 다진다.◎주춧돌을 다 놓은 뒤 전한다.