구문 분석
- 어휘 분석을 통해 얻어지는 결과를 토큰이라고 부름
- 토큰에는 연산자, 구분자, 식별자, 예약어 등이 포함
- 어휘 분석으로 얻어지는 토큰의 한 가지인 식별자는 프로그램에서 변수나 함수 등의 이름을 나타내는 토큰
- 식별자는 사용자가 만들어 낼 수 있으므로 연산자나 구붅자처럼 특정 문자로 직접 정의할 수는 없고 일반적인 형태의 구문을 활용하여 정의
- 토큰의 한 가지인 예약어는 프로그래밍 언어 자체에 정의되어 포함된 토큰. 조건문 if, 반복문 for, 정수형 int 등이 모두 예약어
- 유도는 구문 규칙을 이용하여 주어진 프로그램을 만들어 내는 과정
- 유도가 가능하다면 주어진 프로그램은 문법적 오류가 없는 유효한 프로그램임을 보장
- 유도는 트리 형태로 나타날 수 있는데 이를 파스 트리라고 함
- 파스 트리는 유도 트리 혹은 구문 트리라고 부르기도 함
- 파스 트리의 루트 노드는 시작 비단말 기호가 되고, 단말 노드는 단말 기호가 되어 이를 왼쪽 부터 오른쪽으로 차례로 나열하면 주어진 프로그램이 됨
- 주어진 표현에 대한 파스 트리가 존재하지 않으면 유도가 가능하지 않은 경우가 되고 따라서 주어진 표현은 구문에 부합하지 않는 오류 있는 표현임
- 동일한 표현에 대해 서로 다른 파스 트리가 만들어지는 문법을 모호한 문법이라고 함
- 모호성을 제거하기 위해서는 문법의 명확화가 필요
- 연산사 우선순위를 위해서는 2개의 구문 규칙이 추가되고, 이를 위해 새로운 비단말 기호
<term>
과<factor>
를 추가함 - 좌결합 연산자를 통해 우선순위가 동일한 연산자 사이의 순서를 해결함 ->
<exp>
와<term>
의 구문 규칙에서 각 연산자의 좌우에 있는 피 연산자 중 오른쪽 피연산자를 다음 높은 우선순위의 구문 규칙에서 정의하는 비단말 기호로 변경 - 중첩된 if문을 해결하기 위해서 다수의 언어들은 else문 앞에 나온 if문들 중 다른 else문과 짝이 되지 않은 가장 가까운 if문과 짝이 되도록 정함
문제
1. 어휘 분석 단계에서 생성된 토큰 중 식별자는 무엇을 나타내는가?
- 프로그램의 데이터 타입
- 변수나 함수 등의 이름
- 연산자와 구분자
- 프로그램의 실행 순서
정답: 2
해설: 식별자는 프로그램에서 변수나 함수 등의 이름을 나타내는 토큰이다.
2. 예약어는 무엇인가?
- 사용자 정의 함수명
- 데이터 타입과 같은 프로그래밍 언어의 기본 구성 요소
- 프로그래밍 언어에 이미 정의된 특별한 단어
- 변수의 이름
정답: 3
해설: 예약어는 프로그래밍 언어 자체에 정의되어 있는 특별한 단어로, 조건문 if, 반복문 for, 정수형 int 등이 여기에 해당한다.
3. 파스 트리의 루트 노드는 무엇을 나타내는가?
- 단말 기호
- 시작 비단말 기호
- 구문 규칙
- 토큰
정답: 2
해설: 파스 트리의 루트 노드는 시작 비단말 기호를 나타낸다.
4. 어휘 분석의 결과로 생성되는 토큰에는 무엇이 포함되는가?
- 단말 기호와 비단말 기호
- 연산자, 구분자, 식별자, 예약어
- 파스 트리의 노드
- 구문 규칙
정답: 2
해설: 어휘 분석으로 생성되는 토큰에는 연산자, 구분자, 식별자, 예약어 등이 포함된다.
5. 유도란 무엇인가?
- 토큰을 생성하는 과정
- 구문 규칙을 이용하여 프로그램을 만드는 과정
- 파스 트리를 구성하는 과정
- 예약어를 정의하는 과정
정답: 2
해설: 유도는 구문 규칙을 이용하여 주어진 프로그램을 만들어 내는 과정이다.
6. 모호한 문법이란 무엇인가?
- 하나의 표현에 대해 여러 파스 트리가 만들어지는 문법
- 정의되지 않은 표현이 포함된 문법
- 표현이 불분명한 문법
- 문법 규칙이 없는 문법
정답: 1
해설: 모호한 문법은 동일한 표현에 대해 여러 파스 트리가 만들어질 수 있는 문법을 말한다.
7. 중첩된 if문을 해결하기 위해 대부분의 언어는 어떤 규칙을 사용하는가?
- 가장 가까운 if문과 else문을 짝지음
- 모든 if문에 대해 하나의 else문을 정의
- else문을 사용하지 않음
- 모든 if문을 독립적으로 처리
정답: 1
해설: 대부분의 언어는 중첩된 if문을 해결하기 위해 else문 앞에 나온 if문들 중 다른 else문과 짝이 되지 않은 가장 가까운 if문과 짝지어 처리한다.
8. 연산자 우선순위를 정의하기 위해 추가되는 비단말 기호는 무엇인가?
<operator>
와<operand>
<exp>
와<term>
<term>
과<factor>
<syntax>
와<rule>
정답: 3
해설: 연산자 우선순위를 위해서는 <term>
과 <factor>
라는 비단말 기호가 추가된다.
9. 파스 트리의 단말 노드는 무엇을 나타내는가?
- 비단말 기호
- 구문 규칙
- 단말 기호
- 프로그램의 실행 순서
정답: 3
해설: 파스 트리의 단말 노드는 단말 기호를 나타낸다.
10. 좌결합 연산자는 무엇을 해결하는가?
- 우선순위가 낮은 연산자의 처리
- 우선순위가 동일한 연산자 사이의 순서
- 비단말 기호의 순서
- 다중 if문의 처리
정답: 2
해설: 좌결합 연산자는 우선순위가 동일한 연산자 사이의 순서를 해결한다.
11. 정적 타입 언어와 동적 타입 언어의 차이점은 무엇인가?
- 실행 시간과 컴파일 시간의 차이
- 데이터 타입 결정 방식의 차이
- 변수 선언 방식의 차이
- 함수 정의 방식의 차이
정답: 2
해설: 정적 타입 언어는 컴파일 시간에 데이터 타입이 결정되는 반면, 동적 타입 언어는 실행 시간에 데이터 타입이 결정된다.
12. 우선순위가 같은 연산자가 연속으로 나올 때 처리 방식을 결정하는 규칙은 무엇인가?
- 우선순위 규칙
- 결합 법칙
- 유도 규칙
- 타입 규칙
정답: 2
해설: 연산자의 결합 법칙은 우선순위가 같은 연산자가 연속으로 나올 때 처리 순서를 결정한다.
13. 파스 트리에서 내부 노드는 주로 무엇을 나타내는가?
- 구문 규칙
- 비단말 기호
- 단말 기호
- 프로그램의 실행 순서
정답: 2
해설: 파스 트리에서 내부 노드는 주로 비단말 기호를 나타낸다.
14. 구문 분석 단계에서 사용되는 '좌재귀적' 구문은 무엇을 의미하는가?
- 변수 선언에 주로 사용됨
- 오른쪽에서 왼쪽으로 읽히는 규칙
- 왼쪽에서 오른쪽으로 읽히는 규칙
- 연산자 우선순위를 결정하는 규칙
정답: 3
해설: 좌재귀적 구문은 구문 분석 시 왼쪽에서 오른쪽으로 읽히는 규칙을 의미한다.
15. 구문 분석에서 '백트래킹'은 어떤 상황에서 사용되는가?
- 오류 발생 시 해결 방법
- 모호한 문법 해결 방법
- 파스 트리 생성 시
- 여러 해석이 가능한 경우
정답: 4
해설: 백트래킹은 구문 분석에서 여러 해석이 가능한 경우, 가능한 해석들을 탐색하는 방법이다.
16. 프로그래밍 언어에서 '추상화'란 무엇을 의미하는가?
- 복잡한 세부 사항을 간단하게 표현하는 것
- 데이터 타입을 정의하는 것
- 함수의 구현을 숨기는 것
- 오류 메시지를 출력하는 것
정답: 1
해설: 추상화는 복잡한 세부 사항을 단순화하여 표현하는 프로그래밍 언어의 기법이다.
17. '다형성'은 프로그래밍 언어에서 무엇을 가능하게 하는가?
- 같은 이름의 여러 함수를 정의할 수 있음
- 다양한 데이터 타입을 사용할 수 있음
- 변수를 다양한 방식으로 선언할 수 있음
- 여러 프로그래밍 언어를 혼합하여 사용할 수 있음
정답: 1
해설: 다형성은 같은 이름의 함수나 연산자가 다양한 타입의 입력에 대해 동작할 수 있게 하는 프로그래밍 언어의 특성이다.
18. '오버로딩'과 '오버라이딩'의 차이는 무엇인가?
- 함수 이름과 반환 타입의 차이
- 함수의 정의와 호출 방식의 차이
- 같은 클래스 내와 상속받은 클래스 간의 차이
- 정적 바인딩과 동적 바인딩의 차이
정답: 3
해설: 오버로딩은 같은 클래스 내에서 같은 이름의 함수를 여러 번 정의하는 것이고, 오버라이딩은 상속받은 클래스에서 상위 클래스의 함수를 재정의하는 것을 의미한다.
19. '프로시저'와 '함수'의 주된 차이점은 무엇인가?
- 매개변수의 유무
- 반환 값의 유무
- 실행 시간의 차이
- 정의 방식의 차이
정답: 2
해설: 프로시저는 반환 값이 없는 반면, 함수는 반환 값을 가진다.
20. '캡슐화'는 프로그래밍 언어에서 어떤 역할을 하는가?
- 데이터를 보호하고 숨기는 역할
- 프로그램의 속도를 향상시키는 역할
- 복잡한 로직을 단순화하는 역할
- 여러 함수를 하나로 합치는 역할
정답: 1
해설: 캡슐화는 데이터를 보호하고 숨김으로써 데이터의 무결성과 보안을 유지하는 프로그래밍 기법이다.
'CS > 프로그래밍언어론' 카테고리의 다른 글
프로그래밍 언어론 변수와 바인딩 기말고사 대비 문제 풀이 및 요약 정리 (1) | 2023.12.08 |
---|---|
프로그래밍 언어의 구현 , 파스트리, 구문 트리, 순환 하강 구문 분석기 관련 문제 - 방통대 기말 시험 대비 (1) | 2023.12.08 |
구문론과 의미론 용어 정리 및 연습 문제 풀이 - 프로그래밍 언어론 (1) | 2023.12.08 |
방송대 프로그래밍 언어론 기출문제 오답률 높은 문제들 정리 및 해설 (1) | 2023.12.08 |
방송통신대학교 프로그래밍 언어론 요약 정리 및 연습 문제 (0) | 2023.12.05 |