Lined Notebook

실용 프로그래밍 언어론

by juraffe juraffe

실용 프로그래밍 언어론

프로그래밍 영역

 

과학응용 분야

배열, 행렬, 부동 소수점 계산등을 위한 많이 사용되며 Fortran은 속도와 효율성을 갖춘 최초의 과학응용 분야 언어.

 

사무응용 분야

비즈니스 쪽으로 COBOL이 대표적인 언어이다.

 

인공지능 분야

수치 계산보다는 기호 위주의 계산이 훨씬 많고 대표적인 언어로는 LISP다.

 

시스템 분야

C언어.

 

언어의 평가기준

 

  • 판독성
    - 단순성 : 복잡하지 않음. 너무 많은 기능이 몰리면 중복과 사용법이 어려워짐.
    - 직교성 : 독립된 기본 구조들이 조합되어 제어나 데이터 구조를 생성할 수 있는 능력
      - 의미가 문맥 독립적이고 'algol 68'에 최초 적용 되었다.
    - 제어문 : 충분한 제어구문이 없다면 프로그램의 작성과 읽기가 어려워진다. (ex if-else가 없다면 if로 모든 제어를 해야한다.)
    - 데이터 타입과 구조 : 데이터의 타입과 구조가 충분해야 한다. boolean이 없이 0, 1을 나타낸다면 정수값인지 참/거짓을 위한 값인지 빠르게 판단할 수 없다.
    - 구문 고려사항
      - 식별자 형태 : 식별자의 길이 제한이 없다면 symbol table의 구현이 어려워진다.
      - 예약어 : 예약어를 변수로 사용할 수 있으면 변수와 혼용해서 사용해 혼란 초례 (Fortran은 예약어를 두지않음.)

  • 작성력
    - 추상화 : 복잡한 작업을 무시하고 데이터를 가공할 수 있는.
      - 데이터 추상화 : 변수, 배열, 구조체
      - 추상 데이터 타입 : 클래스
    - 표현력 : i = i + 1와 i++과 동일한 의미지만 작성력을 후자가 더 높다.

  • 신뢰성
    - 타입 검사 : 컴파일 또는 실행시 타입을 검사한다. 이를 위해선 해당 데이터의 타입을 선언해야한다.
    - 예외 처리 : try-catch
    - 별칭 : x와 y가 동일한 기억장소를 가리킨다면 신뢰성이 떠러진다. 때문에 제한적인 사용을 요구한다.

  • 비용
    - 작성 비용 (프로그래머로써 언어 비용에서 가장 중요한 요소)
    - 컴파일 비용
    - 실행 비용
    - 언어 구현 비용
    - 신뢰성 부족에 따른 비용
    - 프로그램 유지보수 비용

그 외 평가 기준 : 이식성, 일반성, 분명성

 

 

언어 분류와 컴파일러

 

컴퓨터 구조

그림1. Von  Neumann  architecture

  • 프로그램 내장방식(명령어/데이터를 메모리에 저장)
  • 명령어의 순차적 실행: CPU의 fetch-decode-execute

ALU에서는 가장 중요한 회로는 Adder이며 이를 이용해 뺄셈, 나눗셈, 곱셈등을 모두 할 수 있기 때문.

stored programming concept는 폰 노이만 구조의 다른 이름이다.

 

언어 분류

 

  • 명령형 언어
    - 폰 노이만 구조에 기반한 언어(C, Pascal, Fortran, Basic, C++, Java)
    - 언어의 특징으론 변수, 배정문(=), 반복문이 있다.

  • 객체지향 언어
    - 70년대 프로세스 지향 설계 방법론 : 하향식 설계, 단계적 세분화, 타입 검사, 제어구조 지원
    - 70년대 후반, 데이터 지향 설계 방법론으로 데이터 추상화가 탄생 클래스가 처음 도입된 언어는 SIMULA 67 
    - 80년대 객체지향 설계 방법론, 데이터 추상화, 상속, 다형성, Smalltalk, C++, Java, Ada95, C#

  • 함수 언어
  • 논리 언어
  • 비주얼 언어
  • 스크립트 언어
  • 마크업 언어

 

언어구현 방법

 

그림2. Compiler

