본문 바로가기

전체 글

(231)
[PL] Arithmetic Expression 📁 Simple programming language를 정의하기 위해 필요한 두 가지 정의 Syntax 정의 syntax를 정의하는 방법에는 concrete syntax와 abstract syntax 두 가지가 있다. Concrete syntax는 언어의 실제 문법적인 표현이다. 개발자들이 사용하는 문법이다. Abstract syntax는 back-end에서 사용하기 좋게 정리된 문법이다. Semantics 정의 semantics에 기반하여 프로그램의 실행 결과를 증명할 것이다. semantics는 자연어로 혹은 수학적으로 엄밀하게 정의할 수 있다. 📁 AE : Arithmetic Expression Arithmetic Expression은 본 포스팅에서 정의할 간단한 형태의 프로그래밍 언어이다. AE의..
[PL] Context Free Grammar 📁 Context Free Grammar(CFG) 📌 Context Free Grammar란 문맥을 고려하지 않고 항상 동일한 문자열을 표현하는 문법이다. CFG는 Terminal, nonterminal, production으로 구성되어있고, 각 요소의 의미는 다음과 같다. Terminal이란 기초 기호(literal)를 뜻한다. Nonterminal이란 production에 의해 최종적으로 terminal로 치환되는 기호를 말한다. Production(rule)이란 nonterminal을 치환하는 규칙을 말한다. CFG와 각 요소의 예시는 다음과 같다. 위 요소들을 이용하여 정의된 CFG의 엄밀한 정의는 다음과 같다. 위 정의로 표현된 예시는 다음과 같다. Context Free Grammar는 Reg..
[PL] Regular Expression와 유한오토마타 📁 프로그래밍 언어란? 프로그래밍 언어란 영어와 같이 알파벳 문자들로 구성된 문자열 집합이다. 알파벳 문자열이지만 영어가 아닌 것도 존재하기 때문에, 프로그래밍 언어를 임의의 알파벳 문자열이라고 표현할 수는 없다. 프로그래밍 언어는 알파벳으로 구성되면서, 문법에 부합하여야한다. 이를 다음과 같이 표현할 수 있다. L(G) : 문법을 통해 문자열의 집합을 정의함. 위 표현 방법의 각 구성 요소는 다음과 같다. G는 문법을 뜻한다. L은 문법을 입력으로 받아 해당 문법에 속하는 모든 문자열의 집합을 생성하는 함수이다. 문자열 s가 L(G) 언어일 때 다음과 같이 표현 가능하다. 위 결정문제를 판단하는 것이 구문분석기(syntax analyzer, parser)의 역할이다. 이때 결정문제란 예-아니오 답이 있..
[PL] Syntax와 Semantics 📁 프로그래밍 언어의 구성요소 📌 프로그래밍 언어는 구문구조(syntax)와 의미(sementics)로 구성된다. 때로는 실행환경(runtime environment)를 포함하기도 한다. 실행환경이란 기본제공 라이브러리 등의 프로그램 실행을 돕는 코드뭉치를 말한다. 때문에 프로그래밍 언어를 정의한다는 것은 프로그래밍 언어가 어떻게 생겼는지를 나타내는 구문구조를 정의하는 것과 각 구문구조가 어떤 동작을 수행하는지를 나타내는 의미를 정의하는 것이다. 프로그래밍 언어의 정의는 언어 스펙(specification) 문서에 기재되어 잇다. 📁 Syntax(구문구조) 📌 Syntax(구문구조)란 프로그래밍 언어의 "형태"이다. Tokens 프로그래밍언어에서 token이란 문법적으로 더 이상 나눌 수 없는 기본적인 ..
[OCaml] Comilation과 Interpretation 📁 컴퓨터에서 프로그램이 실행되는 방법 컴퓨터는 프로그래밍 언어를 있는 그대로 이해하지 못하기 때문에, 번역기 또는 해석기를 이용한다. 번역이란, 언어 A를 이해할 수 있는 동일한 의미의 언어 B로 변환하는 것이다. 해석이란, 문장 또는 행위 등의 내용을 판단하고 이해하는 것이다. 번역의 예시로는 영문번역가가 영어를 한국어로 변환하는 것이 있다. 해석의 예시로는 클래식 해설가가 클래식을 감정으로 변환하는 것이 있다. 📁 Compilation(번역) 📌 Compilation이란 프로그래밍 언어로 작성된 프로그램을 다른 언어로 번역하는 행위이다. 주로 고수준 언어를 저수준 언어로 번역한다. Compiler(컴파일러)에 의해 수행되며, 컴파일러는 프로그램을 입력으로 받아 번역된 프로그램을 반환한다. 입력된 프..
[OCaml] 프로그래밍 언어란? 👍🎨📌📝🚩☁🧡💜💯❔❓🎈 🎲🔔🔎💡 📁 프로그래밍 언어란? 프로그래밍 언어란 프로그램을 작성하기 위한 언어이다. "언어"란, 무언가와 소통하기 위한 일종의 약속을 뜻한다. "프로그래밍 언어"란, 컴퓨터와 소통하기 위한 일종의 프로토콜이다. 사람이 프로그래밍 언어로 프로그램을 작성하면, 컴퓨터는 프로그램을 "구문구조"에 기반하여 읽고 의미를 이해하며, 이해한 의미를 수행하고 결과를 사람에게 반환한다. 📁 Machine languages 기계어(machine language)란 태초의 프로그래밍 언어이다. 컴퓨터가 읽을 수 있는 0과 1로 구성되어 있다. CPU마다 다른 기계어 해석 능력을 갖고있다. 사람이 읽거나 작성하기는 어렵다. 📁 Assembly languages 어셈블리어(assembly languag..
[OCaml] Tail Call Optimization 📁 Performance degradation in recursion OCaml은 반목문 대신 재귀호출(recursion)을 사용한다. 반복문도 지원하기는 하지만, 함수형 언어에서는 대체로 사용되지 않는다. 재귀호출이 반복문과 동일한 파워를 지닌다. 즉 반복문을 통해 수행할 수 있는 것은 재귀호출로 구현이 가능하다.
[OCaml] Type definition