본문 바로가기
CS/프로그래밍언어론

구문 분석, 파스 트리 용어 정리 및 예상 문제 풀이 - 방통대 프로그래밍 언어론

by Renechoi 2023. 12. 8.

구문 분석

  1. 어휘 분석을 통해 얻어지는 결과를 토큰이라고 부름
  2. 토큰에는 연산자, 구분자, 식별자, 예약어 등이 포함
  3. 어휘 분석으로 얻어지는 토큰의 한 가지인 식별자는 프로그램에서 변수나 함수 등의 이름을 나타내는 토큰
  4. 식별자는 사용자가 만들어 낼 수 있으므로 연산자나 구붅자처럼 특정 문자로 직접 정의할 수는 없고 일반적인 형태의 구문을 활용하여 정의
  5. 토큰의 한 가지인 예약어는 프로그래밍 언어 자체에 정의되어 포함된 토큰. 조건문 if, 반복문 for, 정수형 int 등이 모두 예약어
  6. 유도는 구문 규칙을 이용하여 주어진 프로그램을 만들어 내는 과정
  7. 유도가 가능하다면 주어진 프로그램은 문법적 오류가 없는 유효한 프로그램임을 보장
  8. 유도는 트리 형태로 나타날 수 있는데 이를 파스 트리라고 함
  9. 파스 트리는 유도 트리 혹은 구문 트리라고 부르기도 함
  10. 파스 트리의 루트 노드는 시작 비단말 기호가 되고, 단말 노드는 단말 기호가 되어 이를 왼쪽 부터 오른쪽으로 차례로 나열하면 주어진 프로그램이 됨
  11. 주어진 표현에 대한 파스 트리가 존재하지 않으면 유도가 가능하지 않은 경우가 되고 따라서 주어진 표현은 구문에 부합하지 않는 오류 있는 표현임
  12. 동일한 표현에 대해 서로 다른 파스 트리가 만들어지는 문법을 모호한 문법이라고 함
  13. 모호성을 제거하기 위해서는 문법의 명확화가 필요
  14. 연산사 우선순위를 위해서는 2개의 구문 규칙이 추가되고, 이를 위해 새로운 비단말 기호 <term><factor>를 추가함
  15. 좌결합 연산자를 통해 우선순위가 동일한 연산자 사이의 순서를 해결함 -> <exp><term>의 구문 규칙에서 각 연산자의 좌우에 있는 피 연산자 중 오른쪽 피연산자를 다음 높은 우선순위의 구문 규칙에서 정의하는 비단말 기호로 변경
  16. 중첩된 if문을 해결하기 위해서 다수의 언어들은 else문 앞에 나온 if문들 중 다른 else문과 짝이 되지 않은 가장 가까운 if문과 짝이 되도록 정함

문제

1. 어휘 분석 단계에서 생성된 토큰 중 식별자는 무엇을 나타내는가?

  1. 프로그램의 데이터 타입
  2. 변수나 함수 등의 이름
  3. 연산자와 구분자
  4. 프로그램의 실행 순서

정답: 2
해설: 식별자는 프로그램에서 변수나 함수 등의 이름을 나타내는 토큰이다.

2. 예약어는 무엇인가?

  1. 사용자 정의 함수명
  2. 데이터 타입과 같은 프로그래밍 언어의 기본 구성 요소
  3. 프로그래밍 언어에 이미 정의된 특별한 단어
  4. 변수의 이름

정답: 3
해설: 예약어는 프로그래밍 언어 자체에 정의되어 있는 특별한 단어로, 조건문 if, 반복문 for, 정수형 int 등이 여기에 해당한다.

3. 파스 트리의 루트 노드는 무엇을 나타내는가?

  1. 단말 기호
  2. 시작 비단말 기호
  3. 구문 규칙
  4. 토큰

정답: 2
해설: 파스 트리의 루트 노드는 시작 비단말 기호를 나타낸다.

4. 어휘 분석의 결과로 생성되는 토큰에는 무엇이 포함되는가?

  1. 단말 기호와 비단말 기호
  2. 연산자, 구분자, 식별자, 예약어
  3. 파스 트리의 노드
  4. 구문 규칙

정답: 2
해설: 어휘 분석으로 생성되는 토큰에는 연산자, 구분자, 식별자, 예약어 등이 포함된다.

5. 유도란 무엇인가?

  1. 토큰을 생성하는 과정
  2. 구문 규칙을 이용하여 프로그램을 만드는 과정
  3. 파스 트리를 구성하는 과정
  4. 예약어를 정의하는 과정

정답: 2
해설: 유도는 구문 규칙을 이용하여 주어진 프로그램을 만들어 내는 과정이다.

6. 모호한 문법이란 무엇인가?

  1. 하나의 표현에 대해 여러 파스 트리가 만들어지는 문법
  2. 정의되지 않은 표현이 포함된 문법
  3. 표현이 불분명한 문법
  4. 문법 규칙이 없는 문법

정답: 1
해설: 모호한 문법은 동일한 표현에 대해 여러 파스 트리가 만들어질 수 있는 문법을 말한다.

7. 중첩된 if문을 해결하기 위해 대부분의 언어는 어떤 규칙을 사용하는가?

  1. 가장 가까운 if문과 else문을 짝지음
  2. 모든 if문에 대해 하나의 else문을 정의
  3. else문을 사용하지 않음
  4. 모든 if문을 독립적으로 처리

정답: 1
해설: 대부분의 언어는 중첩된 if문을 해결하기 위해 else문 앞에 나온 if문들 중 다른 else문과 짝이 되지 않은 가장 가까운 if문과 짝지어 처리한다.