언어 구현이란 소스코드에서 컴퓨터에서 동작하는 바이너리로 번역하는 과정을 의미한다.

 

컴파일

 

어휘 분석기 : 소스코드에서 토큰을 생성하는 분석기.

구문 분석기 : Parse tree를 만드는 과정.

중간코드 생성기 : Parse tree를 입력받아 중간 코드를 생성.

코드 생성기 : 중간코드가 기계어로 생성. 

 

순수 인터프리터

 

프로그램이 즉각적으로 수행

언어에 대한 가상기계 제공

단순한 구조의 언어에 적합

하지만 컴파일러보다 동작시간은 느리다.

 

하이브리드 방식

 

컴파일러와 순수 인터프리터와 혼합된 방식

중간코드를 생성하며 이를 pseudo-code 생성 -> 컴파일러

생성된 pseudo-code를 수행하기 위한 가상화 제공 -> 인터프리터

ex)  Java(bytecode), .net언어(IL)

 

*pseudo-code : Pascal언어를 만들때 제안된 방식

 

프로그래밍 언어들의 특징

 

Fortran IV

 

Fortran의 주석은 'C--'로 시작하며 첫글자가 I, J, K L, M, N으로 시작하면 정수형으로 내재적 형선언이 된다.

 

Fortran 95

 

Fortran IV에서 발전된 버전으로 77에서 부터 코딩 용지없이 프리 포맷으로 코딩했다. 주석은 '!'로 시작하며 IV에서와 다르게 내재적 형선언을 막는 'Implicit none'을 지원한다. 'Implicit none'은 BASIC에서도 동일된다.

 

Algol

 

Algol은 블록으로 구조화된 언이다. begin-end로 블록을 정한다.

 

BASIC

 

초기 개발당시 키워드, 변수명을 3글자로 제한해 배열을 DIM, 주석을 REM으로 선언하고 result와, reseme이 3글자로 표현하면 res로 같은 변수가 된다.

 

Pascal

 

program으로 시작해 Algol과 begin-end를 사용할 수 있다. pascal은 강력한 데이터 구조체를 지원하고 레코드를 C언어에서 구조체와 같다.

 

Ada

 

Ada 언어는 1970~1980년도에 미 국방성에 지원하에 개발되었다. Pascal 기반으로 개발되었다.

 

Cobol

 

Common business oriented language의 약자로 상업용이고 영어 문장처럼 만들어져 있다.

 

 

구문과 의미론

 

어휘항목(lexeme) 토큰을 이루는 문자열
토큰(token) 의미적으로 구분되는 최소 단위
ID 문자열이 변수명, 함수명, 클래스명 등을 이룰 때

 

정규문법과 CFG

 

그림3. Chomsky hierarchy

noam chomsky가 인디언의 언어를 연구하며 언어의 구성을 4단계로 구성하였고, 그 중 regular와 context-free가 인공언어 개발에 적합하다는 연구를 발표하였다. 우리가 일상에서 사용하는 언어는 context-sensitive에 속하며 어떤 제한이 없이 사용되는 언어를 가장 밖에 있는 unrestricted에 속한다.

 

정규문법

앞서 인식기에서 사용된 문법을 정규문법이라 하며, $ A \rightarrow B \beta | \beta $ 혹은 $ A \rightarrow \beta B | \beta $로 표현한다. 이때 $B$는 nonterminal이라 하며 가장 좌측에 있으면 left-linear, 가장 우측에 있으면 right-linear라고 한다.

 

예로 $0(10)*$는 left-linear, right-linear 각각 다음과 표기할 수 있다.

 

right-linear $$ S \rightarrow  0A, A \rightarrow  10A |  $$

left-linear $$ S \rightarrow  S10 | 0 $$

 

 

'✏️ 공부 > 🎓 학교' 카테고리의 다른 글

실시간 렌더링 - Vertex Processing  (0) 2019.10.24
실용 프로그래밍 언어론  (0) 2019.10.22
실리간 렌더링 - OpenGL  (0) 2019.10.20
데이터 통신 chap.5  (0) 2019.10.20
실시간 렌더링  (0) 2019.10.19
데이터 통신 chap.4  (0) 2019.10.19

블로그의 정보

🦒 Juraffe's note

juraffe juraffe

활동하기