끄적끄적 코딩
article thumbnail

언어 설계에 영향

1. 컴퓨터 구조
2. 프로그래밍 방법론

 

폰 노이만 컴퓨터 구조

절차형 구조
fetch-decode-execute의 순환과정
  fetch는 메모리의 한 명령어를 읽음.
  decode는 명령어의 op-code를 해독
  execute는 해독한 코드를 실행
stored programming concept방식 = 메모리에 프로그램을 적재해 놓고, 한 문장씩 fetch, decode, execute하는 방식

언어 부류

명령형 언어

폰 노이만 컴퓨터 영향을 가장 많이 받은 언어
변수가 있음.
할당문 = A = B; 를 예로 들면 오른쪽 B값을 왼쪽의 A에 저장하는 것
오른쪽 편을 RHS, 왼쪽 편을 LHS라고 한다.
RHS는 X는 X의 값(value)를 의미.
LHS는 X는 X의 위치(location)를 의미.
수행되는 문장의 순서를 바꿀때는 제어문을 사용
1970년대, 프로세스 지향형 설계 방법론이 등장
Devide-and-Conquer 방식이며, 일종의 하향식 방식이다.

객체지향 언어

Class, 상속, 다향성이
1970년대 후반에 탄생한 데이터지향 설계 방법론으로 데이터 추상화가 나타나게 되었다.
C++이나 Java에 볼 수 있는 클래스라는 것.
프로세스 추상화가 발전하여 데이터 추상화 즉, 클래스 개념이 탄생.
클래스 개념을 제일 먼저 도입한 언어 SIMULA 67
1980년대에 데이터 추상화가 발전하여 객체지향 설계 방법론 등장
데이터 추상화에 상속과 다형성 개념을 포함하여 OOP로 발전
OOP의 효시는 smaltalk라는 언어로 Allen Kay에 의해 만들어짐.

함수 언어

수학의 함수에 기반을 둔 언어

논리 언어

비절차식 언어
BackTracking방식
Prolog는 문제에 대해 다음과 같이 기술
  1) 사실을 기술
  2) 규칙을 기술
  3) 해결하고 싶은 목표를 기술

시각 언어

명령형 언어에 속함
화면 설계기능을 의미
4세대 언어 (Visual Basic, Power Builder, Pascal, Delphi)

스크립트 언어

명령형 언어에 속함
동적인 web페이지를 만드는 것
초창기 스크립트 언어는 배치언어 또는 작업 제어 언어라고도 불림.
대부분의 스크립트 언어들은 인터프리터로 처리됨.

마크업 언어

HTML, XHTML등을 마크업 언어라고 함.
XML은 HTML 문서를 만들 때 DB를 쉽게 검색하도록 하면서 HTML과 함께 쓸 수 있도록 한 마크업 언어.

언어 구현 방법

컴파일러

입력과 출력 

어휘 분석기 : 입력 = 소스코드, 출력 = token stream
구문 분석기 : 입력 = toekn stream, 출력 = parse tree
중간코드 생성기 : 입력 = parse tree, 출력 = p-code
코드 생성기 : 입력 = p-code, 출력 = 기계어

최적화
1. 자료 흐름 분석
2. 생사 체인
3. 루프 불변

머신코드로 된 파일 : 목적파일 *.obj

*.obj(기계어) + *.dll(라이브러리 => 연결
                 
             링커(linker)
                 
             상대 주소
                 
 상대 주소 -> 절대 주소 -> 변경
                  
            로더(loader)
                  
       실행 파일 생성 *.exe
                  
                 실행

 

순수 인터프린터

원시 프로그램을 받으면 언시 프로그램을 복잡한 괃정을 거치지 않고 바로 해석해서 결과를 도출
컴파일러보다 느리다. 이유는 *.obj파일이나, *.exe파일이 만들어지지 않기때문에 매번 다시 해석해야함
장점으로는 번역과정이 간단하다.

하이브리드 방식

컴파일러와 인터프린터를 혼합한 것
분석 단계는 컴파일러 방식으로 처리, 종합 단계는 인터프린터 방식으로 처리
소스코드에 대해 어휘 분석, 구분 분석, 중간 코드 생성까지는 컴파일러 방식을 통해 중간 코드를 만듬
중간 코드(p-code)는 pascal을 만들 때 N.Wirth에 의해 제안됨.
Java는 중간 코드로 바이트 코드라는 것을 생성
C#같은 .NET언어는 중간 코드로 IL을 만들어 냄

전처리기

컴파일러가 번역하기 전에 미리 사전처리하는 것
C에서 #include와 같이 #이 붙어 있으면, 전처리기가 #을 보고 컴파일하기 전에 필요한 일들을 먼저 처리

 

검색 태그