반응형

PL 10

[PL] Data types(3)

Union types 유니온은 실행시간의 다른 시간들동안 다른 타입의 값들을 저장할 수 있도록 하는 타입이다. 단점은 type checking이 dynamic해야한다는 것이며 이는 discriminant라는 indicator에 의해서 이루어진다. 반면 C/C++에서는 유니온 타입의 type checking을 지원하지 않는데 이런한 유니온 타입을 Free Union 이라고 한다. Free Union은 안전하지 않은 방법이며 Java나 C# 같이 reliability가 높은 언어들은 유니온 자체를 지원하지 않는다. Pointer types and Reference types 포인터 타입 변수는 indirect addressing과 dynamic memory를 제공한다. 이를 통해 포인터는 dynamicall..

PL 2022.04.23

[PL] Data types(2)

이전 포스팅: [PL] Data types(1) Array Types(배열 타입) 배열은 여러개의 동일한 데이터 타입을 묶어서 처리하는 데이터 타입이다. 인덱싱(Indexing)을 통해 각각의 원소에 접근할 수 있으며 C/C++에서는 배열의 인덱스 범위 검사(Index range checking)를 수행하지 않지만 Java 등의 언어에서는 수행한다. ※ Subscript Binding and Array Categories Static - 고정된 메모리 위치에 고정된 크기의 배열을 할당하는 방식(before runtime) - 실행과 동시에 해당 메모리는 할당된 상태로 프로그램이 끝날때까지 사용 - 효율적이나 유연성(재귀 호출 등)이 떨어짐 - static이 붙은 배열 Fixed stack-dynamic ..

PL 2022.04.18

[PL] Data types(1)

C언어의 자료형 Java의 자료형 C에서는 부호가 없는 unsigned 정수형을 지원하지만 Java에서는 지원하지 않는다. 또한 Java의 non-primitive data type의 종류에는 array, list, class 등이 있다. 기본 자료형(Primitive data types) 기본 자료형이란 자신을 제외한 또다른 자료형을 이용해서 정의되지 않는 자료형을 말한다. ※ 기본 자료형의 종류 정수형(Integer) - byte, short, int, long ... 실수형(Float point) - float, double Complex - 복소수 계산에서 사용 Decimal Boolean - true or false 문자형(Character) ※ 문자열 타입(String data type) C/..

PL 2022.04.18

[PL] Names, Binding, Scope

변수(Variables) 변수는 컴퓨터 내의 메모리 조각(cell) 혹은 조각들의 모음이라고 생각하면 된다. 변수는 다음과 같은 속성들에 의해서 특징지어진다. Name(이름) Address(주소) Value(값) Type(타입) Lifetime(생명주기) Scope(유효범위) Name(이름) ※ Design Issues - 변수 명의 최대 길이는 얼마나 길게 할 것인가 - 대소문자를 구분할 것인가? - 키워드(keyword)나 예약어(reserved word)를 변수명으로서 허용할 것인가? ※ Special words - 키워드(keyword) : 프로그래밍 언어의 특정 상황에서 특별하게 동작하는 단어 ex) int, float, if ... - 예약어(reserved word) : 변수 이름으로 사용할..

PL 2022.04.17

[PL] 어휘분석과 구문분석(Lexical and Syntax Analysis)

구문 분석(Syntax analysis) 과정은 BNF에 기반하는데 이는 명확, 간결하고 paser의 기초가 되며 유지보수가 용이하다는 장점이 있기 때문이다. 구문 분석은 Lexical analyzer와 Syntax analzer(Parser) 두 가지 부분으로 구성된다. 이들이 분리되어 있는 이유는 다음과 같은 이유가 있다. 단순성(Simplicity) : 어휘 분석이 상대적으로 단순해서 분리 후 더 단순해질 수 있음 효율성(Efficiency) : 어휘 분석이 전체 컴파일 시간의 큰 부분을 차지하기 때문에 최적화가 필요하지만 구문 분석기는 최적화가 필요 없기 때문에 분리가 효과적 이식성(Portability) : 어휘 분석기는 파일 입력이 플랫폼에 종속적이지만 구문 분석기는 독립적이기 때문 Lexic..

PL 2022.04.17

