본문 바로가기

728x90

ComputerScience/Principle of programing language

(8)
PL8. Names, Bindings and Scopes dynamic binding : local variable이 runtime(execution)에 메모리와 binding되고 언제든 할당된 주소가 바뀔 수 있다. static binding : static variable이 load time(before runtime)에 binding되고 프로그램 실행 중에 할당 주소가 바뀌지 않는다. explicit declaration : int a 처럼 명시적으로 타입과 변수를 선언하는 것 implicit declaration : explicit declaration 없이 변수를 사용 dynamic type binding : my_list = [1,2,3], 명시적인 타입 선언 없이 컴파일러/인터프리터가 value를 보고 알아서 추론 stack-dynamic : 메모..
PL7. Syntax Analysis - bottom up parsing 1. bottom up parsing LL parsing에서는 여러 문제점이 있었고 결국엔 모든 문법을 검사할 수 없었다. 반면 bottom up parsing은 훨신 효율적으로 "모든 문법"을 검사할 수 있다. syntax error도 backtracking이 없기 때문에 훨씬 빠르게 검사할 수 있다. 게다가 top down 에서는 EBNF를 사용했지만 bottom up 은 the larger class of grammar인 BNF로도 충분하다. bottom up 에서는 right sentential form에서 RHS 부분을 찾아서 그 이전 right sentential form으로 바꾸는 방식으로 reduce한다. right most derivation의 역순으로 전개해나간다. 다시말해 curren..
PL6. Syntax Analysis - top down parsing Syntax analysis는 lexical analyzer (based on regular grammar), syntax analyzer(or parser (based on CFG, BNF)) 두 부분으로 구성된다. BNF(context free grammar)에 기반해서 특정 string이 해당 문법으로 생성될 수 있음을 검사한다. 두 부분으로 나누었을 때 장점이 세가지가 있다. 1. lexical analysis는 상대적으로 syntax analyzer보다 간결하기 때문에 따로 분리해서 단순함을 제공한다. 2. 분리하게되면 각각 최적화가 가능해서 효율성을 제공한다. 3. 어떤 lexical analyzer는 machine에 dependent하므로 분리해서 portability를 제공한다. 1. le..
PL5. Dynamic semantics : Axiomatic 1. Axiomatic Semantics program이 semantics 적으로 올바른가? 가 무슨 뜻일까? 뒤에 더 설명하겠지만 프로그램의 precondition이 axiom원리에 의해 도출된 condition과 일치하면 correct하다고 할 수 있다. 즉 프로그램이 실행 전, 후 상태가 참이면 semantics가 올바르다고 볼 수 있다. precondition이 true이고 GCD-1이 실행, 종료 뒤, postcondition이 true라는 말이다. 코드의 각 statement를 이 두 assertion을 가지고 판별한다면 아래와 같다. 즉 x:= x+4라는 프로그램의 post condition이 x = 10이라면, precondition이 {x=5}여야지 이 프로그램이 semantics상 올바..
PL4. Dynamic semantics : Operational, Denotational 1. Dynamic Semantics Static semantics는 프로그램을 돌리지 않아도 알 수 있는 semantics를 검사했다. (타입이나 statement의 순서, id의 스코프 등) Dynamic semantics는 런타임에만 알 수 있는 프로그램의 뜻 (루프, if-else, 함수 호출 등)을 검사한다. 즉 Line의 의미를 묘사한다. Dynamic Semantics에는 Operational, Denotational, Axiomatic 방식이 있다. 둘다 프로그램의 상태 변화를 설명함으로써 프로그램의 의미를 나타내지만 operational은 state의 변화를 code의 동작으로 나타내고. denotianal은 state가 변하는 동작을 mathmatical functions로 나타낸다. ..
PL3. Static semantic 1. Semantic CFG, BNF만으로는 의미론적으로 문장이 올바른지 검사할 수 없다. 예를 들어 '프로그램 내에서 어떤 변수는 참조되기 전에 선언되어야한다' 라는 규칙은 BNF로 표현할 수 없다. syntax가 문장 구성 문법을 정의한다면 semantic은 문법이 의미론 적으로도 올바른지를 검사한다. semantic을 기술하는 대표적인 두가지 방법이 있다. Static Semantic, Dynamic Semantic 2. Static Semantic : Attribute Grammar Static Semantic은 compile time에 체크하는 semantic이다. Attribute Grammar는 Static Semantic의 한 종류로써 BNF에 세가지(1,2,3) Semantic Rule을..
PL2. Syntax 1. Terms Syntax : form, structure, grammar of expression(statement) Semantic : meaning of the expression(statement) sentence : string of characters language : set of sentences lexeme : lowest level syntatic unit (ex. int, age, =) token : category of lexeme (e.g. identifier, type) Recognizer : parser, parse sentence into a tree, check input wheter it belongs to the language Generator : generate I..
PL1. Programming Languages? 1. What is a programming language? telling computer what to do? Programing Language also can be a mean to communicate an algorithm or to describe a process 프로그래밍 언어는 단순히 컴퓨터에게 할 일을 지시하기 위한 도구가 아니라 어떤 작업의 순서, 과정을 설명하는 의사소통 수단으로의 역할을 한다. 2. How can machine understand a programming language? CPU only understand assembly language consist of 0 and 1. Compiler which is also a program translate a progr..

728x90