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

구문론과 의미론 용어 정리 및 연습 문제 풀이 - 프로그래밍 언어론

by Renechoi 2023. 12. 8.

구문론과 의미론

  1. 구문론이란 문장이 나타내는 방식(구문)에 대해서 연구하는 분야
  2. 의미론이란 문장이 나타내는 의미에 대해서 연구하는 분야
  3. 기본적으로 프로그램은 다양한 문자로 구성된다. 예시로는 영어 알파벳, 아라비아 숫자, 특수 기호 등이 있다.
  4. 문자들은 서로 어울려 최소한의 의미를 갖는 어휘(토큰)을 구성
  5. 토큰들은 프로그램을 작성하는 규칙적인 구문에 맞춰 프로그램을 구성
  6. 문맥 자유 문법이란 문맥에 영향을 받지 않는 문법이란 의미로 변수를 예로 들어보면 변수는 어떤 문장에 등장하든 구조가 항상 동일하다.
  7. 문맥 자유 문법은 4가지 구성 요소를 가짐: 비단말 기호들, 단말 기호들, 시작 비단말 기호, 규칛
  8. 비단말 기호란 정의될 대상을 의미
  9. 단말 기호란 언어에서 직접 사용되는 표현들을 의미
  10. 시작 비단말 기호란 언어에서 독립적으로 사용될 수 있는 단위
  11. 규칙은 비단말 기호를 단말 기호와 비단말 기호의 조합으로 구체적으로 정의하는 것을 의미
  12. 문맥 자유 문법의 각 규칙은 하나의 비단말 기호만을 정의
  13. BNF에서 규칙은 메타기호 ::=를 이용하여 표현, ::=를 기준으로 왼쪽 부분을 오른쪽 부분으로 정의한다는 의미
  14. EBNF에 추가로 사용되는 네 가지 메타기호는 [ ] , { }, ( ), ' '
  15. 메타기호 [ ] 는 생략 가능을 푷련
  16. 메타 기호 { } 는 0번 이상 반복을 표현
  17. 메타 기호 ( ) 는 메타 기호 | 과 함께 쓰여 한정된 범위의 택일을 표현
  18. 메타 기호 ' ' 는 메타 기호 자체를 단말 기호로 사용함을 표현
  19. 메타 기호 [ ] 는 메타 기호 |을 이용하여 [ ] 로 묶인 부분이 있는 것과 없는 것으로 나누어 BNF 표현이 가능
  20. 메타 기호 ( ) 는 ( ) 의 바깥 부분을 반복하여 표현함으로써 역시 BNF 표현이 가능
  21. 메타 기호 { } 의 경우 { } 로 묶인 부분이 0번 사용되는 경우와 한 번 이상 반복되는 경우로 나누어 BNF 표현이 가능
  22. EBNF <unsigned integer> ::= <digit> { <digit> } <-> BNF <unsigned integer> ::= <digit> | <unsigned integer><digit>
  23. 구문도표에서 사각형은 비단말 기호, 원은 단말 기호, 화살표는 비단말 및 단말 기호들을 연결하여 규칙을 표현하는데 사용
  24. 속성문법은 정적 의미론의 표현 방법으로, 각 비단말 기호마다 타입 속성이 있다고 가정하여 이에 대한 규칙을 정의하는 방법
  25. 기능적 의미론은 동적 의미론의 표현 방법 중 한가지로, 프로그램이 수행되면 컴퓨터의 상태가 바뀌므로 프로그램의 의미를 추상 기계의 상태를 바꾸는 것으로 표현하는 방법
  26. 표기적 의미론은 동적 의미론의 표현 방법 중 하나로 그로그램을 구성하는 각 구문 요소를 수학적 표기에 대응시켜 표현
  27. 공리적 의미론은 동적 의미론의 표현 방법 중 하나로, 프로그램의 실행 의미를 프로그램의 효과로 해석하는 방법

문제

1. 구문론이 아닌 프로그래밍 언어의 특징은 무엇인가?

  1. 프로그램의 표면적 구조를 정의한다.
  2. 문맥 자유 문법을 사용한다.
  3. 프로그램 실행 시 어떤 일이 일어나는지를 정의한다.
  4. BNF, EBNF, 구문 도표로 표현한다.

정답: 3

해설: 구문론은 프로그램의 표면적 구조를 정의하지만, 프로그래밍 언어의 의미론은 프로그램 실행 시 어떤 일이 일어나는지를 정의한다.

