프로그래밍 언어론

프로그래밍 언어

  • 명령형 언어(절차 언어)
  • 함수형 언어(적용형 언어)
  • 논리형 언어(선언적 언어)
  • 객체 지향 언어

양면적 방법론

  • 언어 구문론: 형식적 측면
  • 언어 의미론: 의미 해석적인 측면

프로그래밍 언어의 설계

  • 실행의 효율성
  • 일반성
  • 직교성
  • 획일성
  • 표현력
  • 정확성
  • 컴퓨터 독립성
  • 안전성
  • 일관성
  • 확장성
  • 부분성

프로그래밍 언어의 구문

  • 어휘 구조는 어휘 토큰이다.
  • 문맥 자유 문법(context-free grammar): 모든 생성 규칙에서 정의될 대상이 하나의 비단말 기호만으로 구성된 문법

구문 형식 정의

  • BNF(Backus-Naur Form)
  • EBNF(Extended BNF)
  • 구문 도표(Syntax Diagram)

파스 트리

  • BNF에 의해 어떤 표현이 생성될 수 있는지 확인하기 위해 작성하는 트리
  • 단말 노드의 나열이 주어진 BNF로 생성 가능한 표현됨
  • 유도를 트리 형태로 나타낸 것

모호한 문법: 한 가지 BNF 구문에 대해 두 개 이상의 파스트리가 나올 수 있는 상황이다.

  • 제거하기 위해: 1) 비단말 기호와 문법 규칙을 추가, 2) 유결합 규칙이나 좌결합 규칙을 적용

신뢰성: 현수 else 를 제거하기 위한 추가적인 구문 구조가 필요하다.

구현 기법

  • 컴파일 기법: 고급 언어로 작성된 원시 프로그램을 기계어로 번역하여 기계어 프로그램을 만들어 실행시키는 방법
  • 인터프리트 기법: 고급 언어를 기계어로 하는 컴퓨터를 하드웨어로 구성하는 대신에 이 고급 언어 기계를 다른 기계에서 실행되는 실행 시뮬레이션하는 방법이다.
  • 중간코드 실행 기법: 프로그램을 실행시키기 쉬운 형태로 번역, 변역된 형태의 프로그램을 실행 시뮬레이션으로 실행

변수

  • 변수의 정의
    • 선언문
    • 묵시적 선언

바인딩

  • 바인딩: 기본 단위가 선택할 수 있는 여러 가지 속성 중에서 일부를 선정하여 결정해주는 행위
    • 동적 바인딩: 프로그램 실행 시간 중에 이루어짐
    • 정적 바인딩: 번역 시간에 수행

선언과 할당

  • 선언: 실행 시 사용될 자료의 속성을 컴파일러 등에게 알려주는 프로그램 문장
  • 할당문: 변수의 내용을 변경할 수 있는 연산
  • 상수: 값이 변경되지 않는 식별자를 사용할 때 공통적으로 기억하기 쉬운 이름을 부여해 사용

식과 제어문

  • 표현식: 하나 이상의 피연산자를 가지고 자료값의 계산을 기술
  • 조건문: 조건에 따라 실행되는 부분이 달라질 때 사용
  • 반복문: 특정 영역의 명령문을 정해진 횟수만큼 반복 실행

자료형

  • 자료형: 객체들의 집합과 이 객체들의 실체들을 생성, 작성, 소멸, 수정, 분해하는 연산들의 집합
  • 단순형
    • 수치형
    • 논리형
    • 문자형
  • 열거형: 객체들을 리스트로 정하며, 순서 관계와 할당 연산
  • 배열: 집합체에서 첫 원소의 상대적 위치인 첨자로 원소를 식별하는 동질형 자료의 집합체
    • 배열이름, 원소의 형, 원소의 길이, 시작주소, 차원수, 첨자 상한 및 하한 정보
    • 열우선
    • 행우선
  • 연상배열: 순서를 갖지 않는 데이터 원소의 집합체
  • 레코드: 원소를 식별자로 구별하는 이질형 자료의 집합
  • 포인터: 어떤 객체에 대한 참조를 의미
  • 정적 형 검사: 컴파일 시간
  • 동적 형 검사: 실행 시간

영역과 수명

  • 블록: 내부 식별자 선언 후 새로운 프로그램 환경을 설정
  • 변수 수명: 값을 저장하기 위해 기억장소를 할당받고 있는 기간

기억장소 할당

  • 정적 기억장소 할당
    • 정적 변수: 실행시간 전에 생성되어서 실행 시간 전체가 변수의 수명
  • 동적 기억장소 할당
    • 스택 기반: 블록 또는 부 프로그램이 활성화될 때 기억장소 할당
    • 준정적 변수: 활성화 레코드의 차감거리가 번역 시간에 결정되더라도 실행시간의 단위 프로그램이 활성화되는 시점에서 바인딩
    • 준동적 변수: 단위 프로그램이 활성화되는 시점에 지역 변수가 모두 생성, 지역변수가 요구하는 기억장소의 크기가 결정되는 변수
    • 동적 변수: 활성화 레코드가 활성화되는 시점에서도 크기를 알 수 없는 변수
  • 참조환경
    • 단위 프로그램에서 선언된 지역변수
    • 사용가능한 비지역변수
  • 비지역 변수 참조 방법
    • 정적 체인 사용 기법: 모든 호라성화 레코드에 정적 링크를 할당
    • 디스플레이 사용 기법: 정적 체인 관계를 1차원 배열에 저장

매개변수 전달 기법

  • 형식 매개변수: 서브메소드가 실행되는 동안 호출자가 보내준 식 또는 다른 이름을 대신 사용하는 이름
  • 실 매개변수: 원래의 식 또는 이름
  • 참조 호출: 매개변수의 주소를 대응되는 형식 매개변수에 보냄
  • 값 호출: 형식 매개변수에 해당되는 기억장소를 별도로 유지, 실 매개변수에 해당되는 주소를 보내면 r-value를 구해 형식 매개변수의 기억장소에 복사하여 사용
  • 이름 호출: 형식 매개변수의 이름이 사용될 때마다 대응되는 실 매개변수가 사용된 것처럼 간주
  • 부작용: 지역 변수 외의 변수값을 변화시킴
  • 별명: 동일한 기억장소를 함께 사용하고 있는 다른 이름
  • 중복 정의: 한 개체가 두 가지 이상의 개념으로 사용됨

추상 자료형

  • 추상화: 자신의 속성들의 일부만 가지고 작업 또는 객체를 필요한 정도로 묘사
  • 자료 추상화: 자료형의 표현과 그에 관련된 연산들을 함께 묶어 캡슐화
  • 캡슐화: 부적당한 사용으로부터 자료형을 보호

참조

  • 프로그래밍언어론 by. 우균, 김진욱