bunta의 보조기억장치

[프로그래밍 언어론] 4-2 구문의 표현 본문

Study/필기

[프로그래밍 언어론] 4-2 구문의 표현

bunta 2022. 10. 5. 23:30
반응형

구문론

프로그램의 표면적인 구조를 정의

→ 정의된 구문을 통해 모든 정상적인 프로그램을 도출

→ 작성된 프로그램이 정의된 구문에 맞는 프로그램인지 확인

 

구문의 표현

→ 구문의 정의는 문법을 활용하여 명확하게 표현

→ 일반적으로 프로그래밍 언어에서는 문맥 자유 문법을 이용

     * 문맥 자유 문법: 문맥하고 상관이 없는 문법

                                예로 변수는 문법과 상관없이 아무 위치에서 정의되어도 됨


문맥 자유 문법(CFG: Context-Free Grammar)

구성 요소

→ 비단말 기호: 정의될 대상

     ex) <if문> ::= if <논리식> then <문장>

→ 단말 기호: 언어에서 직접 사용되는 표현

     ex) <if문> ::= if <논리식> then <문장>

→ 시작 비단말 기호: 언어에서 독립적으로 사용될 수 있는 단위

     ex) <if문> ::= if <논리식> then <문장>

           <if문>은 비단말 기호이면서 시작 비단말 기호

→ 규칙: 비단말 기호를 단말 기호와 비단말 기호의 조합으로 정의

              * 각 규칙은 하나의 비단말 기호만을 정의


문맥 자유 문법의 다양한 표현 방법

→ BNF

→ EBNF

→ 구문 도표


BNF(Backus-Naur Form)

→ Algol의 구문을 정의하기 위해 사용된 표현법

→ 세 가지 메타 기호

     ::=   정의

       |     택일

     < >  비단말 기호

 

비단말 기호

→ < > 로 묶인 기호

단말 기호

→ 비단말 기호 및 메타 기호가 아닌 기호

규칙

→ ::=를 기준으로 왼쪽 부분을 오른쪽 부분으로 정의


EBNF(Extended Backus-Naur Form)

BNF에 추가적인 메타 기호를 사용하여 규칙을 보다 간결하게 표현

→ 추가된 메타 기호

     [ ]   생략가능

     { }   0번 이상 반복

     ( )   |과 함께 쓰여 한정된 범위의 택일

     ' '   메타 기호를 단말 기호로 사용

 

ex) <if문> ::= if <논리식> then <문장> [ else <문장> ]

      → [ else <문장> ] 부분 생략 가능함

      * BNF 표현일 경우

      <if문> ::= if <논리식> then <문장> | if <논리식> then <문장> else <문장>

 

ex) <unsigned integer> ::= <digit> { <digit> }

      → 몇자리 숫자를 표현해야할지 모르는 상태이기 때문에 { } 로 묶어서 0번 이상 반복될 수 있음을 나타냄

          한자리의 숫자일 경우 { <digit> } 이 없는 것과 동일

      * BNF 표현일 경우

       <unsigned integer> ::= <digit> | <unsigned integer> <digit>

 

ex) <수식> ::= <수식> ( + | - | * | / ) <수식>

      * BNF 표현일 경우

       <수식> ::= <수식> + <수식> | <수식> - <수식> | <수식> * <수식> | <수식> / <수식>

 

ex) <BNF 규칙> ::= <왼쪽 부분> '::=' <오른쪽 부분>

      → '::=' 를 메타 기호인 ::= 가 아니라 그냥 :, :, = 가 합쳐진 단말 기호로 해석함


구문 도표(syntax diagram)

초기 Pascal의 사용자 설명서에 사용된 표현법

→ 순서도와 유사하게 그림으로 구문을 표현

 

 

 

한국방송통신대학 [프로그래밍 언어론] 강의 필기입니다.

반응형
Comments