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

[프로그래밍 언어론] 구문과 의미 묘사법

1. Syntax & Semantics (구문 & 의미) 정의 - Syntax : 문법(form), 일정형태로 형식에 맞게 작성 된다. - Semantics : 문법에 맞는 형식을 취했을 때 그 문법이 하는 일, 의미 ex) if ( ) - 프로그래밍 언어의 정의 ⓐ 몇몇의 단어(알파벳)은 문장을 만든다. ⓑ 문장이 합쳐져서 언어가 된다. // 언어의 일반적 정의 ⓒ lexeme(어휘 항목) : 언어를 나눌 때 의미를 가지게 하는 것끼리 나눈 것 //프로그래밍 언어에서의 ⓓ token(토큰) : lexeme의 의미 및 행동 //단어와 문장의 역할 > 단순성을 위해 가장 낮은 수준으로 표현 ex) index = 2 * count + 7 ; 2. 구문 묘사법 - recognizers : 컴파일러에서 사용, ..

[프로그래밍 언어론] 프로그램 언어의 탄생과 기여 Part 2

1. PL/I - 65년 프로그램언어의 양분화 현상(과학용/비지니스용) - 서로의 다른 면을 바라 보고 프로그램이 모든 컴퓨터에서 하나의 언어로 하는 것을 목표로 개발 - 특징 ⓐ 동시에 실행하는 테스크 생성 허용 ⓑ 예외 탐지 가능(최초) ⓒ 재귀함수의 사용이 허용됨 ⓓ 다차원 배열에서의 특정원서 지정이 가능해짐 ⓔ 포인터 사용 가능 - 과학용언어와 비지니스언어의 합침으로인해 복잡해지고, 잘못된 디자인도 발생됨. > 대중성이 떨어짐 2. Dynamic Language 부류의 탄생 - static language(ex:c언어)와 반대대는 것으로 변수의 type이 지속적인 변화가 가능 - 수행 속도가 느림 - Dynamic Language의 시초 ⓐ APL : 구문예 → X[ㅁX+,=''';] / 막강한 ..

[프로그래밍 언어론] 프로그램 언어의 탄생과 기여 Part 1

1. 포트란(Fortran) - 기계의 효율을 위해 만들어짐 - 컴퓨터의 메모리가 작고 속도가 느리고 신뢰성이 없었다. - 58년에 만들어진 포트란2에서는 컴퓨터의 신뢰성을 위해서 코드소스줄을 400줄 이하로 제한 하기도 했다. - 포트란3,4,77,90,95,2003등 다영한 년도에 지속적인 발달로 프로그래밍 언어의 역사적 견본역활을 한다. - 컴파일러를 탄생시킨 언어 2. 리습(LISP) - 인공지능의 개발로 인해서 발달한 언어 - 리스트의 처리에 중점을 두고 설계가 되었다. - 함수형 프로그래밍 언어로 명령형 언어와 또 다른 길을 열어 놓았다. - 현재까지 인공지능 분야의 프로그램을 지배하고 있다. 3. 알골(ALGOL) - 알고리즘을 위한 언어 - 수학적인 것을 기계에 무관하게 돌아가게 하기 위한..

[프로그래밍 언어론] Implementation(구현)

각각의 언어는 컴파일러방식 또는 인터프리터 방식으로 재구현 되어 기계로 전달된다. 1. 컴파일 방식 - 프로그램 소스가 컴파일러에 의해 다음 과정을 거치면서 기계언어로 변경된다. ⓐ 프로그램 소스코드 컴파일 실행 ⓑ 어휘 분석(분법적으로 의미가 있는 최소한의 단위로 쪼겜) ⓒ 문법 분석(문법적으로 타당한지를 판단) ⓓ 중간코드 생성 및 지속적인 최적화 실시 ⓔ 기계어 생성 - 과정에서 보면 기계어로 바로 변경되는 것이아니라 중간에 중간 코드를 생성한다. ⓐ 중간코드 : 고차원 언어와 저급 언어의 중간단계코드로 어느 특정 기계에 종속되지 않는 언어 : 기계어는 해당 언어에 종속되는 반면에 중간코드는 기계와 독립적이다. >> 즉, 중간코드단계를 가지고 여러 기계에서 사용이 가능하다. - 장점 : 소스코드가 ..

[프로그래밍 언어론] 프로그램 언어의 카테고리와 언어 설계/디자인의 절충

1. 언어의 카테고리 일단 언어를 나누는 주요 4가지 카테고리를 보도록한다. - 명령형 언어 : 폰 노이만 구조에 의해 생성된 변수, 어사인먼트. 레퍼티션 이 3가지의 요소의 상호관계 존재 대부분의 언어가 이곳에 속한다. - 함수형 언어 : 명령형 언어에서 추구하는 것을 모두 거부 세상의 모든일을 함수로 가능하다는 원리 / 함수가 함수를 부르면서 실행 됨. 변수 없이 함수의 결과물이 다른 함수에 입력되어 결과물이 나올때까지 실행 됨. 함수의 연결리스트와 함수 2가지만 제공된다. ex) 리습(LISP(list processing)) - 조직형 언어 : 명령형/함수형 언어에서 추구하는 것을 모두 거부 prospositions, predicates, logical dedcation으로 이뤄짐 논리 프로그래밍 ..

[프로그래밍 언어론] 언어 설계 / 개발 디자인의 영향을 미치는 것

1. 컴퓨터의 구조 - 폰 노이만 구조 : 현재 대부분의 컴퓨터의 구조로 CPU와 Memory로 이뤄진 것 - 폰 노이만이 컴퓨터를 생각했던 과정과 생성물 ⓐ 수학적 반복계산을 담당할 무언가(CPU)와 중간에 값을 저장할 공간(Memory)가 필요... ⓑ 메모리의 주소를 알아야 하는가?? > 변수의 탄생 ⓒ 메모리의 내용을 변환할 수 있는가?? > 어사인먼트(assignment)의 탄생 ⓓ 반복적인 연산이 가능한가?? > 레퍼티션(Repetition) / 반복연산의 탄생 - 즉, 컴퓨터의 구조가 폰 노이만의 구조를 따른다면 프로그램언어에는 변수, 어사인먼트, 레퍼티션이 존재해야한다!! - 폰 노이만 구조를 기반으로 설계된 언어를 "명령형 언어(imperative language)"라고한다. 2. 프로그..

[프로그래밍 언어론] 프로그램 언어 평가 기준

1. 가독성(Readability) : 얼마나 읽기 쉬운가?? - 단순성(Simplicity) ⓐ 기능이 너무 많으면 좋지 않다. ⓑ 하나의 기능을 여러가지로 표현이 가능하면 안 좋음 ex) count++ // ++count // count = count+1 // count += 1 >한 가지 기능을 여러가지로 표현이 가능함. ⓒ 연산자 중복(Operator Overloading) : 사용자에게 중복 연산자 생성을 허용 > 좋은 기능이지만, 연산자의 일반적 의미와 다른 의미로 쓰인다면 읽는 사람입장에서 해석하기가 힘들 것이다. - 직교성(Orthogonality) : 결합시 일관적인가?? 예외가 발생하는가?? 예제를 통해서 알아보자... ex1) ⓐ와 ⓑ중 더하기 기능을 보았을때 어떤 것이 더욱 직교적인..

[프로그래밍 언어론] 프로그래밍언어의 개발 목표

프로그래밍 언어는 각각의 목표 분야를 가지고 개발이 된다. 각 분야는 5개로 나눠지며 분야마다 공통점, 고유특성을 가지고 있다. 각 분야별 고유특성을 알아보자. 1. Scientific Applications ⓐ 수학적 함수가 많다. ⓑ 실수형에 많은 데이터타입(선택권)을 제공해 준다. (유효자리수가 많아야 한다.) ex) 복소수 타입. 행렬 타입. ⓒ 제어문 > 반복문에 중점 / 선택문에 중점 2. Business Applications ⓐ 기능 : DB기능/스프레드 쉬트(엑셀기능)/검색/정렬/입력/추가 등에 대한 제어문을 제공 ⓑ 문자/단위별 변수에 많은 선택권을 준다. 언어예) COBOL 3. Artificial Intelligence ⓐ 인공지능/머릿 속에 있는 것을 유사하게 만듬 > 사람의 머릿..

[프로그래밍 언어론] 프로그래밍 언어론을 배우는 이유...

1. 프로그래밍 언어 표현 능력 향상 - 개념을 알면 표현하기가 더욱 편해진다. - A언어에 없는 B언어 개념을 흉내내서 규현 가능 / 다른 언어에서 개념을 가져와 씀. ex) Associative Array - by pear %IdNumber = ("Kim" => 1, "Lee" => 2); $IdNumber("Lee"); >%는 Associative Array를 생성하는 것이다. 뒤에 오는건 메모리가 되는한 무한하게 올 수 있다. >$는 Associative Array에서 해당 키 값을 찾아서 그 값이 나타내는 것을 return 해주는 것이다. 이러한 Associative Array 개념을 C언어 구조체를 이용하여 흉내내서 사용 가능하다. 2. 적절한 언어를 선택할 수 있는 능력 향상 3. 새로운 언..