• 검색 결과가 없습니다.

소프트웨어 시스템에 대한 검증 혹은 추론

N/A
N/A
Protected

Academic year: 2022

Share "소프트웨어 시스템에 대한 검증 혹은 추론"

Copied!
38
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

제3장 시맨틱스(Semantics)

Reading Chap 13

(2)

3.1 Operational Semantics

(3)

시맨틱스의 필요성

™ 프로그램 의미의 정확한 이해

™

소프트웨어의 정확한 명세

™

소프트웨어 시스템에 대한 검증 혹은 추론

™

컴파일러 혹은 해석기 작성의 기초

(4)

의미론의 종류

™ Operational Semantics

™ 프로그램의 동작 과정을 정의

™

Denotational Semantics

™ 프로그램의 의미를 함수 형태로 정의

™

Axiomatic Semantics

™ 프로그램의 시작 상태와 종료 상태를 논리적 선언(assertion) 형태로 정의

(5)

동작 시맨틱스

(Operational Semantics)

™ 기본 아이디어

™ 프로그램의 의미(실행)를 상태 전이 과정으로 설명한다.

™ 각 문장 S마다 상태 전이 규칙 정의

™ 예제 read x;

y = 1;

while (x != 1) do

(y = y*x; x = x-1)

1. x 값을 읽는다.

2. y에 1 배정

3. x 값이 1이 아닌지 검사

4. 거짓이면 종료

5. 참이면 y 값을 x 값과 현재 y 값의 곱으로 변경

6. x 값 1 감소 3 번부터 반복

(6)

언어 S

™

정수

™ n ∈ Int

™

변수

™ x ∈ Var

™

™ E ∈ Exp

Stmt S Æ x = E

| S; S

| if E then S

| if E then S else S

| while E do S

| read x

| print E

Expr E Æ n | x | true | false

| E + E | E – E | E * E | E / E

(7)

기초 지식

™

합집합

A + B = { a | a ∈ A ∨ a ∈ B}

™

곱집합

A x B = {(a,b)| a ∈A ∧ b∈B}

™

함수집합

A → B = {f | f : A → B} = {f | f ∈A → B}

™ 함수 f ∈A → B

{a1↦b1, a2↦b2, …, an↦bn}

™ 함수 수정 f[a ↦b]

