33
프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법 Concrete Syntax 요약 문법 Abstract Syntax 정적 의미 Static Semantics 동적 의미 Dynamic Semantics

프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

프로그래밍언어

모양Syntax

의미Semantics

구체적 문법Concrete Syntax

요약 문법Abstract Syntax

� 정적 의미 Static Semantics

동적 의미 Dynamic Semantics

Page 2: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

•문장을 만드는 방법

•프로그램을 만드는 방법

“아버지가방에들어가신다”

구체적 문장Concrete Syntax

요약 문장Abstract Syntax

아버지가 방에 들어가신다주어 목적어 동사

•문장을 읽는 방법

•프로그램을 읽는 방법

+

2 3

“2 + 3 4”×

Page 3: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

Concrete

Abstract

Page 4: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

Concrete Syntax

•프로그램을 읽는 방법

•프로그램의 구조를 어떻게 다시 만들어 낼 것인가?

“2 + 3 4”×1차원

+

2 3

2차원

E → n| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E × T | T × E | TT → Z | T + T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

G = (N,E)

s

F (X) = {s} ∪X ∪ {b | ∀a ∈ X, (a, b) ∈ E}

ax2 + x+ 1 = 0

x =−1±

√1− 4a

2a

append(l, [], c)

{P ⇒ Q,R ⇒ ¬Q,P ∧R} � S

2

프로그램

Page 5: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

Concrete Syntax

•프로그램의 문법 구조를 혼동없이 결정

“2 + 3 4”×

+

23 4

×

방향성associativity

우선순위precedence

“2 + 3 + 4”

+

2 3

4+

어디부터 묶을지

어떤 연산자가 먼저 계산될지

Page 6: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

Abstract Syntax

+

2 3

•프로그램을 만드는 방법

•문법 구조의 핵심만!

•불필요한 것들은 모두 제거

“2 더하기 3을 하고, 그 결과에 4를 곱하기”

N → zero| succ(N )

[[ zero ]] = 0[[ succ(N ) ]] = [[ N ]] + 1

T → empty| node(T, T )

T → node(T, T )

[[ empty ]] =[[ node(T1, T2) ]] = [[ T1 ]] [[ T2 ]]

L → nil| cons(N ;L)

[[ nil ]] =[[ cons(N ;L) ]] = [[ N ]] [[ L ]]

n�

i=0

i =n(n+ 1)

2

Base case: zero, 0 =0 ∗ (0 + 1)

2

Inductive case: succ(n),we have the induction hypothesisn�

i=0

i =n(n+ 1)

2.

We want to shown+1�

i=0

i =(n+ 1)(n+ 2)

2.

n+1�

i=0

i =n�

i=0

i+ (n+ 1) =n(n+ 1)

2+ (n+ 1) =

(n+ 1)(n+ 2)

2.

Base case: empty, e = 1, n = 0Inductive case: node(T1, T2),we have the induction hypothesis e1 = n1 + 1 and e2 = n2 + 1.

We want to show e = n+ 1.e = e1 + e2 = n1 + 1 + n2 + 1 and n = n1 + n2 + 1.

E → Z| E + E| E − E| E × E| E % E

3

Page 7: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

Semantics정적 의미

Static Semantics동적 의미

Dynamic Semantics

실행 전에 알 수 있는 실행해야 알 수 있는타입, 변수의 범위 값, 메모리 상태

+

2 3

정수의 타입 20의 값

Page 8: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

Semantics프로그램의 의미는 그 프로그램의 문법구조가

결정되면 혼동없이 결정될 수 있어야.

+

2 3

