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) 로 분류한 것.

프로그램의 코드는 Lexemes의 순서(문자열)로 볼 수 있음.

Lexical Analysis

  • 어휘 분석
  • 소스코드를 lexeme으로 나누고 토큰으로 분류하는 단계.
  • 보통 컴파일러의 초기 단계에서 수행되며, 문법 분석의 기반이 됨.

Description method for syntax

Recognition & Generation

프로그래밍 언어의 문법은 두 가지 방식으로 기술될 수 있다.

  1. Recognition(인식) 방식
    • Recognition Device가 입력된 프로그램이 언어에 속하는지 검사.
    • 이후 Syntax Analyzer가 BNF, EBNF 등으로 미리 정의되어 있는 문법을 바탕으로 입력이 문법적으로 올바른지 확인.
    • 장점:
      • 프로그램이 올바른 형식을 따르는지 신속하게 검사 가능
      • 오류를 빠르게 찾아내고, 컴파일러의 전처리 단계에서 유용
  2. Generation(생성) 방식
    • Generation Device가 언어 문법을 바탕으로 올바른 샘플 코드를 생성한다.
    • Unpredictable. But readable and understandable.

Recognition과 Generation은 동일한 문법에 대해 둘 다 구현 가능하며 Recognition Device는 컴파일러의 파싱 단계, Generation Device은 샘플 코드, 테스트 케이스 생성 등에 사용 된다.