프로그래밍[Univ]/프로그래밍 언어론 39

[프로그래밍 언어론] Data Type part 3 - Array & Record Type

1. Array Type - 성격이 같은 여러 원소를 묶어 놓은 것 - Position(Index 값)에 의해서 접근이 가능하다. - Array_name[subscript] - 설계 이슈 ⓐ subscript의 Type는 어떤것을 지원해 줄 것인가? ex) FORTRAN, C, Java : int only Pascal : 몇몇의 순서 타입 Ada : Integer or enum ⓑ subscript의 길이를 검사할 것인가? > 이것은 배열에 원소를 넣을시 배열의 범위를 벗어나는 곳에 대한 참조에 대한 error를 잡는 행위 > subscript의 길이 검사를 구현하면, 신뢰성을 높일수 있는 장점이 있지만, 컴파일러가 복잡해지고, 효율성이 떨어지는 단점이 있다. ⓒ 언제 subscripts의 값이 결정되고..

[프로그래밍 언어론] Data Type part 2 - Ordinal Type : 순서 타입

* Ordinal Type : 특정 타입이 취할 수 있는 값이 주어진 것. 즉 사용자가 지정해준 변수 값 많을 취한 수 있다. 1. Enumeration Types (열거 방식) - 타입이 취할 수 있는 값을 일일이 열거 해주는 방식 ex) (in C) enum colors { red, blue, green, yellow } // 각각의 요소는 숫자 인덱스로 지정되있다. // red = 1 , blue = 2 , green = 3 , yellow = 4 colors mycolor = red; // mycolor은 red, blue green, yellow만 취할 수 있다. mycolor++; // 각각의 요소에 숫자가 부여 되있으므로 ++시 다음요소 값 이동 // 즉 mycolor값은 blue가 된다. ..

[프로그래밍 언어론] Data Type Part 1

1. 타입의 환경 (Evolution of Data Types) - 1956년 : FORTRAN - INTEGER, REAL, arrays 등 간단한 것만 사용을 했었다. - 1983년 : Ada - 사용자가 데이터타입을 만들어서 사용하면서, 복잡한 데이터 유형이 나타나기 시작했다. 2. 타입 설계 (Type Design) - 타입을 명세하는 기법. 즉, 타입을 바인딩하는 기법을 말한다. - 타입에 의해 바인딩 된 것은 타입으로 할 수 있는 연산자를 같이 바인딩 된다. - Primitive Data Type 방식과 Not-Primitive Data Type 방식이 있다. 3. Primitive Data Type - 다른 데이터에 의해서 정해지지 않고, 자기 자신자체로 데이터가 된다. - 우리가 쓰고 있는..

[프로그래밍 언어론] 명령형 언어의 특징 2 - 변수(value)

명령형 언어의 특징이라는 주제를 달고 나온 부분은 자신이 프로그램언어를 개발시 고려해야할 상항에 대해서 나와 있는 것입니다. ----------------------------------------------------------------------------------------------------- * 변수란? - 메모리 공간에 대한 추상화 - 6개의 특징이 포함되어 있어야 한다. > name, address, value, type, lifetime, and scope - 선언된 변수는 symbol Table에 변수를 저장한다. ex) int a,b,c; //symbol Table에 저장 1. Name(이름) : "명명법은 명령형 언어의 특징 1"에서 이미 소개 되어 있기 때문에 건너띈다. 2. ..

[프로그래밍 언어론] 명령형 언어의 특징 3 - Binding

명령형 언어의 특징이라는 주제를 달고 나온 부분은 자신이 프로그램언어를 개발시 고려해야할 상항에 대해서 나와 있는 것입니다. ----------------------------------------------------------------------------------------------------- * 바인딩이란? 변수나 예약어등 프로그래밍언어를 구성하고 있는 여러 것에 속성을 부여하는 것을 "바인딩한다"라고 한다. ex) int x; // 변수 x에 integer타입을 바인딩했다. x = 3;// 변수 x에 3이라는 값을 바인딩했다. * 바인딩이 일어나는 시간 1. 설계시 : 설계자에 의해서 기호(+, - 등)와 기호가 하는 일이 바인딩 된다.(ex> +는 더하는 역할을 한다) 2. 구현시 : ..

[프로그래밍 언어론] 명령형 언어의 특징 1 - 명명법(identifier)

