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와 일대일 대응
→ 다시 정의될 대상은 네모칸으로 단말 기호는 원이나 타원형으로 표시하고 이들 사이는 지시선으로 연결!
반복/옵션/택일
→ 순위 폭포: 새 단말기호(<tern)와 문법 규칙을 추가하여 문법의 우선순위 정함
- BNF문법에 좌순환 규칙을 사용하면 좌-결합 지원할 수 있음
- 구문과 프로그래밍 신뢰성: 구문(SYNTAX) → 언어의 신뢰성에 영향
- 구문과 프로그램 신뢰성:
✔ 현수 문제: 중첩된 if문에서 else는 어떤 if의 else인가?
2) 프로그래밍 언어 구현 기법
- 컴파일러: 고급 언어 → 실제 기계 언어에 가까운 저급 언어
저급 언어에서는 준기계어 형태 또는 어셈블리 언어
- 어셈블리어: 어셈블리 언어 → 준기계어 형태
- 링키지 에디터: 여러 개의 프로그램을 묶음, 로드 모듈 생성
-> 로드 모듈: 어느 정도 실행 가능한 하나의 기계어 프로그램
- 로더: 기계어 프로그램(로드 모듈)을 실제 실행 가능한 기계어로 번역해서 주기억 장치에 적대
- 프리프로세서: 원시 언어, 목적 언어가 모두 고급 언어인 번역기
→ 고급 언어에 대한 언어 확장하여 구현시 유용
- 인퍼프리터 기법: 고급 언어 기계를 다른 가계에서 소프트웨어로 시뮬레이션하는 방법 (바로 해석)
* 인터프리터 기법과 번역 기법의 비교
- 번역기: 입력 프로그램과 동일한 의미의 목적 언어 프로그래밍 생성
- 인터프리터: 직접 입력 프로그램을 싫행하는 것
-
번역 기법의 장단점
- 장점: 실행 시간 효율성 제공 (한 번 디코딩으로 반복 실행)
- 단점: 번역된 프로그램이 큰 기억 장치 요구 (I/O routine 등)
-
인터프리터 기법의 장단점은 반대로 적용됨
→ 사용자 적응성 제공
-
하이브리드 기법: 프로그램을 실해시키기 쉬운 형태로 번역한 후, 그 번역된 형태의 프로그램을 디코드하여 시뮬레이션으로 실행
- 중간 형태 코드가 저급이면 번역 기법으로 간주되기도 함