[[ Z ]] = Z[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

...

...

[[ E1 % E2 ]] = [[ E1 ]] mod [[ E2 ]]

9 ∗ 2 + 10/2 ∗ 7 + 3 % 2

4

[[ Z ]] = Z[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

...

...

[[ E1 % E2 ]] = [[ E1 ]] mod [[ E2 ]]

9 ∗ 2 + 10/2 ∗ 7 + 3 % 2

4

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

G = (N,E)

s

F (X) = {s} ∪X ∪ {b | ∀a ∈ X, (a, b) ∈ E}

ax2 + x+ 1 = 0

x =−1±

√1− 4a

2a

append(l, [], c)

{P ⇒ Q,R ⇒ ¬Q,P ∧R} � S

{g1, ..., gn} � f

[[ g1 ∧ .... ∧ gn ⇒ f ]] = true

∀x ∈ S.P (x)

(∀Ji.P (Ji)) ⇒ P (J)

JP (J)

J1 ... JnJ

∈ R, J1 ... Jn ∈ S ⇒ J ∈ S

F (X) = {J | J1 ... JnJ

∈ R, J1 ... Jn ∈ X}

1

+

2 3

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

G = (N,E)

s

F (X) = {s} ∪X ∪ {b | ∀a ∈ X, (a, b) ∈ E}

ax2 + x+ 1 = 0

x =−1±

√1− 4a

2a

append(l, [], c)

{P ⇒ Q,R ⇒ ¬Q,P ∧R} � S

{g1, ..., gn} � f

[[ g1 ∧ .... ∧ gn ⇒ f ]] = true

∀x ∈ S.P (x)

(∀Ji.P (Ji)) ⇒ P (J)

JP (J)

J1 ... JnJ

∈ R, J1 ... Jn ∈ S ⇒ J ∈ S

1

왜?+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

G = (N,E)

s

F (X) = {s} ∪X ∪ {b | ∀a ∈ X, (a, b) ∈ E}

ax2 + x+ 1 = 0

x =−1±

√1− 4a

2a

append(l, [], c)

{P ⇒ Q,R ⇒ ¬Q,P ∧R} � S

{g1, ..., gn} � f

[[ g1 ∧ .... ∧ gn ⇒ f ]] = true

∀x ∈ S.P (x)

(∀Ji.P (Ji)) ⇒ P (J)

JP (J)

J1 ... JnJ

∈ R, J1 ... Jn ∈ S ⇒ J ∈ S

1

Page 9: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

문법과 의미의 귀납적 정의Inductive Definition

Page 10: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

문법과 의미의 귀납적 정의Inductive Definition

Page 11: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

문법과 의미의 귀납적 정의Inductive Definition

Page 12: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

문법과 의미의 귀납적 정의Inductive Definition

Page 13: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

문법과 의미의 귀납적 정의Inductive Definition

Page 14: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

선언논리+

[[ · ]] : E → Z[[ · ]] : A → bool

[[ Z ]] = Z[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

E → Z| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

1

[[ E ]] : Z[[ A ]] : bool

[[ Z ]] = Z[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

E → Z| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

1

[[ E ]] : Z[[ A ]] : bool

[[ Z ]] = Z[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

E → Z| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

1

expression assertion

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ Z ]] = Z[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → n| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

1

Page 15: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

선언문의 의미

��� ��

��� �� compositional definition

[[T ]] = true

[[F ]] = false

[[¬f ]] = not[[f ]]

[[f1 ∧ f2]] = [[f1]] andalso [[f2]]

[[f1 ∨ f2]] = [[f1]] orelse [[f2]]

[[f1 ⇒ f2]] = [[f1]] implies [[f2]]

��� ��� f� ��� �� � �.

assertion[[ E ]] : Z[[ A ]] : bool

[[ Z ]] = Z[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → Z| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

1

궁극을 드러내는denotational semantics

Page 16: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

프로그램 식의 의미

변수의 의미를 어떻게 정의하지?

[[ E ]] : Z[[ A ]] : bool

[[ Z ]] = Z[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

E → Z| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

1

expressionσ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ n ]] = n[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → n| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

1

Page 17: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

환경의 필요성!Environment

[[ E ]] : Env → Z[[ A ]] : bool

[[ Z ]] = Z[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → Z| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

1

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ Z ]] = Z[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → Z| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

1

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ n ]] = n[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → n| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

1

Page 18: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

환경의 필요성!Environment

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]∅eq[[ E2 ]]∅[[ E1 ≤ E2 ]] = [[ E1 ]]∅le[[ E2 ]]∅

[[ let x := 2 in let y:= x + 3 in x + y ]]∅= [[ let y:= x + 3 in x + y ]]{x �→ 2}= [[ x + y ]]{x �→ 2, y �→ 5}= 7

let x := 2 in let y:= 3 in x + y

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ n ]] = n[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → n| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

1

닫혀 있는 프로그램 = 빈 환경에서 안전하게 실행된다.

Page 19: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

프로그램 식의 타입Γ ∈ TypeEnv = Id → Type

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]∅eq[[ E2 ]]∅[[ E1 ≤ E2 ]] = [[ E1 ]]∅le[[ E2 ]]∅

[[ let x := 2 in let y:= x + 3 in x + y ]]∅= [[ let y:= x + 3 in x + y ]]{x �→ 2}= [[ x + y ]]{x �→ 2, y �→ 5}= 7

let x := 2 in let y:= 3 in x + y

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ n ]] = n[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → n| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

1

Γ ∈ TypeEnv = Id → Type

Type := τ | Int | Bool | Type → Type

Γ � n : Int (constant)

Γ(x) = τ

Γ � x : τ (variable)

Γ � E1 : τ1 Γ, x : τ1 � E2 : τ2Γ � let x := E1 in E2 : τ2 (letin)

Γ � E : IntΓ � −E : Int

Γ � E1 : Int Γ � E2 : IntΓ � E1 + E2 : Int

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]∅eq[[ E2 ]]∅[[ E1 ≤ E2 ]] = [[ E1 ]]∅le[[ E2 ]]∅