2. 문맥 자유 문법의 4가지 구성 요소 중 하나가 아닌 것은 무엇인가?

  1. 비단말 기호들
  2. 단말 기호들
  3. 시작 비단말 기호
  4. 실행 규칙

정답: 4

해설: 문맥 자유 문법은 비단말 기호들, 단말 기호들, 시작 비단말 기호, 그리고 규칙으로 구성되어 있다. 실행 규칙은 문맥 자유 문법의 구성 요소가 아니다.

3. BNF에서 ::= 메타기호의 의미는 무엇인가?

  1. 선택을 나타낸다.
  2. 정의를 나타낸다.
  3. 반복을 나타낸다.
  4. 생략을 나타낸다.

정답: 2

해설: BNF에서 ::= 메타기호는 왼쪽 부분을 오른쪽 부분으로 정의한다는 의미를 갖는다.

4. EBNF에서 메타기호 [ ]의 기능은 무엇인가?

  1. 선택
  2. 생략 가능
  3. 반복
  4. 정의

정답: 2

해설: EBNF에서 메타기호 [ ]는 해당 부분이 생략 가능함을 나타낸다.

5. 속성문법이 정적 의미론을 표현하는 방법으로 사용되는 이유는 무엇인가?

  1. 상태 변화를 추적한다.
  2. 수학적 표기와 대응한다.
  3. 각 비단말 기호의 타입 속성을 정의한다.
  4. 실행 규칙을 제시한다.

정답: 3

해설: 속성문법은 정적 의미론을 표현하는 방법으로, 각 비단말 기호의 타입 속성을 정의하여 사용한다.

6. EBNF와 BNF의 차이점 중 하나는 무엇인가?

  1. BNF는 선택적 요소를 표현할 수 없다.
  2. EBNF는 메타기호를 사용하지 않는다.
  3. EBNF는 추가적인 메타기호를 사용한다.
  4. BNF는 비단말 기호를 사용하지 않는다.

정답: 3

해설: EBNF는 BNF에 비해 추가적인 메타기호를 사용하여 표현력을 향상시킨다.

7. 프로그래밍 언어에서 "기능적 의미론"이란 무엇을 의미하는가?

  1. 프로그램의 효과를 해석한다.
  2. 컴퓨터의 상태 변화를 표현한다.
  3. 수학적 표기에 대응시킨다.
  4. 구문적 구조를 정의한다.

정답: 2

해설: 기능적 의미론은 프로그램이 수행될 때 컴퓨터의 상태가 어떻게 변화하는지를 표현한다.

8. 표기적 의미론의 주된 목적은 무엇인가?

  1. 프로그램의 효과를 해석한다.
  2. 컴퓨터의 상태 변화를 표현한다.
  3. 각 구문 요소를 수학적 표기에 대응시킨다.
  4. 구문적 구조를 정의한다.

정답: 3

해설: 표기적 의미론은 프로그램을 구성하는 각 구문 요소를 수학적 표기에 대응시켜 표현하는 방법이다.

9. 공리적 의미론이 프로그래밍 언어론에서 중요한 이유는 무엇인가?

  1. 문법적 규칙을 정의한다.
  2. 프로그램의 실행 의미를 프로그램의 효과로 해석한다.
  3. 토큰과 구문을 정의한다.
  4. 프로그램의 표면적 구조를 분석한다.

정답: 2

해설: 공리적 의미론은 프로그램의 실행 의미를 그 프로그램이 미치는 효과로 해석하는 방법을 제공한다.

10. 구문도표에서 사각형이 나타내는 것은 무엇인가?

  1. 비단말 기호
  2. 단말 기호
  3. 규칙
  4. 선택

정답: 1

해설: 구문도표에서 사각형은 비단말 기호를 나타낸다.

프로그래밍 언어론 수업을 위한 추가적인 4지 선다형 문제를 출제하겠습니다. 이 문제들은 기존의 문제와 중복되지 않으며, 정답과 해설을 포함하고 있습니다.

11. 프로그래밍 언어의 "동적 의미론"이란 무엇인가?

  1. 프로그램이 컴퓨터 상태에 미치는 영향을 해석한다.
  2. 프로그램의 구문 구조를 정의한다.
  3. 프로그램의 문법적 규칙을 설명한다.
  4. 프로그램의 기능적 요소를 분석한다.

정답: 1

해설: 동적 의미론은 프로그램이 실행될 때 컴퓨터의 상태에 어떠한 영향을 미치는지를 해석하는 것을 말한다.