8. 연산자 우선순위를 정의하기 위해 추가되는 비단말 기호는 무엇인가?

  1. <operator><operand>
  2. <exp><term>
  3. <term><factor>
  4. <syntax><rule>

정답: 3
해설: 연산자 우선순위를 위해서는 <term><factor>라는 비단말 기호가 추가된다.

9. 파스 트리의 단말 노드는 무엇을 나타내는가?

  1. 비단말 기호
  2. 구문 규칙
  3. 단말 기호
  4. 프로그램의 실행 순서

정답: 3
해설: 파스 트리의 단말 노드는 단말 기호를 나타낸다.

10. 좌결합 연산자는 무엇을 해결하는가?

  1. 우선순위가 낮은 연산자의 처리
  2. 우선순위가 동일한 연산자 사이의 순서
  3. 비단말 기호의 순서
  4. 다중 if문의 처리

정답: 2
해설: 좌결합 연산자는 우선순위가 동일한 연산자 사이의 순서를 해결한다.

11. 정적 타입 언어와 동적 타입 언어의 차이점은 무엇인가?

  1. 실행 시간과 컴파일 시간의 차이
  2. 데이터 타입 결정 방식의 차이
  3. 변수 선언 방식의 차이
  4. 함수 정의 방식의 차이

정답: 2
해설: 정적 타입 언어는 컴파일 시간에 데이터 타입이 결정되는 반면, 동적 타입 언어는 실행 시간에 데이터 타입이 결정된다.

12. 우선순위가 같은 연산자가 연속으로 나올 때 처리 방식을 결정하는 규칙은 무엇인가?

  1. 우선순위 규칙
  2. 결합 법칙
  3. 유도 규칙
  4. 타입 규칙

정답: 2
해설: 연산자의 결합 법칙은 우선순위가 같은 연산자가 연속으로 나올 때 처리 순서를 결정한다.

13. 파스 트리에서 내부 노드는 주로 무엇을 나타내는가?

  1. 구문 규칙
  2. 비단말 기호
  3. 단말 기호
  4. 프로그램의 실행 순서

정답: 2
해설: 파스 트리에서 내부 노드는 주로 비단말 기호를 나타낸다.

14. 구문 분석 단계에서 사용되는 '좌재귀적' 구문은 무엇을 의미하는가?

  1. 변수 선언에 주로 사용됨
  2. 오른쪽에서 왼쪽으로 읽히는 규칙
  3. 왼쪽에서 오른쪽으로 읽히는 규칙
  4. 연산자 우선순위를 결정하는 규칙

정답: 3
해설: 좌재귀적 구문은 구문 분석 시 왼쪽에서 오른쪽으로 읽히는 규칙을 의미한다.

15. 구문 분석에서 '백트래킹'은 어떤 상황에서 사용되는가?

  1. 오류 발생 시 해결 방법
  2. 모호한 문법 해결 방법
  3. 파스 트리 생성 시
  4. 여러 해석이 가능한 경우

정답: 4
해설: 백트래킹은 구문 분석에서 여러 해석이 가능한 경우, 가능한 해석들을 탐색하는 방법이다.

16. 프로그래밍 언어에서 '추상화'란 무엇을 의미하는가?

  1. 복잡한 세부 사항을 간단하게 표현하는 것
  2. 데이터 타입을 정의하는 것
  3. 함수의 구현을 숨기는 것
  4. 오류 메시지를 출력하는 것

정답: 1
해설: 추상화는 복잡한 세부 사항을 단순화하여 표현하는 프로그래밍 언어의 기법이다.

17. '다형성'은 프로그래밍 언어에서 무엇을 가능하게 하는가?

  1. 같은 이름의 여러 함수를 정의할 수 있음
  2. 다양한 데이터 타입을 사용할 수 있음
  3. 변수를 다양한 방식으로 선언할 수 있음
  4. 여러 프로그래밍 언어를 혼합하여 사용할 수 있음

정답: 1
해설: 다형성은 같은 이름의 함수나 연산자가 다양한 타입의 입력에 대해 동작할 수 있게 하는 프로그래밍 언어의 특성이다.

18. '오버로딩'과 '오버라이딩'의 차이는 무엇인가?

  1. 함수 이름과 반환 타입의 차이
  2. 함수의 정의와 호출 방식의 차이
  3. 같은 클래스 내와 상속받은 클래스 간의 차이
  4. 정적 바인딩과 동적 바인딩의 차이

정답: 3
해설: 오버로딩은 같은 클래스 내에서 같은 이름의 함수를 여러 번 정의하는 것이고, 오버라이딩은 상속받은 클래스에서 상위 클래스의 함수를 재정의하는 것을 의미한다.

19. '프로시저'와 '함수'의 주된 차이점은 무엇인가?

  1. 매개변수의 유무
  2. 반환 값의 유무
  3. 실행 시간의 차이
  4. 정의 방식의 차이

정답: 2
해설: 프로시저는 반환 값이 없는 반면, 함수는 반환 값을 가진다.

20. '캡슐화'는 프로그래밍 언어에서 어떤 역할을 하는가?

  1. 데이터를 보호하고 숨기는 역할
  2. 프로그램의 속도를 향상시키는 역할
  3. 복잡한 로직을 단순화하는 역할
  4. 여러 함수를 하나로 합치는 역할

정답: 1
해설: 캡슐화는 데이터를 보호하고 숨김으로써 데이터의 무결성과 보안을 유지하는 프로그래밍 기법이다.

반응형