[[ let x := 2 in let y:= x + 3 in x + y ]]∅= [[ let y:= x + 3 in x + y ]]{x �→ 2}= [[ x + y ]]{x �→ 2, y �→ 5}= 7

let x := 2 in let y:= 3 in x + y

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ n ]] = n[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

1

함수 타입정의

S

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

Γ � n : Int (constant)

Γ(x) = τ

Γ � x : τ (variable)

Γ � E1 : τ1 Γ, x : τ1 � E2 : τ2Γ � let x := E1 in E2 : τ2 (letin)

Γ � E : IntΓ � −E : Int

Γ � E1 : Int Γ � E2 : IntΓ � E1 + E2 : Int

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]∅eq[[ E2 ]]∅[[ E1 ≤ E2 ]] = [[ E1 ]]∅le[[ E2 ]]∅

[[ let x := 2 in let y:= x + 3 in x + y ]]∅= [[ let y:= x + 3 in x + y ]]{x �→ 2}= [[ x + y ]]{x �→ 2, y �→ 5}= 7

let x := 2 in let y:= 3 in x + y

σ ∈ Env = Id → Int

T [[ E ]] : Env → Z[[ A ]] : bool

1

Page 20: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

선언문의 의미��� ��

��� �� compositional definition

[[T ]] = true

[[F ]] = false

[[¬f ]] = not[[f ]]

[[f1 ∧ f2]] = [[f1]] andalso [[f2]]

[[f1 ∨ f2]] = [[f1]] orelse [[f2]]

[[f1 ⇒ f2]] = [[f1]] implies [[f2]]

��� ��� f� ��� �� � �.

assertion

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]∅eq[[ E2 ]]∅[[ E1 ≤ E2 ]] = [[ E1 ]]∅le[[ E2 ]]∅

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ n ]] = n[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → n| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

1

[[ E ]] : Z[[ A ]] : bool

[[ Z ]] = Z[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

E → Z| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

1

환경이 굳이필요하지 않다.

Page 21: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

프로그램 식의 타입Γ ∈ TypeEnv = Id → Type

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]∅eq[[ E2 ]]∅[[ E1 ≤ E2 ]] = [[ E1 ]]∅le[[ E2 ]]∅

[[ let x := 2 in let y:= x + 3 in x + y ]]∅= [[ let y:= x + 3 in x + y ]]{x �→ 2}= [[ x + y ]]{x �→ 2, y �→ 5}= 7

let x := 2 in let y:= 3 in x + y

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ n ]] = n[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → n| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

1

함수 타입정의

사실 여기서도 환경이 꼭 필요하지는 않다.

Γ ∈ TypeEnv = Id → Type

Type := τ | Int | Bool | Type → Type

Γ � n : Int (constant)

Γ(x) = τ

Γ � x : τ (variable)

Γ � E1 : τ1 Γ, x : τ1 � E2 : τ2Γ � let x := E1 in E2 : τ2 (letin)

Γ � E : IntΓ � −E : Int

Γ � E1 : Int Γ � E2 : IntΓ � E1 + E2 : Int

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]∅eq[[ E2 ]]∅[[ E1 ≤ E2 ]] = [[ E1 ]]∅le[[ E2 ]]∅

