3강 프로그래밍 언어의 구문
1. 프로그래밍 언어의 구조
문자 > 어휘 > 구문
문자 : 영어 알파벳과 아라비아 숫자를 근간으로 작성
어휘 : 프로그래밍 언어 문자로 구성된 단어, 토큰
구문 : 프로그래밍 언어로 프로그램을 작성하는 규칙
어휘 구조와 구문 구조
- 서로 별개이지만 밀접한 관련
어휘 분석 > 입력 프로그램의 일련의 문자를 토큰으로 구분
구문 분서 > 토큰을 처리하여 구문 구조를 결정
2. BNF(Backus-Naur Form)
BNF 란?
- 구문에 대한 형식 정의를 하는 방법
- 생성 규칙들의 집합
- 왼쪽 부분 : 정의될 대상(Object)
- 오른쪽 부분 : 그 대상에 대한 정의
BNF 표기법
- 비단말 기호
- 각괄호 < > 로 묶인 기호
- 다시 정의될 대상임을 의미
- 단말 기호
- 각괄호로 묶이지 않은 기호
- 알파벳 문자 집합, 예약어
- 메타 기호
- 언어를 표현하려고 사용된 특수 기호들(::==, |, <>)
- ::== : 정의
- | : 택일
>> ex) <letter> ::== A|B|C|....|X|Y|Z
<문맥 자유 문법>
- 모든 생성 규칙에서 정의될 대상이 하나의 비단말 기호로만 구성
- 각 비단말 기호가 어디에 나타나든 그의 오른쪽 부분으로 언제나 대치될 수 있음
<문맥 의존 문법>
- 특수한 문맥에 의존하여 대치되는 문법
3. EBNF(Extended BNF)
- 보다 읽기 쉽고 간결하게 표현할 수 있는 확장된 BNF
- 특수 의미의 메타 기호를 더 사용하여 반복되는 부분이나 선택적인 부분을 간결하게 표현함
<EBNF 표기법>
- [x] : x가 나타나지 않거나 한번 나타날 수 있음
- {x} : x가 ~0번에서 ~번까지 나타날 수 있음
- (x | y ) : 괄호 안으로 한정하여 x나 y중 택일
- 'x' : 메타기호 x를 단말기호로 사용
4. 구문 도표
- 구문에 대한 형식 정의를 하는 또 다른 방법
- 순서도와 비슷하며, EBNF 선언과 바로 대응시킬 수 있음
- 비단말 기호는 사각형, 단말 기호는 원이나 타원으로 표시하며 이들은 지지선으로 연결