( Target program 은 Machine Language를 의미한다.)➡️컴파일러는 프로그래밍 언어를 다른 프로그래밍 언어로 번역한다. 즉, 하이레벨 프로그래밍 언어에서 기계어로 변환하는 것이다.➡️인터프리터는 프로그래밍 언어를 프로그래밍 언어로 '번역'하는 것
프로그램이 컴파일러에 input으로 주어진다.컴파일러는 'Lexical Analysis'를 수행해서, 프로그램을 토큰들(Sequence of Tokens)로 만들어 낸다.토큰을 입력으로, Syntax Anlaysis는 Tree를 만들어 낸다. Tree는 Parse Tr
영어를 읽을 때, 알파벳 단위로 읽지 않고 단어/문장/단락 단위로 이해를 하듯이, 컴퓨터가 프로그래밍 언어를 이해하도록 만들기 위해서는 token을 만들어주어야 한다.Lexical Analyzer가 패턴에 기반하여 토큰을 생성해 내는 역할을 한다면, Syntax Ana
정규 표현식은 간편하고, 표현력이 좋으며, 정확하고, 널리 사용되고 있다.토큰들은 일반적으로 정규 표현식을 이용해서 표현된다.정규 표현식은 다음과 같다.ℹ️
Lexical Analysis 는 series of bytes를 input으로 받고, series of token을 output으로 낸다.Lexical Analyzer(Lexer)는 이렇게 token을 만들어내는 프로그램/모듈인데, token은 정규 표현식을 통해 만들
즉, 오토마타라는 모델을 이용하여 주어진 문자열이 regular Language L에 속하는지 확인할 수 있다.Finite Otomata is a mathematical model used to represent the system that have a finite n
그렇다면 syntax analyzer에게 어떻게 올바른 syntax를 전달할 수 있을까?!INT_KEYWORD = intID = \[a-z]ASSIGNMENT = '='NUM = \[0-9]int a = 9double a = 1이 경우엔 lexical error XIN
Constant Literal (키워드, identifier, number, operator)규칙을 기반으로, 터미널을 대체하는 symbolnon-terminal이 어떻게 terminal로 대체되는지에 대한 규칙왼쪽에는 non-terminal만 올 수 있다.화살표 (a
$\\sum$ = { a, b, c } // 3개의 알파벳N = { <S>, <A>} // 2개 논 터미널P = { <S> -> a<A>c, <A>->a<A>, <A>->b, <A>->$\\epsilon$ }S = <S
e를 Final String "3+(1-5)"으로 만들었다.즉, "3+(1-5)"는 올바른 string이다.(e는 non-terminal, 3은 terminal)leaf 노드를 모두 모아서 final string을 만들어낼 수 있다.Ambiguous Grammers는
✔️ 루트 노드부터 leaf 노드로 (Star from starting Non-terminal and work your way down)✔️ Left-to-Right Scanning (input symbol을 왼쪽에서 오른쪽으로 읽는다)✔️ Left parse for
Top-down Parsing은 차례대로 production rule을 적용해 보면서 backtracking을 하게 된다. 그러나 backtracking은 시간이 많이 소요되기 때문에, 특정 제약 조건을 붙여서 '결정적인 구문 분석'을 할 수 있다.그리고 현재의 입력
{a, b, c} ⊕ {c, d} = {a, b, c} {a, b, c, 𝜺} ⊕ {c, d} = {a, b, c, d} {a, b, 𝜺} ⊕ {c, d, 𝜺} = {a, b, c, d,𝜺}๏ Calculate LOOKAHEAD⬛ S -> aBA|BB|ABc,
소스코드 확장자 : \*.mlmain 함수가 없다.ocaml Compiler : ocamlcocaml Build System : dune'nothing', 'empty'를 의미한다.python의 'none'과 유사하다.정수에 사용되는 arithmetic operator
Ocaml Basic 1. 주석(comment) 여러줄의 주석만 지원된다. 2. 변수(Variables) 1) 전역변수(global variable) > ✔ expression의 값이 계산된 후, variable에 bound 된다. > ✔ 변수가 "값 7로 바
Ocaml 프로그램은 "모듈"로 구성된다.모듈은 자바에서의 'class' 개념과 유사하다.각 모듈은 데이터(변수)와 함수들로 구성된다.모듈과 클래스의 차이모듈은 type이 아니기 때문에, 모듈은 Instantiate 할 수 없다. main, operation 두 파일
element의 유한한 sequence모든 element는 동일한 type을 가지고 있어야 한다.1;2;3 은 정수 리스트이다.1;true 는 옳지 않다.element는 ordered되어있다.1;2 != 2;1첫 element는 head이며 마지막 element는 ta
Syntax : 프로그램의 문법적인 구조Semantics : 문법적으로 옳은 프로그램의 '의미'그러나 두 statement는 semantically 의미적으로 동일하다. 왼쪽과 오른쪽은 동일한 일을 한다. y:=x는 어떠한 일도 하지 않기 때문에, 두 statement
프로그래밍 언어의 semantic은 프로그램이 어떻게 동작하는 것인가에 대한 것이다.Examplee1 + e2는 무엇인가?(+는 현재 ADD 노드일 뿐)\-> semantics 만들기calculate e1, calculate e2, sum up the two caclu
프로그래밍 언어 AE(Arithmetic Expression) 정의하기1) Syntax 정의하기Concrete SyntaxAbstract Syntax : compiler가 이용하며, semantic도 abstract syntax 기반으로 정의2) Semantic 정의하
Identifier이란Identifier이란, 프로그램 element와 관련된 '이름'이다.Function name, variable name, parameter name, field name, class name 등 ..9분
NAE에 변수를 추가함으로써, 언어 VAE("Variable and NAE")로 확장해 보자.즉, 한번 변수가 값에 bound된다면 그 변수는 udpate될 수 없다.변수 정의 추가let var = expr in expr : variable binding scope변
즉 VAE에 First Order Function을 더해보자.아래와 같은 syntax들이 가능하도록 function을 추가할 것이다.함수란 특별한 action을 수행하는 코드 조각이다.터미널에 string을 출력하는 printf, input을 받고 string으로 변환
변수(identifier)의 scope이 compile time에 정의된다.변수의 bind-bound 관계는 프로그램 구조에 따라서 결정된다. (early-binding)대부분의 프로그래밍 언어에 해당한다.위 코드에서 z는 def f x = x + z에서 정의되지 않았
F1VAE는 First Order Function을 지원하기 때문에 다음과 같은 특징을 지닌다.✔ 함수는 각각 다른 메모리에 저장된다.✔ 함수는 함수를 인수로 받거나, 리턴하지 못한다.✔ 함수는 오직 함수 호출 표현식에서만 사용될 수 있다.✔ 함수와 변수를 똑같은 방식
Syntatic Sugar이란? ![](https://velog.velcdn.com/images/dreamcomestrue/post/4ab
expr + expr 형태이므로 syntatically valid한 expression이다. evaluation result는 5이다.이 함수는 2개의 parameter를 받는데, 현재 7 하나만 전달하고 있다.fun x -> 5는 함수이다. 즉 함수 + 정수인데, 이
TFAE를 정의해 보자.expr + expr , expr - exprʎ.x : t.expr 함수 정의이다. expression에 대해서 type을 부여하고 있다. expr expr함수 application이다.t::= num | bool| t -> ttype에는 num
조건문이 가능하도록 TFAE를 확장해보자.🌱 if expr expr expr은 조건문을 나타낸다.우리의 문법상 λ.x:t.expr 로, argument type이 명시되어야 하는데 명시하지 않았기 때문이다.x가 파라미터, x+1이 함수의 바디라는 것을 추론할 수 있다
common type을 찾을 수 있다.type unification은 compliation process에 일어나며, type error을 일찍 발견함으로써 runtime error을 방지한다.possibility (1) 이중 최소한 하나는 type variable이다
조건이 참일 경우 True 브랜치를, 거짓인 경우 false 브랜치를 실행한다.if-else if-then-elsee1 ? e2 : e3조건문에서 특정 언어에서는 statement를 사용하고 다른 언어에선 expression을 사용한다.evaluate to value.