본문 바로가기
CS(Computer Science)/프로그래밍언어

4. 프로그래밍 언어 구문과 구현 기법

by 동욷 2023. 4. 7.

언어 정의 - 구문, 의미

    - 자연어 정의 , 형식 정의

    - 구문 형식 정의 - BNF, EBNF , 구문 도표

 

컴퓨터

    - 프로그램을 실행 할 수 있는 알고리즘 + 자료구조 집합

    - 하드웨어 컴퓨터 (실제 컴퓨터)

    - 소프트웨어 시뮬레이터 컴퓨터

    - 가상 컴퓨터 ( virtual computer)

 

 

가상 컴퓨터 -> 고급 언어 프로그래머는 컴퓨터를 가상의 고급 언어 컴퓨터로 간주

 

 

 

언어 구문

- 프로그래밍 언어에서 사용할 수 있는 문자들의 집합

- 알파벳 (A-Z) 26개 + 아라비아 숫자 (0-9) 10개

    ex) Fortran : 기본 문자 집합 + 13개의 특수문자 (+ - * / ( ) , . $ ` : 공백)

    ex) Algol 60 : 알파벳 대소문자 52개 + 아리바아 숫자 10개 + 28개의 특수문자

 

 

문자 코드 체계

- EBCDIC (Extended Binary Coded Decimal Interchange Code)

   - IBM에서 제안, 8비트 조합 코드

 

- ASCII (American Standard Code for Information Interchange)

   - ANSI에서 제안 , 7비트 조합 코드 (128개의 문자 표현)

   - 영문자 대소문자 52개 + 숫자 10개 + 33개 특수문자 + 33개 제어문자

 

- 유니코드(Uni code)

   - 16 bits

   - ISO 표준 규격

   - Java에 시행

 

 

정합 순서(collating sequence)

 - 언어에 제공된 문자 순서

 - 일반 순서를 지킴  ( 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 )

                                ( A  < B < C < ... < X < Y < Z)

 -  특수 문자 순서

               - 코드 체계를 따름

               - 프로그래머 정의 가능 (RPG, Snobol)

 

- 어휘 구조 용어

              - 어휘 토큰

              - 언어 구성자

              - 식별자 , 미리 정의된 식별자 , 예약어

              - 구분자, 분리자

 

 

 

Syntax 구성

    - 어휘토큰 (lexical token) , 어휘요소 (lexical element) , 어휘단위 (lexcial unit)

                   - if , < , = , 등등

                   - 규칙에 의거하여 기본 의미 단위를 표현하는, 한 개 이상의 프로그램

                   - 언어의 알파벳 문자로 구성된 문자열

    - 언어 구성자

                  - language construct

                  - 용어 국제 표준 규격 15.01.02

                  - 프로그래밍 언어의 규칙에 따라 한 개 이상의 어휘 토큰으로 형성되며, 구문적으로 허용된 프로그램의 일부

    - 식별자 [프로그래밍 언어에서] 

                 - identifier [ in programming language]

                 - 용어 국제 표준 규격 15.01.03

                 - 언어 구성자를 명명하는 어휘 토큰  ex> 변수, 배열, 레코드, 레이블, 프로시저 등의 이름

                 - <주>식별자는 문자가 맨 앞에 오고 , 그 뒤 영문자, 숫자, 그 밖의 문자가 0개 이상 따라옴

 

    - 미리 정의된 식별자

                 - predefined identifier

                 - 용어 국제 표준 규격 15.01.04

                 - 프로그래밍 언어의 일부로 정의된 식별자

                 - ex> 예약어

                 - <주> 미리 정의된 식별자가 예약되어 있지 않다면, 그 식별자를 사용한 선언으로 선언의 영역에서 식별자의                                의미를 재정의

 

    - 예약어 (reserved words or key words)

                - 용어 국제 표준 규격 15.01.05

                - 프로그래머가 재정의할 수 없는 미리 정의된 식별자

                - <주> 모든 프로그래밍 언어가 예약어를 가지고 있지는 않다

                - 언어 어휘를 구성하는 단어나 기호 형태의 문자 알파벳

                -  프로그램의 변수 이름으로 사용 불가

               

                장점: 프로그램의 판독성 증가, 기호 테이블을 빠른 시간안에 탐색 가능

                단점: 많은 예약어 기억하기 어려움 , 언어 확장 시 새로운 예약어가 확장 이전 사용했던 프로그램의 식별자와 중                           복우려

 

 

    -  BNF ( Backus - Naur Form)

              구문(syntax) 형식을 정의하는 가장 보편적인 방법

              한 언어의 구문에 대한 BNF 정의 - 언어의 문장을 생성하는 생성규칙 정의

              생성규칙 - 생성규칙의 왼쪽(정의될 대상) , 오른쪽(그 대상에 대한 정의)

               

              ex> <identifier> ::= <letter> | <identifier><letter> | <identifier><digit>

                     <letter> ::= A | B | C | ... | X | Y | Z

                     <digit>  ::= 0 | 1 | 2 | ... | 8 | 9

                       

                     :: = 정의하다 , <> 비단말(nonterminal) , | 택일 기호

 

 

   - EBNF (Extended Backus - Naur Form)

            - BNF 표기법을 확장하여 보다 읽기 쉽고, 간단하게 표현된 표기법

            - 반복 : { }, 0번 이상 반복

            - 선택 : [ ] 0 또는 1번 선택

            - 택일 : |  둘중 하나 선택

            - 메타 기호를 언어의 terminal로 사용하는 경우 , '|' 와 '::=' 처럼 묶어서 표현

 

      Nonterminal

      <identifiers> : 식별자, 변수나 함수 이름등에 사용

      <literal> : 상수를 나타냄, 따옴표로 묶인 문자열이나 숫자 등으로 이루어짐

      <expression> , <exp> : 수식이나 계산식을 나타냄, 덧/뻴/곱/나 연산자 숫자 변수 등의 요소 포함

      <statement> : 대입문, 분기문, 반복문 등등

      <type> : 자료형 , 정수/실수/문자열 등의 자료형

      <term> : 곱셈, 나눗셈 등의 연산자와 <factor>의 조합 수식

 

        

       cf) 블록 : [] 대괄호 상수정의 변수정의 있어도 되고 없어도 무방 / {} 중괄호 0 번 이상 반복 함수 정의  /

            컴파운드 상태 st : 문장이 0 개 이상

 

            컴파운드 상태st : 비긴 end, 중간에 문장이 하나 이상 오는데 둘 사이의 구분이 ;

            C 와 다른 부분 c 는 무조건 문장 끝에 ;

            파스칼은 문장과 문장 사이 구분을 위해 ;

 

 

      

 

구문 도표 (Syntax Program)

 - 순서도와 형태 유사

 - EBNF와 일대일 대응

 - 다시 정의될 대상은 네모칸 / 단말 기호는 원이나 타원형 / 이들 사이는 지시선

 - 단말(터미널 노드) / 비단말(논 터미널 노드)

 

터미널
       •최종적으로 구문 분석 결과로 나타나는 단어, 즉 실제로 입력될 수 있는 문자열
       •키워드, 식별자, 상수, 연산자 등과 같이 입력으로 직접 사용되는 단어를 의미
       •작은 따옴표(')나 큰 따옴표(")로 감싸서 나타냄
 
넌터미널
       •문법 규칙에서만 사용되는 단어
       •구문 분석의 중간 과정에서 사용
       •다른 규칙에 참조될 수 있고, 참조를 통해 하나의 복잡한 문법을 구성할 수 있음
       •작은 꺽쇠 괄호(<>)로 감싸서 나타냄

 

 

파스 트리(parse tree)

- 원시 프로그램의 문법을 검사하는 과정에서 내부적으로 생성되는 트리형태의 자료구조

- 한 표현이 BNF로 작성 될 수 있는지 여부 나타냄

 

 

모호/결합성/우선순위

 

모호(ambiguous) : 같은 스토리에 대해서 두 가지 서로 다른 파스 트리가 발생

모호성 제거 : 용어 국제 표준 규격 15.01.09

                      동일한 어휘 토큰 순서를 가진 다수의 언어 구성자 중 어떤 언어 구성자를 프로그램 내의 특정 사건이 참조                          하는지 결정하는 행위

728x90

'CS(Computer Science) > 프로그래밍언어' 카테고리의 다른 글

2. Algol 60 , Algol 68  (0) 2023.04.19
1. Fortran  (0) 2023.04.19
3. 프로그래밍 언어 설계 시 주의점  (0) 2023.04.07
2. 언어의 변천  (0) 2023.04.07
1. 프로그래밍 언어론 소개  (0) 2023.04.07