[PL] 4. 프로그래밍 언어의 구문과 구현 기법

Jimin·2022년 4월 18일
0

1. 언어 구문

  • 언어 정의: 구문, 의미
    • 자연어 정의, 형식 정의
    • 구문 형식 정의: BNF, EBNF, 구문 도표

  • 가상 컴퓨터: 고급 언어 프로그래머는 컴퓨터를 가상의 고급 언어 컴퓨터로 간주함
  • 문자 코드 세계: EBCDIC(IBM), ASCII(ANSI), 유니코드(ISO)

  • 정합 순서: 언어에 제공된 문자 순서, 일반 순서 지킴, 특수 문자 순서 (코드 체계를 다름 → 구현 시 결정)
  • 어휘 구조 용어: 어휘 토큰 (특정 문자 한개), 언어 구성자, 식별자와 미리 정의된 식별자, 예약어 (if/while/for), 구분자, 분리자 (;/공백)

  • 예약어
    : 언어 어휘를 구성하는 단어나 기호 형태의 문자 알파벳
    • 프로그램 변수 이름으로 사용 불가능

✔ BNF 표기법

  • 구문 형식을 정의하는 가장 보편적인 표기법
  • 한 언어의 구문에 대한 BNF정의: 언어의 문장을 생성하는 생성 규칙 정의
  • 생성 규칙: 왼쪽 (정의될 대상), 오른쪽 (그 대상에 대한 정의)
  • BNF 표기법에 의한 식별자 정의

* BNF 메타기호

  • ::= 정의하다
  • <> 비단말(nonterminal) → 이미 정의가 되어있음
  • | 택일 기호

✔ EBNF 표기법

  • BNF 표기법을 확장해 보다 읽기 쉽고, 간단하게 표현된 표기접
  • BNF보다 초가된 특수한 의미를 갖는 EBNF의 메타기호

* EBNF의 메타기호

  • {} 반복 (0번 이상 반복)
  • [] 선택 (0 도는 1번 선택)
    → 메타기호를 언어의 terminal로 사용하는 경우에 인용부호로 붂어 표현함.

✔ 구문 도표

  • 구문 도표는 그 형태가 순서도와 유사
  • 구문 도표는 EBNF와 일대일 대응
    → 다시 정의될 대상은 네모칸으로 단말 기호는 원이나 타원형으로 표시하고 이들 사이는 지시선으로 연결!


반복/옵션/택일

  • 파스 트리(parse tree)
    : 원시 프로그램의 문법을 검사하는 과정에서 내부적으로 생성되는 트리 형태의 자료구조

    • 한 표현이 BNF에 의해 작성될 수 있는지 여부를 나타냄

  • 모호성, 결합성 및 우선 순위

    • 모호: 같은 파스 트리에 대해서 두 가지 서로 다른 파스 트리가 발생함

→ 순위 폭포: 새 단말기호(<tern)와 문법 규칙을 추가하여 문법의 우선순위 정함

  • BNF문법에 좌순환 규칙을 사용하면 좌-결합 지원할 수 있음

  • 구문과 프로그래밍 신뢰성: 구문(SYNTAX) → 언어의 신뢰성에 영향
  • 구문과 프로그램 신뢰성:
    ✔ 현수 문제: 중첩된 if문에서 else는 어떤 if의 else인가?

2) 프로그래밍 언어 구현 기법

  • 번역기 종료
  1. 컴파일러: 고급 언어 → 실제 기계 언어에 가까운 저급 언어
    저급 언어에서는 준기계어 형태 또는 어셈블리 언어
  2. 어셈블리어: 어셈블리 언어 → 준기계어 형태
  3. 링키지 에디터: 여러 개의 프로그램을 묶음, 로드 모듈 생성
    -> 로드 모듈: 어느 정도 실행 가능한 하나의 기계어 프로그램
  4. 로더: 기계어 프로그램(로드 모듈)을 실제 실행 가능한 기계어로 번역해서 주기억 장치에 적대
  5. 프리프로세서: 원시 언어, 목적 언어가 모두 고급 언어인 번역기
    → 고급 언어에 대한 언어 확장하여 구현시 유용
  • 인퍼프리터 기법: 고급 언어 기계를 다른 가계에서 소프트웨어로 시뮬레이션하는 방법 (바로 해석)

* 인터프리터 기법과 번역 기법의 비교

  • 번역기: 입력 프로그램과 동일한 의미의 목적 언어 프로그래밍 생성
  • 인터프리터: 직접 입력 프로그램을 싫행하는 것

  • 번역 기법의 장단점

    • 장점: 실행 시간 효율성 제공 (한 번 디코딩으로 반복 실행)
    • 단점: 번역된 프로그램이 큰 기억 장치 요구 (I/O routine 등)
  • 인터프리터 기법의 장단점은 반대로 적용됨
    → 사용자 적응성 제공

  • 하이브리드 기법: 프로그램을 실해시키기 쉬운 형태로 번역한 후, 그 번역된 형태의 프로그램을 디코드하여 시뮬레이션으로 실행

    • 중간 형태 코드가 저급이면 번역 기법으로 간주되기도 함

0개의 댓글