목차
1. 다음에 대해 답하시오. (15점)
(1) 프로그래밍 언어의 구성 요소 중 서브프로그램, 모듈을 각각 10줄 이내로 설명하시오.
① 서브프로그램 ② 모듈
(2) 인터프리터와 컴파일러의 차이점을 3줄 이상 10줄 이하로 설명하시오.
① 인터프리터 ② 컴파일러
(3) 프로그래밍 언어의 평가 기준 중 두 가지만 선택하여 설명하시오.
① 직교성 ② 일관성
2. BNF로 표현된 다음 다섯 개의 구문을 이용하여 다음에 대해 답하시오. (15점)
(1) 위 구문을 하나의 EBNF로 합쳐 표현하고 그렇게 표현한 이유를 설명하시오.
(2) 위 구문을 하나의 구문 도표로 합쳐 표현하고 그렇게 표현한 이유를 설명하시오.
① 구문 도표 ② 그렇게 표현한 이유
3. 참고문헌
(1) 프로그래밍 언어의 구성 요소 중 서브프로그램, 모듈을 각각 10줄 이내로 설명하시오.
① 서브프로그램 ② 모듈
(2) 인터프리터와 컴파일러의 차이점을 3줄 이상 10줄 이하로 설명하시오.
① 인터프리터 ② 컴파일러
(3) 프로그래밍 언어의 평가 기준 중 두 가지만 선택하여 설명하시오.
① 직교성 ② 일관성
2. BNF로 표현된 다음 다섯 개의 구문을 이용하여 다음에 대해 답하시오. (15점)
(1) 위 구문을 하나의 EBNF로 합쳐 표현하고 그렇게 표현한 이유를 설명하시오.
(2) 위 구문을 하나의 구문 도표로 합쳐 표현하고 그렇게 표현한 이유를 설명하시오.
① 구문 도표 ② 그렇게 표현한 이유
3. 참고문헌
본문내용
파이썬은 사용자 정의 자료형에 대해 필요하면 연산자 오버로딩을 사용하여 덧셈 연산자를 사용할 수 있다. 파이썬 내부적으로는 덧셈 연산자를 사용하기 위해 ‘__add__’ 라는 스페셜 메서드를 사용한다. __add__()를 해당 자료형의 클래스에 정의해 놓으면, 이 클래스의 인스턴스가 덧셈 연산자에 사용될 때 __add__ 메서드가 자동으로 호출되어 __add__의 실행 결과를 리턴해주는 것이다. 덧셈뿐 아니라 사용자 정의 자료형에 대해서 __sub__, __mul__, __truediv__ 스페셜 메서드를 정의해 놓으면, 뺄셈과 곱셈, 나눗셈도 이들 메서드를 실행함으로써 정의될 수 있는 것이다.
예를 들면 다음과 같은 방식이다.
>>> class Test:
def __init__(self, num): # 인스턴스 초기화
self.Num = num
def __add__(self, num):
self.Num += num
def __sub__(self, num):
self.Num -= num
>>> test = Test(50) # Test 인스턴스 test 생성. test.Num은 50으로 초기화됨.
# 덧셈 연산자에 의해 __add__가 자동호출되고, 이때 인스턴스 test는 self로, 100은 num으로 전달된다. 인스턴스 test의 속성인 Num에 100이 더해져 test.Num에 다시 저장된다.
>>> test + 100
>>> test.Num
150
>>> test - 110
>>> test.Num
40
한편 C언어는 매개변수 전달 방법에도 직교성이 없다. C언어에서 배열은 참조 전달 방식을 취하지만, 나머지 모든 매개변수는 값 전달 방식을 취하기 때문이다. 또한 C언어는 배열형을 제외하고 모든 자료형이 함숫값으로 반환될 수 있다. 그러나 Ada는 어떤 자료형도 함수 반환값이 될 수 있어 직교성이 높은 것이다.
② 일관성
일관성이란 프로그래밍 언어에서 유사한 개념이나 기능을 동일한 방식으로 표현하고 지원하는 특성을 말한다. 이는 직교성과 비슷한 개념이지만, 여러 기능 간의 관계에 초점을 두는 직교성과 달리, 일관성은 특정 기능 하나가 언어 전반에 걸쳐 얼마나 통일된 방식으로 구현되는가에 중점을 둔다.
예를 들어 C++에서는 클래스를 정의할 때와 함수를 정의할 때 모두 중괄호 쌍을 사용한다. 그러나 클래스 정의가 끝난 뒤에는 반드시 세미콜론을 붙여야 하는 반면, 함수 정의에서는 세미콜론이 필요하지 않다. 즉, 유사한 코드 구조임에도 불구하고 문법 규칙이 다르게 적용되는데, 이는 언어 설계에서 일관성이 부족한 사례라고 할 수 있다. 이러한 불일치는 프로그래머로 하여금 언어 사용 규칙을 따로 외워야 하게 만들고, 때로는 실수를 유발하는 원인이 되기도 한다. 따라서 언어의 사용성을 높이려면 가능하면 유사한 기능을 동일한 형식으로 다루는 일관성이 중요하다.
2. BNF로 표현된 다음 다섯 개의 구문을 이용하여 다음에 대해 답하시오. (15점)
::= for <변수> in <리스트> : <문장들>
;
<변수> ::=
;
<리스트> ::= [ <원소들> ] | [ ]
;
<원소들> ::= <원소> | <원소> , <원소들>
;
<문장들> ::= <문장> | <문장> <문장들>
;
(1) 위 구문을 하나의 EBNF로 합쳐 표현하고 그렇게 표현한 이유를 설명하시오.
BNF
EBNF
<변수> ::=
① <변수> ::=;
<리스트> ::= [ <원소들> ] | [ ]
② <리스트> ::= ‘[’ [ <원소들> ] ‘]’
<원소들> ::= <원소> | <원소> , <원소들>
③ <원소들> ::= <원소> { , <원소> }
<문장들> ::= <문장> | <문장> <문장들>
④ <문장들> ::= <문장> { <문장> }
① EBNF의 특별한 연산자(반복, 선택 등)가 필요하지 않다.
② BNF의 [ <원소들> ] | [ ]는 \"원소들이 있거나 없거나\"를 의미하므로, EBNF의 선택 사항 표기법 [ ]를 사용하여 [ 원소들 ]로 표현할 수 있다. 실제 대괄호 문자 [와 ]는 따옴표로 감싸서 리터럴임을 표현한다.
③ 첫 번째 원소 다음에 쉼표로 구분된 추가 원소들이 0번 이상 반복되는 패턴이므로, EBNF의 반복 연산자 { }를 사용한다.
④ 문장이 최소 한 번 등장해야 하고, 뒤이어 { 문장 }을 통해 추가적인 문장이 0번 이상 반복될 수 있다는 것을 나타내므로 EBNF의 반복 연산자 { }를 사용한다.
따라서 위 표를 참고하여 BNF을 하나의 EBNF로 표현하면 다음과 같다.
for문 ::= for in ‘[’ [ <원소> { , <원소> } ] ‘]’ : <문장> { <문장> }
(2) 위 구문을 하나의 구문 도표로 합쳐 표현하고 그렇게 표현한 이유를 설명하시오.
① 구문 도표
② 그렇게 표현한 이유
EBNF의 for문에서, 비단말 기호는 사각형으로, 단말기호는 원으로 표현한다.
for, identifier, 문장, 원소는 비단말기호이므로 사각형으로 표현한다.
리스트를 표현하는 대괄호([, ]), in, :, ,는 단말기호이므로 원으로 표현한다.
구문의 순서는 화살표를 사용하여 표현한다.
리스트의 원소는 비어있거나 하나의 원소, 또는 2개 이상의 원소는 ,로 구분하므로, 원소와 콤마를 각각 화살표로 분기하여 표현한다.
문장들 또한 하나의 이상의 문장으로 구성되므로 화살표를 분기하여 표현한다.
참고로 아래 코드는 파이썬에서 for문에서 리스트로 순회하며 출력하는 코드이다.
fruits = [\"사과\", \"바나나\", \"딸기\", \"포도\"]
for fruit in fruits:
print(fruit)
3. 참고문헌
우균·김진욱(2019), 프로그래밍언어론, 한국방송통신대학교출판문화원.
창병모(2021), 프로그래밍 언어론 원리와 실제, 인피니티북스.
원유헌(2020), 프로그래밍 언어 개념, 정익사.
김종현(2019), 컴퓨터구조론 개정5판, 생능출판.
과제 스트레스 싹~ 학점 쑥!
https://www.happycampus.com/store/zzzyzyztusz/
예를 들면 다음과 같은 방식이다.
>>> class Test:
def __init__(self, num): # 인스턴스 초기화
self.Num = num
def __add__(self, num):
self.Num += num
def __sub__(self, num):
self.Num -= num
>>> test = Test(50) # Test 인스턴스 test 생성. test.Num은 50으로 초기화됨.
# 덧셈 연산자에 의해 __add__가 자동호출되고, 이때 인스턴스 test는 self로, 100은 num으로 전달된다. 인스턴스 test의 속성인 Num에 100이 더해져 test.Num에 다시 저장된다.
>>> test + 100
>>> test.Num
150
>>> test - 110
>>> test.Num
40
한편 C언어는 매개변수 전달 방법에도 직교성이 없다. C언어에서 배열은 참조 전달 방식을 취하지만, 나머지 모든 매개변수는 값 전달 방식을 취하기 때문이다. 또한 C언어는 배열형을 제외하고 모든 자료형이 함숫값으로 반환될 수 있다. 그러나 Ada는 어떤 자료형도 함수 반환값이 될 수 있어 직교성이 높은 것이다.
② 일관성
일관성이란 프로그래밍 언어에서 유사한 개념이나 기능을 동일한 방식으로 표현하고 지원하는 특성을 말한다. 이는 직교성과 비슷한 개념이지만, 여러 기능 간의 관계에 초점을 두는 직교성과 달리, 일관성은 특정 기능 하나가 언어 전반에 걸쳐 얼마나 통일된 방식으로 구현되는가에 중점을 둔다.
예를 들어 C++에서는 클래스를 정의할 때와 함수를 정의할 때 모두 중괄호 쌍을 사용한다. 그러나 클래스 정의가 끝난 뒤에는 반드시 세미콜론을 붙여야 하는 반면, 함수 정의에서는 세미콜론이 필요하지 않다. 즉, 유사한 코드 구조임에도 불구하고 문법 규칙이 다르게 적용되는데, 이는 언어 설계에서 일관성이 부족한 사례라고 할 수 있다. 이러한 불일치는 프로그래머로 하여금 언어 사용 규칙을 따로 외워야 하게 만들고, 때로는 실수를 유발하는 원인이 되기도 한다. 따라서 언어의 사용성을 높이려면 가능하면 유사한 기능을 동일한 형식으로 다루는 일관성이 중요하다.
2. BNF로 표현된 다음 다섯 개의 구문을 이용하여 다음에 대해 답하시오. (15점)
;
<변수> ::=
;
<리스트> ::= [ <원소들> ] | [ ]
;
<원소들> ::= <원소> | <원소> , <원소들>
;
<문장들> ::= <문장> | <문장> <문장들>
;
(1) 위 구문을 하나의 EBNF로 합쳐 표현하고 그렇게 표현한 이유를 설명하시오.
BNF
EBNF
<변수> ::=
① <변수> ::=
<리스트> ::= [ <원소들> ] | [ ]
② <리스트> ::= ‘[’ [ <원소들> ] ‘]’
<원소들> ::= <원소> | <원소> , <원소들>
③ <원소들> ::= <원소> { , <원소> }
<문장들> ::= <문장> | <문장> <문장들>
④ <문장들> ::= <문장> { <문장> }
① EBNF의 특별한 연산자(반복, 선택 등)가 필요하지 않다.
② BNF의 [ <원소들> ] | [ ]는 \"원소들이 있거나 없거나\"를 의미하므로, EBNF의 선택 사항 표기법 [ ]를 사용하여 [ 원소들 ]로 표현할 수 있다. 실제 대괄호 문자 [와 ]는 따옴표로 감싸서 리터럴임을 표현한다.
③ 첫 번째 원소 다음에 쉼표로 구분된 추가 원소들이 0번 이상 반복되는 패턴이므로, EBNF의 반복 연산자 { }를 사용한다.
④ 문장이 최소 한 번 등장해야 하고, 뒤이어 { 문장 }을 통해 추가적인 문장이 0번 이상 반복될 수 있다는 것을 나타내므로 EBNF의 반복 연산자 { }를 사용한다.
따라서 위 표를 참고하여 BNF
for문 ::= for
(2) 위 구문을 하나의 구문 도표로 합쳐 표현하고 그렇게 표현한 이유를 설명하시오.
① 구문 도표
② 그렇게 표현한 이유
EBNF의 for문에서, 비단말 기호는 사각형으로, 단말기호는 원으로 표현한다.
for, identifier, 문장, 원소는 비단말기호이므로 사각형으로 표현한다.
리스트를 표현하는 대괄호([, ]), in, :, ,는 단말기호이므로 원으로 표현한다.
구문의 순서는 화살표를 사용하여 표현한다.
리스트의 원소는 비어있거나 하나의 원소, 또는 2개 이상의 원소는 ,로 구분하므로, 원소와 콤마를 각각 화살표로 분기하여 표현한다.
문장들 또한 하나의 이상의 문장으로 구성되므로 화살표를 분기하여 표현한다.
참고로 아래 코드는 파이썬에서 for문에서 리스트로 순회하며 출력하는 코드이다.
fruits = [\"사과\", \"바나나\", \"딸기\", \"포도\"]
for fruit in fruits:
print(fruit)
3. 참고문헌
우균·김진욱(2019), 프로그래밍언어론, 한국방송통신대학교출판문화원.
창병모(2021), 프로그래밍 언어론 원리와 실제, 인피니티북스.
원유헌(2020), 프로그래밍 언어 개념, 정익사.
김종현(2019), 컴퓨터구조론 개정5판, 생능출판.
과제 스트레스 싹~ 학점 쑥!
https://www.happycampus.com/store/zzzyzyztusz/
추천자료
프로그래밍 언어 4장 레포트 답
2020년 2학기 프로그래밍언어론 중간시험과제물 공통(프로그래밍 언어 기준 등)
(방송통신대 프로그래밍언어론)교재와 강의에서 언급된 프로그래밍 언어 기준으로 다음에 대...
(방송통신대 프로그래밍언어론 중간과제물)프로그래밍 패러다임과 프로그래밍 언어 패러다임 ...
인터넷과정보사회 2022년] 1.컴파일러와 인터프리터의 역할과 두 방식의 기능적 차이점 인터...
2022년 2학기 방송통신대 프로그래밍언어론 중간과제물)프로그래밍 언어의 세 가지 기본 기능...
2023년 2학기 방송통신대 프로그래밍언어론 중간과제물)메모리에 적재된 프로그램의 기계어 ...
프로그래밍언어론) (1) 메모리에 적재된 프로그램의 기계어 명령어 하나를 컴퓨터의 CPU가 수...
[컴퓨터과학과]프로그래밍언어론_레포트
2024년 2학기 방송통신대 프로그래밍언어론 중간과제물)프로그래밍 언어의 구성 요소 중 데이...
소개글