Arithmetic Expression Evaluation
HNU CE 프로그래밍언어론 (2021년 1학기)
무지 간단한 산술식 값계산
- 산술식 arithmetic expression
- 값계산 evaluation
- 교재 8.6절에서 다룬 논리식(Prop)의 값계산과 마찬가지 방식
- Syntax 구문(론), 문법
- Semantics 의미(론)
Syntax - 배경지식
- 언어가 어떻게 생겨먹었는지 그 모양새
- 노엄 촘스키(Noam Chomsky)의 문법(grammar) 유형 분류
- Type-0 (UG 무제약문법) - 재귀열거언어 - 튜링기계
- Type-1 (CSG 문맥의존문법) - 문맥의존언어 - LBA
- Type-3 (CFG 문맥자유문법) - 문맥자유언어 - LBA
- Type-4 (RG 정규문법) - 정규언어 - FA
- 대부분 프로그래밍언어는 CFG중에서도 결정적(deterministic) CFG를 활용해 문법을 정의
- 구체적 문법(concrete syntax) vs. 추상적 문법(abstract syntax)
Syntax, Grammar - 용어정리
- 아니 syntax도 grammar도 '문법'이라고 ... ???
- Java syntax - 자바 언어의 문법
- context-free grammar - 문맥자유문법
- Syntax: 언어의 모양새를 이루는 구조적 특징 [개념]
- Grammar: 그런 특징을 정의(표현)하는 규칙들 [규정]
-
그러니까 "syntax를 grammar로 정의(표현)한다"
- 문법(syntax)을 문법규칙(grammar)으로 정의(표현)한다
- 구문론(syntax)을 문법(grammar)으로 정의(표현)한다
- 주의: 다른 분야에서는 또 조금씩 다른 의미로 쓰일 수 있음에 유의!!
Syntax를 문법규칙으로 표기
변형생성문법규칙
Backus-Naur Form
<start> ::= <center>
| <ab><center><ab>
<ab> ::= "a" | "b"
<center> ::= "c" | "d"
S \to C \mid ACA
A \to a \mid b
C \to c \mid d
- non-terminal - 대문자, <...>
(syntactic variable) - terminal - 소문자, "..."
변형생성문법규칙
Backus-Naur Form
<Expr> ::= <Int> | <Name>
| <Expr> "+" <Expr>
<Int> ::= ... ... ...
<Name> ::= ... ... ...
E \to I \mid N \\
\qquad \mid E + E
I \to \ldots
N \to \dots
산술식 Syntax를 문법규칙으로 표기
산술식 Syntax를 문법규칙으로 표기
\begin{array}{l}
e \in \texttt{Expr} \\
e ::= n
\\~\quad~~\mid x
\\~\quad~~\mid e ~\pmb{\texttt{+}}~ e \\
\\
n \in \texttt{Int}\\
x \in \texttt{Name}
\end{array}
data Expr
= Const Int
| Var Name
| Add Expr Expr
type Name = String
Concrete Syntax
1 + (2 + 3)
Abstract Syntax
\begin{array}{l}
e ::= n \mid x \mid e ~\pmb{\texttt{+}}~ e
\\~\quad~~\mid \pmb{\texttt{(}} e \pmb{\texttt{)}}
\end{array}
\begin{array}{l}
e ::= n \mid x \mid e ~\pmb{\texttt{+}}~ e
\\~\quad~~
\end{array}
1
2
3
+
+
문법분석
parsing
syntax analysis
Abstract Syntax
\begin{array}{l}
e ::= n \mid x \mid e ~\pmb{\texttt{+}}~ e
\\~\quad~~
\end{array}
1
2
3
+
+
Semantics (의미론)
프로그래밍언어의 의미를 표현하는 여러가지 방식의 의미론
- Denotational semantics: 수학적 구조에 대응
- Axiomatic semantics: 실행 전후 논리적 조건
- Operational semantics: 동작 과정을 기술
- Small-step: 한 단계씩 진행 (중간 계산값 확인)
- Big-step: 최종 결과값을 계산하는 과정에 집중
Small-step vs. Big-step
Small-step
Big-step
e \to e_1 \to e_2 \to ~\cdots~ \to v
e \twoheadrightarrow v
e \Downarrow v
컴파일러 정의에 적합
인터프리터 정의에 적합
산술식 언어의 동작 과정 의미론
Syntax
e ::= n \mid x \mid e ~\pmb{\texttt{+}}~ e
Semantics
~\sigma,e \Downarrow v~
eval σ e
=> v
\{x\mapsto 3,\,y\mapsto 4\},\,x\,\pmb{\texttt{+}}\,y ~\Downarrow~ 7
eval [("x",3),("y",4)] (Var "x" `Add` Var "y")
=> 7
산술식 언어의 동작 과정 의미론
Syntax
e ::= n \mid x \mid e ~\pmb{\texttt{+}}~ e
Semantics
~\sigma,e \Downarrow v~
\sigma \in \texttt{Env} ~ = ~ \texttt{Name} \xrightarrow{_\mathrm{fin}} \texttt{Value}
\sigma ::= \{ x_1\mapsto v_1, \ldots, x_k\mapsto v_k\}
v \in \texttt{Value} ~ = ~ \texttt{Int}
산술식 언어의 동작 과정 의미론
Syntax
e ::= n \mid x \mid e ~\pmb{\texttt{+}}~ e
Semantics
~\sigma,e \Downarrow v~
\sigma \in \texttt{Env} ~ = ~ \texttt{Name} \xrightarrow{_\mathrm{fin}} \texttt{Value}
\sigma ::= \{ x_1\mapsto v_1, \ldots, x_k\mapsto v_k\}
v \in \texttt{Value} ~ = ~ \texttt{Int}
\frac{}{\sigma,\,n \;\Downarrow\; n}
\frac{}{\sigma,\,
x \;\Downarrow\; \sigma(x)}
\frac{\sigma,\,e_1\Downarrow\,v_1 \quad \sigma,\,e_2\Downarrow\,v_2}{\sigma,\,e_1\pmb{\texttt{+}}\,e_2 \;\Downarrow\; v_1\!+v_2}
e \in \texttt{Expr}
\{ x\mapsto 2, y\mapsto 3\}(x) = 2
\{ x\mapsto 2, y\mapsto 3\}(y) = 3
무지 단순한 산술식 언어
By 안기영 (Ahn, Ki Yung)
무지 단순한 산술식 언어
HNU CE 프로그래밍언어론 (2021년 1학기)
- 615