[[ let x := 2 in let y:= x + 3 in x + y ]]∅= [[ let y:= x + 3 in x + y ]]{x �→ 2}= [[ x + y ]]{x �→ 2, y �→ 5}= 7

let x := 2 in let y:= 3 in x + y

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ n ]] = n[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

1

S

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

Γ � n : Int (constant)

Γ(x) = τ

Γ � x : τ (variable)

Γ � E1 : τ1 Γ, x : τ1 � E2 : τ2Γ � let x := E1 in E2 : τ2 (letin)

Γ � E : IntΓ � −E : Int

Γ � E1 : Int Γ � E2 : IntΓ � E1 + E2 : Int

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]∅eq[[ E2 ]]∅[[ E1 ≤ E2 ]] = [[ E1 ]]∅le[[ E2 ]]∅

[[ let x := 2 in let y:= x + 3 in x + y ]]∅= [[ let y:= x + 3 in x + y ]]{x �→ 2}= [[ x + y ]]{x �→ 2, y �→ 5}= 7

let x := 2 in let y:= 3 in x + y

σ ∈ Env = Id → Int

T [[ E ]] : Env → Z[[ A ]] : bool

1

Page 22: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

안전한 프로그래밍

프로그램이 제대로 생겼나?parser1 + x +

프로그램의 타입이 올바른가?

type checkingtype inference

let x := 1 in x + “y”

프로그램의 값, 메모리가 올바른가?

static analyzer, model checking,formal verification

...

y / (x - 2*z + 10)

Page 23: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ Z ]] = Z[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → n| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

F 0 = {s}F 1 = {zero}F 1 = {zero, succ(zero)}F 2 = {zero, succ(zero), succ(succ(zero))}

...

1

요약 문법 Γ ∈ TypeEnv = Id → Type

Type := τ | Int | Bool | Type → Type

Γ � n : Int (constant)

Γ(x) = τ

Γ � x : τ (variable)

Γ � E1 : τ1 Γ, x : τ1 � E2 : τ2Γ � let x := E1 in E2 : τ2 (letin)

Γ � E : IntΓ � −E : Int

Γ � E1 : Int Γ � E2 : IntΓ � E1 + E2 : Int

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]∅eq[[ E2 ]]∅[[ E1 ≤ E2 ]] = [[ E1 ]]∅le[[ E2 ]]∅

[[ let x := 2 in let y:= x + 3 in x + y ]]∅= [[ let y:= x + 3 in x + y ]]{x �→ 2}= [[ x + y ]]{x �→ 2, y �→ 5}= 7