12. 문맥 자유 문법에서 비단말 기호의 역할은 무엇인가?

  1. 구문의 최종 문자열을 형성한다.
  2. 구문의 규칙을 정의한다.
  3. 구문의 시작점을 나타낸다.
  4. 구문의 추상적 구조를 표현한다.

정답: 4

해설: 문맥 자유 문법에서 비단말 기호는 구문의 추상적 구조를 표현하는 데 사용된다.

13. 프로그래밍 언어에서 "렉시컬 스코핑"이란 무엇인가?

  1. 변수가 함수 내에서만 유효한 범위를 갖는다.
  2. 변수가 전역적으로 사용될 수 있는 범위를 갖는다.
  3. 변수가 선언된 위치를 기준으로 범위가 결정된다.
  4. 변수의 유효 범위가 동적으로 결정된다.

정답: 3

해설: 렉시컬 스코핑은 변수의 유효 범위가 선언된 위치를 기준으로 결정되는 것을 의미한다.

14. 프로그래밍 언어의 "정적 타입 시스템"이란 무엇인가?

  1. 변수의 타입이 실행 시간에 결정된다.
  2. 변수의 타입이 컴파일 시간에 결정된다.
  3. 변수의 타입이 동적으로 변경될 수 있다.
  4. 변수의 타입이 프로그램의 문맥에 따라 달라진다.

정답: 2

해설: 정적 타입 시스템에서는 변수의 타입이 컴파일 시간에 결정되며, 이후 변경될 수 없다.

15. 프로그래밍 언어에서 "토큰"이란 무엇인가?

  1. 프로그램의 최소 실행 단위
  2. 프로그램의 구문적 오류를 감지하는 요소
  3. 프로그램을 구성하는 최소 의미 단위
  4. 프로그램의 실행 흐름을 제어하는 요소

정답: 3

해설: 토큰은 프로그램을 구성하는 최소 의미 단위로, 언어의 구문 분석 과정에서 사용된다.

16. "구문 트리"가 프로그래밍 언어론에서 중요한 이유는 무엇인가?

  1. 프로그램의 실행 속도를 최적화한다.
  2. 프로그램의 구문 구조를 시각적으로 표현한다.
  3. 프로그램의 의미론적 오류를 감지한다.
  4. 프로그램의 라이브러리 의존성을 관리한다.

정답: 2

해설: 구문 트리는 프로그램의 구문 구조를 시각적으로 표현하여 구문 분석 과정을 돕는다.

17. 프로그래밍 언어에서 "다형성"이란 무엇인가?

  1. 하나의 식별자가 여러 타입의 값들을 가질 수 있다.
  2. 함수가 다양한 인자를 받을 수 있다.
  3. 프로그램이 여러 플랫폼에서 실행될 수 있다.
  4. 변수가 여러 값들을 순차적으로 저장할 수 있다.

정답: 1

해설: 다형성은 하나의 식별자(예: 함수, 변수)가 다양한 타입의 객체들을 처리할 수 있음을 의미한다.

18. "클로저"가 프로그래밍 언어에서 사용되는 이유는 무엇인가?

  1. 메모리를 효율적으로 관리하기 위해
  2. 함수가 선언될 당시의 환경을 유지하기 위해
  3. 프로그램의 병렬 실행을 용이하게 하기 위해
  4. 프로그램의 구문 오류를 자동으로 수정하기 위해

정답: 2

해설: 클로저는 함수가 자신이 선언된 환경을 "닫힌" 채로 캡쳐하여, 나중에도 그 환경에 접근할 수 있게 해준다.

19. 프로그래밍 언어에서 "가비지 컬렉션"의 주된 목적은 무엇인가?

  1. 프로그램의 실행 시간을 단축시키기 위해
  2. 사용하지 않는 메모리 자원을 자동으로 회수하기 위해
  3. 프로그램의 보안을 강화하기 위해
  4. 프로그램의 메모리 사용량을 증가시키기 위해

정답: 2

해설: 가비지 컬렉션은 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 회수하여 메모리 관리를 용이하게 한다.

20. "함수형 프로그래밍"에서 중요한 개념은 무엇인가?

  1. 명령형 프로그래밍 기법
  2. 상태 변경과 가변 데이터의 최소화
  3. 객체 지향 프로그래밍
  4. 절차적 프로그래밍 스타일

정답: 2

해설: 함수형 프로그래밍은 상태 변경과 가변 데이터를 최소화하고, 함수의 순수성을 강조하는 프로그래밍 패러다임이다.

반응형