[PL] Semantic의 표현

Semantic 표현은 크게 Static Semantics와 Dynamic Semantics로 나뉜다. Static Semantics(정적 의미론) static semantics는 CFG, BNF 만으로는 표현될 수 없는 규칙들을 표현하기 위해 고안된 것이다. 대표적 예시로 '프로그램 내에서 어떤 변수는 참조되기 전에 선언되어야한다' 라는 규칙은 BNF로 표현할 수 없다. Attribute Grammars Attribute Grammar = BNF + 3 Semantic Rules Semantic Rules - 1) BNF에서 쓰이는 각각의 symbol x에다가 A(x)라는 속성을 부여할 수 있음 - 2) 각 속성을 정의 하기 위한 함수를 정할 수 있음 - 3) 속성에 대한 명제를 정의하기 위한 pred..

PL 2022.04.17

[PL] Syntax의 표현

Terminology language(언어) : 알파벳으로 만들 수 있는 모든 String의 집합 Sentence(문장) : Language의 한 String Lexeme(어휘) : 의미적 요소의 최소 단위 Token(토큰) : Lexeme의 카테고리 Syntax(구조, 문법) : expression, statement, program units의 형태, 구조 Semantics(의미) : expression, statementm program units의 의미 Syntax를 표현하는 방법 CFG(Context Free Grammar) CFG = (N, T, P, S) - N = Nonterminal symbols (변수 목록) - T = Terminal symbols (상수 목록) - P : Produc..

PL 2022.04.15

[PL] 프로그래밍 언어 구현 방법

프로그래밍 언어 구현 방법 Compilation - 소스 코드를 기계어로 해석하여 프로그램을 실행한다. - 해석 속도는 느리지만 실행 속도는 빠르다. ※ compilation 과정 1) Lexical analysis (어휘 분석기) : 어휘 단위로 구분하여 token들을 반환 2) Syntax analysis (구문 분석기) : token들로 parse tree를 생성하여 문법이 맞는지 확인 3) Semantics analysis (의미 분석기) : 문장의 의미를 분석하여 intermediate code를 생성 4) Code generation (코드 생성기) : 기계어 프로그램으로 변환 Pure Interpretation - 해석 과정이 없다. - 프로그램 구현이 쉽다. (런타임 에러가 자주 발생한다...

PL 2022.04.14

[PL] 프로그래밍 언어 설계

언어 설계에 미친 영향 Computer Architecture(컴퓨터 구조) - 컴퓨터의 기본 구조는 언어 설계에 영향을 끼치는데, 지금까지 널리 사용된 대부분의 언어는 폰 노이만 구조에 기반하여 설계된 명령형 언어들이다. ※ Von Neuman Architecture(폰 노이만 구조) - 메모리에 프로그램(명령어와 데이터) 저장하고 순차적으로 실행한다. -CPU는 메모리에 저장된 명령어를 하나씩 가져와서 인출(fetch)-해석(decode)-실행(execute)을 반복한다. ※ 명령형 언어(Imperative languages)의 특징 - 메모리 위치를 표현하는 변수의 사용 - 변수의 값을 변경하기 위한 대입문의 사용 - 명령의 순차적 실행_반복 이러한 특징들 때문에 명령형 언어는 폰 노이만 구조의 컴..

PL 2022.04.14

[PL] 프로그래밍 언어 평가 기준

언어 평가 기준 Readability(판독성, 가독성) readability는 프로그램을 얼마나 쉽게 읽고 이해할 수 있느냐는 것이다. readability가 높으면 개발과 유지보수에 용이하다. Overall Simplicity(전반적인 단순성) Orthogonality(직교성) : 상대적으로 적은 개수의 기본구조들이 상대적으로 적은 개수의 방법으로 조합되어 언어의 제어 구조와 데이터 구조가 생성될 수 있다는 것을 의미 Data types(데이터 타입) : 데이터 타입과 데이터 구조를 정의할 수 있는 충분한 장치를 제공하는 것이 좋다. ex) 1 대신 true Syntax considerations(구문 설계) Writability(작성력) writability는 프로그램을 생성하는데 언어가 얼마나 쉽게..

PL 2022.04.13
반응형