11강. 프로그래밍 언어 (1)

학습개요

프로그래밍 언어의 개념과 분류, 실행을 위한 코드 변환, 그리고 프로그래밍 언어의 구문과 구조, 부프로그램과 매개변수 등에 대해서 이해한다.

학습목표

  1. 프로그래밍 언어의 필요성과 발전 과정을 이해할 수 있다.
  2. 프로그래밍 언어의 문법, 컴파일 과정의 개념을 이해할 수 있다.

연습문제

  1. 다음 중 스크립트 언어에 해당되는 것은?
    1. 펄(Perl)
    2. 리스프(LISP)
    3. 프롤로그(Prolog)
    4. HTML
      정답 : 1

      ● 스크립트 언어는 유닉스(unix)와 같은 운영체제의 관리와 자동화를 위해 만들어져 사용되기 시작한 언어이며, 쉘 스크립트(sh, bash, csh 등)와 패턴 처리 스크립트 언어(awk, sed) 등에서 시작되었다. 최근에는 펄(Perl), 파이선(Python) 등 스크립트 언어들이 웹 기반 서비스에서 많이 사용되고 있다.

  2. 형식 문법의 파스 트리에서 중간 노드에 해당하는 것은?
    1. 단말 터미널
    2. 비단말 터미널
    3. 생성 규칙
    4. 시작 심벌
      정답 : 2

      ● 단말 심벌(terminal symbol)은 문장을 이루는 단어들을 단말 심벌이라 한다. 파스 트리의 단말 노드에 해당된다. 자연어에서는 사전에 나오는 모든 단어가 단말 심벌이 된다. 비단말 심벌(non-terminal symbol)은 단말 심벌이 아니면서 복합적으로 나열된 단말 심벌과 비단말 심벌의 조합으로 구성된다. 즉, 파스 트리의 내부 노드에 해당된다. 자연어에서는 <명사구>, <동사구>, <문장> 등이 비단말 심벌이다. 생성 규칙(production rule)은 하나의 비단말 심벌이 어떻게 다른 단말 심벌이나 비단말 심벌을 대체할 수 있는지 정의하는 규칙을 말한다. 예를 들어 영어라면 <문장> → <명사구> + <동사구>, <명사구> → <관사> + <명사>,  <명사> → “dog”|”cat”|”rat”,  <동사> → “bark”|”chase”|”eat” 등이 생성 규칙이다. 시작 심벌(start symbol)은 가장 상위 계층의 비단말 심벌로 보통 <문장>이 시작 심벌이다. 파스 트리의 루트 노드에 해당된다.

  3. 고급언어 프로그램에서 실행코드까지의 변환 순서로 올바른 것은?
    1. 구문 분석, 코드 생성, 어휘 분석
    2. 코드 생성, 구문 분석, 어휘 분석
    3. 어휘 분석, 구문 분석, 코드 생성
    4. 어휘 분석, 코드 생성, 구문 분석
      정답 : 3

      ● 어휘 분석(lexical analysis) 단계는 프로그램을 구성하는 문자들의 나열로부터 단어(token, 토큰)를 추출해 내는 과정이다. 먼저, 빈 칸을 기준으로 단어를 구분하고, 구분안의 각 단어를 이름, 숫자, 수식 기호 등으로 분류하는 것이 어휘 분석이다. 어휘 분석의 결과로 나온 개개의 단어를 토큰(token)이라고 한다. 구문 분석(syntax analysis) 단계는 어휘 분석의 결과로 나온 토큰들의 나열이 해당 프로그래밍 언어의 문법에 맞는지를 확인하는 과정이다. 코드 생성(code generation) 단계에서는 구문 분석의 결과로 변수, 상수, 제어의 흐름 등이 결정되면 이러한 각각의 명령어를 어셈블리어로 풀어쓰거나 직접 기계어 이진 코드가 생성된다.

정리하기

  1. 프로그래밍 언어의 파싱 트리
    1. 단말 심벌(terminal symbol) : 문장을 이루는 단어들을 단말 심벌
    2. 비단말 심벌(non-terminal symbol) : 비단말 심벌은 단말 심벌이 아니면서 복합적으로 나열된 단말 심벌과 비단말 심벌의 조합
    3. 생성 규칙(production rule) : 하나의 비단말 심벌이 어떻게 다른 단말 심벌이나 비단말 심벌을 대체할 수 있는지 정의하는 규칙
    4. 시작 심벌(start symbol) : 가장 상위 계층의 비단말 심벌로 보통 <문장>에 해당함
      .
  2. 프로그램에서 실행가능 코드로의 변환
    1. 어휘분석 : 프로그램을 구성하는 문자들의 나열로부터 단어(token, 토큰)를 추출해 내는 과정
    2. 구문 분석 : 어휘 분석의 결과로 나온 토큰들의 나열이 해당 프로그래밍 언어의 문법에 맞는지를 확인하는 과정
    3. 코드 생성 : 구문 분석의 결과로 변수, 상수, 제어의 흐름 등이 결정되면 이러한 각각의 명령어를 어셈블리어로 풀어쓰거나 직접 기계어 이진 코드가 생성
      .
  3. 프로그래밍 언어의 기본 공통 개념
    1. 대입문(할당문) : 변수나 기억장치 주소에 값을 저장하는 역할이며, l-value와 r-value로 구성됨

Leave a Comment