let x := 2 in let y:= 3 in x + y

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ n ]] = n[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

1

타입

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

σ ∈ Env = Id → Int

[[ E ]] : Env → Z[[ A ]] : bool

[[ n ]] = n[[ x ]] = ?

[[ let x := E1 in E2 ]] = ?[[ −E ]] = −[[ E ]]

[[ E1 + E2 ]] = [[ E1 ]] + [[ E2 ]]

[[ E1 = E2 ]] = [[ E1 ]]eq[[ E2 ]][[ E1 ≤ E2 ]] = [[ E1 ]]le[[ E2 ]]

E → n| x| let x := E in E| −E| E + E

A → T| F| E = E| E ≤ E| ¬ A| A ∨A| A ∧A| A ⇒ A

+ : Z → Z → Z× : Z → Z → Z

= [[ 2 + 3 ]]× [[ 4 ]]= ([[ 2 ]] + [[ 3 ]])× 4= (2 + 3)× 4= 20

E → Z | E + T | T + ET → Z | T × T

1

실행 의미

프로그램의 구조, 의미귀납적 정의법, 추론 규칙

시작의 시작

Page 24: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

앞으로 배울 것들

•기계 중심의 언어 imperative language

•값 중심의 언어 applicative language

•물건 중심의 언어 object-oriented language

syntax, semantics, motivations for various features, implementations, issues, ...

Page 25: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

기계 중심의 언어•제어 흐름 control flow

•명령문 statement

•기계상태 memory + cpu + keyboard + monitor

Page 26: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

Imperative Language: SyntaxProgram

P → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

Γ � n : Int (constant)

Γ(x) = τ

Γ � x : τ (variable)

Γ � E1 : τ1 Γ, x : τ1 � E2 : τ2Γ � let x := E1 in E2 : τ2 (letin)

Γ � E : IntΓ � −E : Int

Γ � E1 : Int Γ � E2 : IntΓ � E1 + E2 : Int

[[ n ]]σ = n[[ x ]]σ = σ(x)

[[ let x := E1 in E2 ]]σ = [[ E2 ]]σ{x �→ [[ E1 ]]σ}[[ −E ]]σ = −[[ E ]]σ

[[ E1 + E2 ]]σ = [[ E1 ]]σ + [[ E2 ]]σ

[[ E1 = E2 ]] = [[ E1 ]]∅eq[[ E2 ]]∅[[ E1 ≤ E2 ]] = [[ E1 ]]∅le[[ E2 ]]∅

1

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

x := 0;y := 0;while x < 11 doy := y + x;x := x + 1;

write y

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

Γ � n : Int (constant)

Γ(x) = τ

Γ � x : τ (variable)

Γ � E1 : τ1 Γ, x : τ1 � E2 : τ2Γ � let x := E1 in E2 : τ2 (letin)

Γ � E : IntΓ � −E : Int

Γ � E1 : Int Γ � E2 : IntΓ � E1 + E2 : Int

1

55

Page 27: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

•Statement S: 프로그램 명령문은 기계의 상태 / 메모리를 변화시킴

•Expression E: 프로그램식은 값을 계산

Imperative Language: Semantics

M � E ⇓ v

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

x := 0;y := 0;while x < 11 doy := y + x;x := x + 1;

write y

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

Γ � n : Int (constant)

Γ(x) = τ

Γ � x : τ (variable)

Γ � E1 : τ1 Γ, x : τ1 � E2 : τ2Γ � let x := E1 in E2 : τ2 (letin)

Γ � E : IntΓ � −E : Int

Γ � E1 : Int Γ � E2 : IntΓ � E1 + E2 : Int

1

M � E ⇓ vM � S ⇓ M �

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

x := 0;y := 0;while x < 11 do

y := y + x;x := x + 1;

write y

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

Γ � n : Int (constant)

Γ(x) = τ

Γ � x : τ (variable)

Γ � E1 : τ1 Γ, x : τ1 � E2 : τ2Γ � let x := E1 in E2 : τ2 (letin)

Γ � E : IntΓ � −E : Int

Γ � E1 : Int Γ � E2 : IntΓ � E1 + E2 : Int

1

M � E ⇓ vM � S ⇓ M �

E and S are syntactic objects

v and M are semantic objects

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

x := 0;y := 0;while x < 11 doy := y + x;x := x + 1;

write y

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

1

Page 28: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

집합을 만드는 방법

M � E ⇓ vM � S ⇓ M �

E and S are syntactic objects

v and M are semantic objects

v ∈ Val = Z + B

M ∈ Memory = Addr → Val

A+B separated sum {a, b, ...}

A×B cartesian product {�a, b�, ...}

A → B finite functions {f, g, ..}

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

x := 0;y := 0;while x < 11 doy := y + x;x := x + 1;

write y

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

1

M � E ⇓ vM � S ⇓ M �

E and S are syntactic objects

v and M are semantic objects

v ∈ Val = Z + B

M ∈ Memory = Addr → Val

A+B separated sum {a, b, ...}

A×B cartesian product {�a, b�, ...}

A → B finite functions {f, g, ..}

f ∈ A → B iff dom(f) is a finite subset of A.

f [b/a](x) =

�b if x = a

f(x) otherwise

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

x := 0;y := 0;while x < 11 doy := y + x;x := x + 1;

write y

1

Page 29: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

의미 표현Semantic Objects

메모리

M � E ⇓ vM � S ⇓ M �

E and S are syntactic objects

v and M are semantic objects

v ∈ Val = Z + B

M ∈ Memory = Addr → Val

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

x := 0;y := 0;while x < 11 doy := y + x;x := x + 1;

write y

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

1

이것들이 돌아다니는 공간을 정의

M � E ⇓ vM � S ⇓ M �

E and S are syntactic objects

v and M are semantic objects

v ∈ Val = Z + B

M ∈ Memory = Addr → Val

n ∈ Z

b ∈ B = {T, F}

x ∈ Addr = Id

A+B separated sum {a, b, ...}

A×B cartesian product {�a, b�, ...}

A → B finite functions {f, g, ..}

f ∈ A → B iff dom(f) is a finite subset of A.

f [b/a](x) =

�b if x = a

f(x) otherwise

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

1

M � E ⇓ vM � S ⇓ M �

E and S are syntactic objects

v and M are semantic objects

v ∈ Val = Z + B

M ∈ Memory = Addr → Val

n ∈ Z

b ∈ B = {T, F}

x ∈ Addr = Id

A+B separated sum {a, b, ...}

A×B cartesian product {�a, b�, ...}

A → B finite functions {f, g, ..}

f ∈ A → B iff dom(f) is a finite subset of A.

f [b/a](x) =

�b if x = a

f(x) otherwise

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

1

M � E ⇓ vM � S ⇓ M �

E and S are syntactic objects

v and M are semantic objects

v ∈ Val = Z + B

M ∈ Memory = Addr → Val

n ∈ Z

b ∈ B = {T, F}

x ∈ Addr = Id

A+B separated sum {a, b, ...}

A×B cartesian product {�a, b�, ...}

A → B finite functions {f, g, ..}

f ∈ A → B iff dom(f) is a finite subset of A.

f [b/a](x) =

�b if x = a

f(x) otherwise

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

1

정수

참거짓

주소

Page 30: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

프로그램식의 의미M � n ⇓ n

M � true ⇓ T

M � false ⇓ F

M(x) = v

M � x ⇓ v

M � E1 ⇓ v1 M � E2 ⇓ v2 v = v1 + v2M � E1 + E2 ⇓ v

M � E1 ⇓ v M � E2 ⇓ vM � E1 = E2 ⇓ T

M � E1 ⇓ v1 M � E2 ⇓ v2 v1 �= v2M � E1 = E2 ⇓ F

M � E ⇓ vM � S ⇓ M �

E and S are syntactic objects

v and M are semantic objects

v ∈ Val = Z + B

M ∈ Memory = Addr → Val

n ∈ Z

b ∈ B = {T, F}

x ∈ Addr = Id

1

M � E ⇓ v

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

x := 0;y := 0;while x < 11 doy := y + x;x := x + 1;

write y

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

Γ � n : Int (constant)

Γ(x) = τ

Γ � x : τ (variable)

Γ � E1 : τ1 Γ, x : τ1 � E2 : τ2Γ � let x := E1 in E2 : τ2 (letin)

Γ � E : IntΓ � −E : Int

Γ � E1 : Int Γ � E2 : IntΓ � E1 + E2 : Int

1

프로그램식이 메모리를 가지고 값을 계산

큰 보폭으로big-step operational

semantics

Page 31: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

명령문의 의미

M � n ⇓ n

M � true ⇓ T

M � false ⇓ F

M(x) = v

M � x ⇓ v

M � E1 ⇓ v1 M � E2 ⇓ v2 v = v1 + v2M � E1 + E2 ⇓ v

M � E1 ⇓ v M � E2 ⇓ vM � E1 = E2 ⇓ T

M � E1 ⇓ v1 M � E2 ⇓ v2 v1 �= v2M � E1 = E2 ⇓ F

M � E ⇓ v

M � x := E ⇓ M [v/x]

M � S1 ⇓ M1 M1 � S2 ⇓ M2

M � S1;S2 ⇓ M2

Read nM � read x ⇓ M [n/x]

Read n

M � E ⇓ v Write vM � write E ⇓ M

Write v

n ∈ Z

b ∈ B = {T, F}

x ∈ Addr = Id

1

명령문은 메모리를 변화시킴

M � E ⇓ vM � S ⇓ M �

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

x := 0;y := 0;while x < 11 do

y := y + x;x := x + 1;

write y

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

Γ � n : Int (constant)

Γ(x) = τ

Γ � x : τ (variable)

Γ � E1 : τ1 Γ, x : τ1 � E2 : τ2Γ � let x := E1 in E2 : τ2 (letin)

Γ � E : IntΓ � −E : Int

Γ � E1 : Int Γ � E2 : IntΓ � E1 + E2 : Int

1

Page 32: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

명령문의 의미M � E ⇓ T M � S1 ⇓ M1

M � if E then S1 else S2 ⇓ M1

M � E ⇓ F M � S2 ⇓ M2

M � if E then S1 else S2 ⇓ M2

M � E ⇓ FM � while E do S ⇓ M

M � E ⇓ T M � S ⇓ M1 M1 � while E do S ⇓ M2

M � while E do S ⇓ M2

M � E1 ⇓ v1 M � E2 ⇓ v2 v1 > v2M � for x := E1 to E2 do S ⇓ M

n ∈ Z

b ∈ B = {T, F}

x ∈ Addr = Id

A+B separated sum {a, b, ...}

A×B cartesian product {�a, b�, ...}

A → B finite functions {f, g, ..}

f ∈ A → B iff dom(f) is a finite subset of A.

f [b/a](x) =

�b if x = a

f(x) otherwise

2

응? 제대로 정의한 것 맞아?

Page 33: 프로그래밍언어 - Seoul National Universityropas.snu.ac.kr/~dreameye/PL/slide/PL2.pdf · 2011-03-16 · 프로그래밍언어 모양 Syntax 의미 Semantics 구체적 문법

명령문의 의미

M � E ⇓ T M � S1 ⇓ M1

M � if E then S1 else S2 ⇓ M1

M � E ⇓ F M � S2 ⇓ M2

M � if E then S1 else S2 ⇓ M2

M � E ⇓ FM � while E do S ⇓ M

M � E ⇓ T M � S ⇓ M1 M1 � while E do S ⇓ M2

M � while E do S ⇓ M2

M � E1 ⇓ v1 M � E2 ⇓ v2 v1 > v2M � for x := E1 to E2 do S ⇓ M

M � E1 ⇓ v1 M � E2 ⇓ v2 v1 ≤ v2 k = v2 − v1M [v1/x] � S ⇓ M1

M1[v1 + 1/x] � S ⇓ M2...

Mk[v1 + k/x] � S ⇓ Mk+1

M � for x := E1 to E2 do S ⇓ Mk+1

n ∈ Z

b ∈ B = {T, F}

x ∈ Addr = Id

A+B separated sum {a, b, ...}

A×B cartesian product {�a, b�, ...}

A → B finite functions {f, g, ..}

f ∈ A → B iff dom(f) is a finite subset of A.

f [b/a](x) =

�b if x = a

f(x) otherwise

2

ProgramP → S

StatementS → x := E

| S;S| if E then S else S| while E do S| for x := E to E do S| read x| write E| skip

ExpressionE → n | true | false | x

| E + E | E − E | E ∗ E | E/E| E = E | E < E | not E

x := 0;y := 0;while x < 11 doy := y + x;x := x + 1;

write y

for x:= 0 to 10 doy := y + x;

write y

Γ ∈ TypeEnv = Id → Type

Type → τ | Int | Bool | Type → Type

3