f[a ↦ b](x) = { b f(x) otherwiseif x = a

(8)

변수 및 상태

™

[23 + 5] vs [x + y]

™ [x + y]의 의미는 ?

™

변수 x, y의 현재 값에 따라 다르다.

™

변수들의 현재 값을 무엇이라고 할까요 ?

™ 상태(State)

(9)

상태(State)

™ 상태(A state)

™ 변수들의 현재 값

™ 하나의 함수로 생각할 수 있다.

™ s ∈ Var → Int

™ 모든 상태들의 집합

™ State = Var → Int

™ 상태 s에서 변수 값

™ s(x)

™ 상태 갱신: s’ = s[y ↦ v]

s’ (x) = { s(x) v if x != yif x = y

(10)

수식의 의미

™

수식 E의 의미

™ 상태 s에서 수식 E의 값

™ [E]s

™ s = {x ↦1, y ↦ 3}

™ [x+y]s = 4

™

상태 s에서 수식 E의 의미

™ [true]s = T [false]s = F

™ [n]s = n

™ [x]s = s(x)

™ [E1 + E2]s = [E1]s + [E2]s

™ [E1 == E2]s = T if [E1]s == [E2]s

(11)

문장의 의미

™ 문장 S의 의미

™ 문장 S가 상태 s를 s’으로 변경시킨다.

™ 상태 전이(state transition)라고 한다.

™ (s, S) → s’

™ 상태 전이(State transition)

™ (s, S) → s’ where

™ s is the initial state

™ S is a statement

™ s’ is the final state

™ 동작 시맨틱스

™ 각 문장 S마다 상태 전이 규칙 정의

™ 프로그램의 의미를 상태 전이 과정으로 설명한다. S

s

s’

(12)

추론 규칙

™

조상 추론 규칙

X parent Y X ancestor Y Y parent Z X ancestor Y X ancestor Z

a parent b b parent c

(13)

전이 규칙

(Transition Relation)

™ assignment (s, x = E) → s[x ↦ [E]s]

™ sequence (s, S1) → s’, (s’, S2) → s”

(s, S1; S2) → s”

S1 s

S2 s’

s”

(14)

전이 규칙

(Transition Relation)

™ if-then-else (s, S1) → s’

(s, if E then S1 else S2) → s’

(s, S2) → s’

(s, if E then S1 else S2) → s’

if [E]s = T

if [E]s = F

S1 s’

S2 s

s’

E T

F

(15)

예1

x = 1;

y = 2;

if x > y then max =x;

else max =y;

s0 = { }

(s0, x = 1) → s1 s1 = {x ↦ 1}

(s1, y = 2) → s2 s2 = {x ↦ 1, y ↦ 2}

(s2, if x >y …) → s3 [x>y] s2= F

(s2, max=y) → s3 s3 = {x ↦ 1, y ↦ 2, max ↦ 2}

(16)

전이 규칙

™ while

(s, S) → s’, (s’, while E do S) → s”

(s, while E do S) → s”

(s, while E do S) → s

if [E]s = T

if [E]s = F

S S . . . S

s s’ s”

(17)

전이 규칙

™ read

READ n

(s, read x) → s[x ↦ n]

™ print

PRINT [E]s (s, print E) → s

(18)

예2

read x;

y = 1;

while (x != 1) do

(y = y*x; x = x-1)

s0 = { }

(s0, read x) → s1 s1 = {x ↦ 3}

(s1, y = 1) → s2 s2 = {x ↦ 3, y ↦ 1}

(s2, while …) → s’ [x != 1]s2= T

(s2, y =x*y; x = x-1) → s3 s3 = {x ↦ 2, y ↦ 3}

(s3, while …) → s’ [x != 1]s3= T

(s3, y =x*y; x = x-1) → s4 s4 = {x ↦ 1, y ↦ 6}

(s4, while …) → s’ [x !=1]s4 = F

(19)

지금까지 한 것/앞으로 할 것!

™ Topic Logic Implementation ---

™ Syntax Grammar Parser

™ Semantics Semantics rules Interpreter

™ Type Typing rules Type checker

(20)

3.2 Other Semantics

(21)

Axiomatic Semantics

read x;

y = 1;

while (x != 1) do (y = x*y; x = x-1)

™ If x = n holds before the program is executed then y = n! will hold when the execution terminates.

™ Properties of programs are specified as assertions { P } S { Q } where

™ S is a statement

™ P is the precondition and

™ Q is the postcondition

(22)

Pre- and post conditions

™

예제

read x;

{ x=n } y =1;

{ x=n and y=1}

while (x !=1) do

(y =x *y; x = x-1) { x=1 and y=n! }

(23)

Denotational Semantics

™ Describe meaning of programs by mathematical

™ Function from states to states for each statement

™ Operational semantics

™ (s, S) Æ s’ for each statement S

™ Denotational semantics

™ s’ = f(S,s) for each statement S

(24)

Denotational Semantics

read x;

y = 1;

while (x != 1) do

(y = y*x; x = x-1)

™

The program’s computation is

™ a function from states to states:

™

The final state will be equal to the initial state except that

™ the value of x = 1 and

™ the value of y = the factorial of the value of x in the initial state.

(25)

3.3 Interpreter for Lang. S

(26)

언어 S의 인터프리터

™ 언어 S의 인터프리터 구현

™ 동작 시맨틱스(Operational Semantics)에 따라 구현

™ Recursive Descent Parsing 방식을 확장해서 구현

™ 구성 요소

™ 어휘 분석(lexical analyzer)

™ 변수들의 상태(state)

™ 각 식, 문장에 대한 해석(실행) 함수

(27)

언어 S in EBNF

Stmt S Æ x = E

| (S {; S})

| if E then S else S

| while E do S

| read x

| print E

Expr E Æ true | false

| T {+T | -T}

| T == T | T != T | T < T | T > T | !E Term T Æ F {*F | /F}

Factor F Æ n | x | (E) Prgm P Æ S

(28)

언어 S 인터프리터

™

기본원리

™ Recursive Descent Parsing 스타일로 진행하면서

™ 한 문장씩 읽어서 해석한다.

™

어휘분석

™ HW#2 확장해서 구현

™ getToken( ) 입력 프로그램을 토큰들로 분리해서 리턴

™ 변수들의 상태(state)

™ Symbol table에 변수 상태 저장

™ 각 식, 문장에 대한 해석(실행) 함수

™ 각 식, 문장마다 하나의 해석(실행) 함수 작성

™ while 문 처리

(29)

자료 구조

™ M[]

™ 입력 프로그램 저장을 위한 배열 M[]

™ pc M[]의 인덱스

™ symtable[]

™ 변수 이름과 그 값을 저장하기 위한 심볼 테이블

™ 스택 형태로 구현

(30)

어휘 분석

™ getToken()

™ Lexical Analyzer로 M[]에 저장된 입력 프로그램을 읽어서 토큰을 반환한다.

™ 키워드, 수, 변수 이름, 기타 문자 처리하도록 확장

™ 토큰의 종류

™ keyword: if return IF;

™

™ keyword: print return PRINT

™ number return NUM;

tokenval = val of the number

™ name return ID;

tokenval = i such that

symtable[i] contains the name

™ other char c return c;

(31)

심볼 테이블

™

심볼 테이블

™ 식별자(변수 이름)을 저장하기 위한 자료구조

™ 변수 이름, 토큰 번호, 값 저장

™

코드

struct entry { char *lexptr;

int token;

int val;

}struct entry symtable[ ] int lookup(char[] s)

return position of entry for s int push(char[] s, int tok)

(32)

심볼 테이블

token val lexptr ID

ID ID

x = 1;

y = 2;

if x > y then max =x;

else max =y;

lastchar lastentry

1 2 2 symtable[]

(33)

수식 해석

™ 수식 E

™ 변수를 포함한 수식 값을 계산하도록 HW#2 확장

™ 변수 값은 symtable[]에 저장되어 있음

™ 실행 과정

1. E을 읽으면서 값을 계산한다.

2. 변수 이름 x를 만나면 symtable[]에서 해당 위치를 lookup()해서 찾고 저장되어 있는 값을 사용한다.

(34)

문장 해석기 구조

void stmt( )

{ int loc, result;

switch(token)

{ case ID: loc = tokenval;

match(ID);

if (token == ‘=‘) { match(‘=‘);

result = expr( );

symtable[loc].val = result;

}break;

case ‘(‘:

case IF:

case WHILE:

case READ:

(35)

대입문 해석

™ 대입문 x = E

™ E 값을 symtable[] 내의 변수 x에 저장

™ 실행 과정

1. 변수이름 x를 읽으면 symtable[] 내의 해당 위치를 lookup()해서 찾는다.

2. E을 읽으면서 값을 계산한다.

3. 계산된 E 값을 symtable[i].val에 저장한다.

(36)

조건문 해석

™ 조건문 if E then S1 else S2

™ E 값에 따라 S1 혹은 S2 실행

™ 실행 과정

1. E을 읽으면서 값을 계산한다.

2. E 값이 true 이면 S1를 읽고 실행한다.

3. E 값이 false 이면 S1를 건너 뛰고 S2를 읽어서 실행한다.

(37)

반복문 해석

™

반복문

while E do S

™ E와 S를 반복적으로 읽으면서 해석

™ Stack W[]이용해서 구현

™ 실행 과정

1. while 문을 처음 만나면 시작 위치, 끝 위치를 W[] 스택에 push() (위치는 M[]의 인덱스 i)

2. E을 읽으면서 값을 계산한다.

3. E 값이 true 이면 S를 읽고 실행한다.

스택 W[]에 저장된 시작위치로 돌아가서 2부터 반복

4. E 값이 false 이면 스택을 pop()하고 스택에 저장된 끝 위치로 가서 진행한 .

(38)

HW #3

™

언어 S에 대한 인터프리터 구현

™

global.h, lex.c, cal.c 참고해서 작성

참조

관련 문서

– 방향 정보는 축에 대한 각속도 값을 이용하여 계산 – 소스가 불필요하여 사용 장소에 따른

사물인터넷 상에서 동작하는 각 장치들이 안전한 보안 연산 환경을 보장하기 위해서는 처음 스위치가 켜 졌을 때 펌웨어에 대한 인증 값을 검증하여 무결성을 확인할 수

일반적으로 합금의 전해질에 대한 저항은 거의 영향을 받지 않기 때문에 분극에 대한 저항의 값을 얼마나 받느냐가 중요하다.Tabl e4는 분극저항(R p ) 값을 나타낸

이에 본 논문에서 제안하는 ETOA 알고리즘은 다중 비컨을 이용하여 위치를 추적할 시, 먼저 노드로부터 측정된 TOA 값을 감시하여 NLOS 유무를 판단하고, 만약 NLOS

그리고 선형동 작을 위한 베이스

지반반력계수 혹은 전단지반력계수는 지진의 세기와 관련된 붕괴방지수준에 적합한 특성 값을

이상점의 탐지 – 이상점은 해당 자료의 보편적인 값보다 매우 크 거나 작은 값을 의미하며, 분석결과에 영향을 미치므로 제거한 후

잘못된 서식 문자, 변수의 개수, 변수의 자료형의 오류는 컴파일시 지적하지 않는다.. 서식과 변수의 자료형이 맞지 않으면 엉뚱한