계산기 사용가능 여부 불가능
프로그래밍언어론 1 2
프로그래밍언어론
2011년도 5급(기술) 공무원 공채 제2차시험
응시번호 : 성명 :
제 1 문. 기존의 타입들로부터 새로운 타입을 만드는 타입 구성자(type constructor)들 중에서 두 타입이 가질 수 있는 값들의 합집합을 만드는 타입 구성자를 C(또는
C++)에서는 union이라 한다. (총 10점)
union compositeType { int intEl;
double doubleEl;
};
union compositeType el;
double x; int n;
1) compositeType에서 필요한 메모리의 양이 얼마인지 설명하시오. (3점)
2) compositeType을 태그(tag) 혹은 판별자(discriminant)를 이용하여 프로그래머가 안전하게 사용할 수 있는 방법을 프로그램의 예를 들어 설명하시오. (3점) 3) 언어 설계자 또는 언어번역기 측면에서 안전한 합집합 구성자가 될 수 있도록
하는 방법을 제시하시오. (4점)
제 2 문. 일반적으로 부동소수점(floating-point) 타입은 부동소수점 저장 표준인 IEEE 754 형식을 따르며 부호(sign bit), 지수(exponent), 소수부(fraction)로 나누어
저장한다. (총 10점)
1) 부동소수점으로 표현된 숫자가 컴퓨터 내부에서 근사값으로 저장되는 이유를 설명하시오. (3점)
2) 1)의 문제를 해결하기 위한 데이터 형식을 제시하고 장단점을 기술하시오. (3점) 3) 만약 실수(real number)의 소수점 이하 5자리까지만 유효값으로 하여 컴퓨터 에서 사칙연산을 수행할 경우, 발생하는 문제점과 해결방법을 제시하시오. (4점)
계산기 사용가능 여부 불가능
프로그래밍언어론 2 2
제 3 문. 다음 문법 G에 대한 질문에 답하시오. (총 15점) 문법 G = (N, S, P, S)로 정의되며, 각 구성요소는 다음과 같다:
N = {E, T, F}는 비단말 심벌(nonterminal symbol)들의 집합이다.
S = {+, *, (, ), id}는 단말 심벌(terminal symbol)들의 집합이다.
P = { E → E + T, E → T, T → T * F, T → F,
F → (E), F → id }으로 문법 규칙들의 집합이다.
S = E이며 시작 심벌(start symbol)이다.
$는 입력의 끝을 나타낸다.
1) 각 비단말 심벌에 대한 FIRST 집합을 구하시오. (2점) 2) 각 비단말 심벌에 대한 FOLLOW 집합을 구하시오. (3점) 3) SLR(1) 파싱 테이블(parsing table)을 작성하시오. (5점)
4) 3)에서 작성된 파싱 테이블을 이용하여 스트링 id + id * id에 대한 파싱 과정을 보이고 우파스(right parse)를 구하시오. (5점)
제 4 문. 다음 특성(language feature)을 설명하고, 그 특성이 우측 Java 프로그램 코드의 어느 부분(줄번호 포함)에서 어떻게 사용되었는지를 기술하시오. (총 15점) 1) 메소드 재정의(method overriding) (5점)
2) 메소드 중복정의(method overloading) (5점)
3) 동적 메소드 바인딩(dynamic method binding) (5점)
1 class Student {
2 private int intelligence=0;
3 public void study() {
4 intelligence++;
5 }
6 public void study(int p) {
7 intelligence = intelligence + p;
8 }
9 public void evaluate() {
10 if (intelligence>100) System.out.println("Excellent");
11 else if (intelligence>60) System.out.println("Good");
12 else
13 System.out.println("Bad");
14 }
15 }
16 class UnivStudent extends Student{
17 private int intelligence=0;
18 public void study() {
19 this.study(5);
20 }
21 }
22 class Main {
23 public static void main(String[] args) {
24 Student s = new Student();
25 makeStudy(s);
26 s.evaluate();
27 s = new UnivStudent();
28 makeStudy(s);
29 s.evaluate();
30 }
31 public static void makeStudy(Student s) {
32 s.study();
33 s.study(10);
34 }
35 }