Expressions, Statements, Program Units
- 표현식(Expressions)은 값(value)을 만들어내는 구문
- 프로그램 실행 시 평가(evaluation) 되어 하나의 결과 값을 생성
- 다른 표현식 안에 중첩되어 사용될 수 있음
- e.g.
3 + 5,a * b
- 문장(Statements)은 실행(Execution)을 위한 지시를 나타내는 구문.
- 할당문, 조건문, 반환문 등
- 프로그램의 흐름 제어, 상태 변화를 목적으로 함
- e.g.
a = 10, `return b
- 프로그램 단위(Program Units)
- 함수, 클래스 등
Syntax(문법)
Form of expressions, statemets, and program units.
= 언어의 (표현식, 문장, 프로그램 단위의) 형태나 구조를 정의
E.g. 괄호, 세미콜론 위치, 키워드 사용 등
Semantics(언어)
Meaning of expressions, statements, and program units.
= 구조가 실제로 어떤 동작을 하는지를 설명
E.g. 변수에 값을 대입하면 메모리에 어떤 변화가 생기는 지 등
Syntax & Semantics
- Syntax 틀리면 실행 불가, Semantics가 틀리면 실행은 되지만 잘못된 결과를 낼 수 있음.
- 문법은 BNF, EBNF 등의 형식으로 비교적 공식화하기 쉽지만,
의미의 정의는 복잡하여 Operational(연산적) 정의, Axiomatic(공리적) 정의, Denotational(지시적) 정의 등의 방법으로 표현함.
Lexeme & Token
- Lexeme(렉심): 프로그램을 구성하는 가장 작은 의미 단위.
- Token(토큰): lexeme을 범주(category) 로 분류한 것.
Example
int variable = input + 123;
Lexemes Tokens int 키워드 variable 식별자 = 할당 연산자 input 식별자 + 산술 연산자 123 숫자리터럴 ; 구분자 (punctuation)
프로그램의 코드는 Lexemes의 순서(문자열)로 볼 수 있음.
Lexical Analysis
- 어휘 분석
- 소스코드를 lexeme으로 나누고 토큰으로 분류하는 단계.
- 보통 컴파일러의 초기 단계에서 수행되며, 문법 분석의 기반이 됨.
Description method for syntax
Recognition & Generation
프로그래밍 언어의 문법은 두 가지 방식으로 기술될 수 있다.
- Recognition(인식) 방식
- Recognition Device가 입력된 프로그램이 언어에 속하는지 검사.
- 이후 Syntax Analyzer가 BNF, EBNF 등으로 미리 정의되어 있는 문법을 바탕으로 입력이 문법적으로 올바른지 확인.
- 장점:
- 프로그램이 올바른 형식을 따르는지 신속하게 검사 가능
- 오류를 빠르게 찾아내고, 컴파일러의 전처리 단계에서 유용
- Generation(생성) 방식
- Generation Device가 언어 문법을 바탕으로 올바른 샘플 코드를 생성한다.
- Unpredictable. But readable and understandable.
Recognition과 Generation은 동일한 문법에 대해 둘 다 구현 가능하며 Recognition Device는 컴파일러의 파싱 단계, Generation Device은 샘플 코드, 테스트 케이스 생성 등에 사용 된다.