티스토리 뷰

 

구문론과 의미론

구문론(syntax) : 문장이 구성되는 방식에 대해 연구

의미론(semantics) : 문장이 나타내는 의미에 대해 연구

 

예) 나는 너를 사랑한다.

구문 : 주어 + 목적어 + 서술어

의미 : 화자가 청자를 아끼고 귀중히 여긴다.

 

예) PRINT "GCD is"; A

구문 : PRINT "출력할 내용"; 변수

의미 : 출력할 내용과 변수의 값을 순차적으로 출력하라.

 

프로그램의 구조

int x12;
x12 = 1 + 5 * 2;
  • 문자 : 영어 알파벳, 숫자, 특수기호 등
  • 어휘(토큰) : 문자의 모임. 최소한의 의미를 갖는 단어(int, x12, =, +, 1, ...)
  • 구문 : 프로그램을 작성하는 규칙(토큰을 모아 프로그램을 구성)
  • 의미 : 정수 변수 x12에 1 + 5 * 2를 계산해서 대입한다.

 

 

구문의 표현

  • 프로그램의 표면적인 구조를 정의
  • 정의된 구문을 통해 모든 정상적인 프로그램을 도출
  • 작성된 프로그램이 정의된 구문에 맞는 프로그램인지 확인
  • 구문의 표현
    • 문법을 활용하여 명확하게 정의
    • 문법 : 문맥 자유 문법(문맥과 상관없이 정의 할 수 있는 것)을 이용하여 표현한다.

 

문맥 자유 문법(CFC, Context-Free Grammar)

<if문> ::= if <논리식> then <문장>

비단말 기호 : 정의될 대상 (<if문>, <논리식>, <문장>)

단말 기호 : 언어에서 직접 사용되는 표현 (if, then)

시작 비단말 기호 : 언어에서 독립적으로 사용될 수 있는 단위 (<if문>)

규칙 : 비단말 기호를 단말 기호와 비단말 기호의 조합으로 정의 (if <논리식> then <문장>)

     -> 각 규칙은 하나의 비단말 기호만을 정의

 

문맥 자유 문법의 표현방법

BNF(Backus-Naur Form)

  • 메타기호 :  ::= 정의, | 택일, < > 비단말 기호
  • 비단말기호 : <>로 묶인 기호
  • 단말 기호 : 비단말 기호 및 메타 기호가 아닌 기호
  • 규칙 : ::=를 기준으로 왼쪽 부분을 오른쪽으로 정의

 

EBNF(Extended Backus-Naur Form)

BNF에 추가적인 메타 기호를 사용하여 규칙을 보다 간결하게 표현

 

[ ] : 생략 가능

<if문> ::= if <논리식> then <문장> [ else <문장> ]

{ } : 0번 이상 반복

<unsigned integer> ::= <digit> { <digit> }

( ) : | 와 함께 쓰여 한정된 범위의 택일

<수식> ::= <수식> ( + | - | * | / ) <수식>

' ' : 메타 기호를 단말 기호로 사용

<BNF 규칙> ::= <왼쪽 부분> '::=' <오른쪽 부분>

 

구문 도표(syntax diagram)

순서도와 유사하게 그림으로 구문을 표현

 

□ : 비단말 기호

○ : 단말 기호

→ : 비단말 기호 및 단말 기호들을 연결. 규칙

 

예1)

EBNF 표현

<if문> ::= if <논리식> then <문장> [ else <문장> ]

구문도표 

 

예2)

<수식> ::= <수식> ( + | - | * | / ) <수식>

 

예3)

<unsigned integer> ::= <digit> { <digit> }

 

 

의미의 표현

프로그램의 내용적인 효과를 정의

프로그램 실행 시 어떤 일이 일어나는지 의미를 기술

구문으로 표현하기 어려운 제약사항을 기술

일반적으로 자연어 문장으로 표현

 

형식의미론

정적 의미론

프로그램을 수행하기 전 의미가 맞는지 파악 ex) 타입 검사

속성 문법 : 비단말 기호마다 타입 속성이 있다고 가정하고 이에 대한 규칙을 정의

 

예) 변수

<D> : 변수

<T> : 타입

<id> : 변수명

 

구문 규칙

<D> ::= <T> <id> <L> ;
<T> ::= int | char
<L> ::= <id> <L> | e

타입 속성 규칙

id.t = T.t ∧ L.t = T.t
T.t = 정수
T.t = 문자
id.t = L.t ∧ L1.t = L.t

 

동적 의미론

프로그램 수행 시 나타나게 될 의미를 표현

 

기능적 의미론

추상기계의 상태를 바꾸는 것으로 수행 의미를 표현

상태 : <수행할 명령어, 메모리 상태>

   < z=x; x=y; y=z;  ,  [x→5, y→7, z→0] >
=> <      x=y; y=z;  ,  [x→5, y→7, z→5] >
=> <           y=z;  ,  [x→7, y→7, z→5] >
=> <                 ,  [x→7, y→5, z→5] >

표기적 의미론

구문 요소를 수학적 표기에 대응 시켜 수행 의미를 표현

의미함수 : 대응시키는 함수

구문 규칙 의미함수 Bin
<B> ::= 0
            | 1
            | <B> 0
            | <B> 1
Bin[[ 0 ]] = 0
Bin[[ 1 ]] = 1
Bin[[ B 0 ]] = 2 * Bin[[ B ]]
Bin[[ B 1 ]] = 2 * Bin[[ B ]] + 1

 

공리적 의미론

프로그램의 효과로 수행 의미를 표현

효과 : 프로그램 S가 실행됨으로써 사전조건 P를 사후조건 Q로 변화시킴 {P} S {Q}

대입문의 효과 공리 : {Q[x→E]}x = E {Q}

ex)
{P}a = b * 2; {a < 10}
P <=> (a < 10)[a→b*2] <=> b * 2 < 10 <=> b < 5
{b < 5}a = b * 2; {a < 10}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함