명령형 언어의 특징이라는 주제를 달고 나온 부분은 자신이 프로그램언어를 개발시 고려해야할 상항에 대해서 나와 있는 것입니다. ----------------------------------------------------------------------------------------------------- * 명명법(identifier) : 명명법을 표현하기 위해서는 다음 4가지를 고려 해야한다. 1. 길이 예전에는 컴퓨터의 메모리가 적었기에 이름의 길이를 제한하고 있었다. 예를들어 FORTRAN은 최대 6개로 이뤄져있고, 프로그램언어를 영어처럼 표현하기 위한 목적으로 만들어진 COBOL에서도 최대를 30으로 제한하고 있다. 현재에는 메모리가 풍부하여, 이름의 길이에 제한하지 않는 언어가 많이 있다. 변..

[프로그래밍 언어론] 어휘 및 문법 분석 단계

1. 어휘 분석 단계(컴파일러 구성 중 제일 윗 단계) - 어휘를 문법적 의미가 있는 단위로 나눈다(lexeme과 token으로 나눠서 저장) ex) result = 10 * count + 1 2. 구문 분석(Parser를 이용한 Parsing 과정) - 파스 트리를 만들면서 구문을 분석하는 것으로 2가지 방법이 있다. > Top - down : start -> string // 대표 LL > Bottom-up : String -> start // 대표 LR - 토큰이 문법 순서에 맞게 들어오면 승인, 그렇지 않으면 오류를 발생해준다. - 대부분의 컴파일러는 Bottom-up방식을 따른다. ex) -> ac -> a|b 라는 문법을 가진 것에 aabc라는 사용자 입력이 있었다. 이것이 참인지를 보여라. ..

[프로그래밍 언어론] AGs(Attribute Grammars)

1. Context-Free(BNF/EBNF)의 한계 - 오류에 대한 처리는 어떻게 할 것인가? ( ex//각각 변수의 타입사이의 차이의 표현 ) - 변수는 사용하기 이전에 선언 되어야 되는데 표현이 가능할가? > 표현이 불가능하거나, 번거로운 것을 해결하기 위해 나온 것이 Attribute Grammars(AGs)이다. 2. AGs - 특징 ⓐ 문법의 표현에 속성(Attribute) 값이 추가가 되었다. > Synthesized Attribute : (Parse트리로 표현시)자식노드로부터 자신의 속성을 결정 자식노드의 평균 값, 최대/최소값 등 지정한 방법에 의해 속성을 자식으로부터 받는다. > Inherited Attribute : (Parse트리로 표현시)부모나 형제 노드로부터 자신의 속성을 결정 ..

[프로그래밍 언어론] 모호함 / EBNF

룰을 통해서 문법을 생성함에 따라서 모호함이 발생한다. 이러한 모호함은 다음의 과정에 의해 지울수 있다. 일단 이전에 보았던 수학 기호에 대한 모호함이 발생 했을 시에 대해서 한번도 보고 가도록 하자. 1. 수학기호에 대한 모호함이 발생 수학기호에 대해서 모호함이 발생했을 때에는 수학기호를 우선순위에 의해서 나눠서 생각한다. 또한 우선순위가 낮은 것부터 정의를 하기 시작한다. 예를 들어 다음과 같은 문법이 존재한다고 한다. -> -> | -> * | / | - | + 이 연산식을 모호함을 없앤다고한다면 연산 우선순위를 나눠 본다. + - 와 / * 로 나뉘는데 이것중 + - 의 우선순위가 더욱 느리다. 따라서 다음과 같이 정의가 된다. -> - | + | -> * | / | 로 수정을 하여 모호함을 없앨..

[프로그래밍 언어론] Parse tree와 모호함(Ambiguous)

1. Parse Tree - 파스트리 : 앞에 프로그래밍 언어 설명에 잠깐 소개가 되었다. - 간단히 파스트리의 특징에 대해서 알아보자 ⓐ 트리의 Leap에 속하는 것은 모두 사용자의 눈에 보이는 Terminal Symbol이다. ⓑ Leap속성을 제외한 모든 노드는 Non-Terminal Symbol이다. ⓒ 아래로 내려갈 수록 실행 순서가 빨라진다. - 이러한 파스트리는 컴파일러가 컴파일시 작성을 하여, Leap노드의 원소를 보아서 ⓐ 모두 Terminal Symbol이다. 라면 문법이 성립 ⓑ Non-Terminal Symbol이 하나라도 있다. 라면 문법이 성립하지 않음 을 정한다. 2. Ambiguous(Ambiguity 애매 모호함) - 어떠한 문법은 같은 형태의 식을 2가지 이상의 파스트리로..