본문 바로가기

23년 1학기 학교공부/프로그래밍언어개론

(24)
[PL] Pointer
[PL] Loops in programming language 📁 Loops Programming language는 다양한 형태의 반복문을 지원한다. While loop Do-while loop For loop 이때 MiniC는 while loop만을 지원하며, 다른 형태의 반복문을 syntactic sugar로 정의할 수 있다. 해당 포스팅에서는 MiniC에 반복문을 추가하여 확장한 MiniC를 정의한다. 📁 Concrete Syntax 📁 Abstract syntax 📁Semantics 📁 Example x = 3; // [x ↦→ 3] y = 0; // [x ↦→ 3, y ↦→ 0] while x > 0 { // iter1: x > 0 is true in [x ↦→ 3, y ↦→ 0] y = y + x; // iter1: [x ↦→ 3, y ↦→ 3] x = ..
[PL] Imperative Langauge : MiniC 📁 Imperative Langauge(명령형 언어) 연속된 command(명령)을 통해 프로그램의 의미를 수행하는 언어를 말한다. command는 상태전이를 수행한다. 즉 statement. 상태는 일반적으로 메모리 상태를 의미하고, 특정 메모리 상태에서 command 실행시 메모리 상태가 변경된다. C/C++, Java, Javascript, Python 등 일반적으로 statement를 지원하는 언어는 모두 imperative langauge이다. OCaml은 expression만으로 이루어지므로 imperative language가 아니다. line 1: x = 1; (* state0 : x and y are uninitialized *) line 2: y = 2; (* state1 : x is ..
[PL] Recursion 📁 Recursion 재귀호출이란 함수가 자기자신을 호출하는 것을 말한다. 직접호출(direct recursion)이란 함수 몸체에서 자기자신을 호출하는 것을 말한다. (* direct recursion *) let rec sum (x : int) : int = match x with | 0 -> 0 | _ -> x + (sum (x - 1)) 간접호출(indirect recursion)이란 자기가 부른 함수를 자기가 호출하는 것을 말한다. (* indirect(mutual) recursion *) let rec is_even (x : int) : bool = if x = 0 then true else is_odd (x-1) and is_odd (x : int) : bool = if x = 0 then ..
[PL] Conditional Branch 📁 Conditional Branch 특정 조건에 따라 서로 다른 행동을 수행하는 구문을 conditional branch라고 한다. 조건을 만족하는 경우 true branch, 만족하지 않는 경우 false branch를 수행하는 방식이다. 일반적으로 if-else 혹은 if-then-else의 형태를 띄는데, 삼항연산자(e1 ? e2 : e3) 등 그 외의 형태도 존재한다. 📁 Extension of FVAE: CFVAE 해당 포스팅에서는 FVAE에 조건분기문을 추가한 CFVAE(Conditional branch and FVAE)를 정의한다. CFVAE언어는 다음과 같이 정의된다. F1VAE 언어의 예시는 다음과 같다. 📁 CFVAE의 Concrete syntax FVAE는 하나의 표현식으로 이루어진..
[PL] First-class Functions 📁 First-class Functions First-class function와 second-class function의 차이점은 아래 포스팅에서 자세히 설명한다. https://aowwl.tistory.com/151 first-class function은 함수를 "값"으로 취급하기 때문에 다음과 같은 행동이 가능하다. 함수를 변수에 저장할 수 있다. 함수를 함수의 인자로 전달할 수 있다. 함수를 반환할 수 있다. Functional language는 기본적으로 first-class function(high-order function)을 지원한다. 📁 Extension of VAE : FVAE 1 해당 포스팅에서는 VAE에 함수를 추가하여 확장한 FVAE(First-class Function and V..
[PL] Function 📁 Function(함수) Function(함수)란 특정 동작을 수행하는 코드를 하나로 묶어 활용하는 코드뭉치를 말한다. 예를 들면 다음과 같은 함수가 있다. printf 함수 : 문자열을 화면에 출력한다. read_line 함수 : 사용자의 입력을 받아 문자열로 반환한다. 수학의 "함수"에서 기원했지만, 프로그램의 함수에는 side-effect(부작용)이 존재한다. 예를 들면 함수에 같은 값을 전달해도 다른 값을 반환할 수 있다. 수학에서는 f라는 함수에 1이라는 값을 아무리 많이 전달해도 항상 같은 값이 나오지만, 프로그램에서는 f라는 함수에 1이라는 값을 전달할 때마다 결과값이 바뀔 수 있다. 📁 First-order function(일차원 함수) vs Higher-order function(고차원..
[PL] Identifier와 Scope 📁 Identifiers(식별자) 📌 Identifiers(식별자)란 프로그램의 어떤 요소와 연관된 이름을 말한다. 함수 이름(함수와 연관) 변수 이름(값과 연관) 파라메터 이름(인자값과 연관) 필드 이름(필드값과 연관) 메소드 이름(메소드와 연관) 클래스 이름(클래스와 연관) 하나의 identifiers는 프로그램 내에 여러번 등장할 수 있다. 📁 Occurrences 📌 Binding occurrence : identifier 정의를 위해 등장한다. 예를 들면 변수 정의가 있다. 📌 Bound occurrence : identifier와 연관된 요소 사용을 위해 등장한다. 예를 들면 변수에 저장된 값을 사용하는 경우가 있다. 📌 Free identifier : Binding 및 Bound occurr..