키보드워리어

【프로그래밍언어】BNF, EBNF로 표현하기 | 구문 도표 표현하기 본문

Universirty/2-2

【프로그래밍언어】BNF, EBNF로 표현하기 | 구문 도표 표현하기

꽉 쥔 주먹속에 안경닦이 2022. 9. 15. 08:29
728x90

안녕하세요 【키보드 워리어】

 

⌨🗡🧑


블로그 방문자 여러분, 안경닦이입니다.

 

 


 

 

프로그래밍 패러다임과 언어 패러다임

 

먼저 패러다임이란 한 시대의 견해나 사고를 규정하는 양식, 규범, 체계 등을 통칭하는 말로, 쉽게 말해 그 시대 사람들이 인식하던 고정관념이나 특정한 신념과 비슷한 말입니다

 

예를 들면 물의 순환과정이라든지, 지구가 둥글다.라는 것도 과학이 발전하기 이전 시대에 살던 사람들의 패러다임으로는 납득하기 어려웠었으나 현재에 와서는 기초 상식이 되어 굳어진 것처럼 패러다임은 항상 새로운 체계나 시스템으로 전환되어 왔습니다

 

이러한 특징에 따라 프로그래밍 패러다임은 프로그램을 작성하는 전형적인 방식을 일컫는데 응용 분야가 확장됨에 따라서 이에 맞는 패러다임도 명령형 프로그래밍 방식에서 절차형, 함수형 프로그래밍 방식, 논리형 프로그래밍 방식, 객체지향형 방식 등으로 프로그래밍 패러다임이 발전하였습니다

 

 하지만, 이러한 새로운 프로그램 패러다임의 등장이 기존에 있던 패러다임을 없애버리는 일반적인 패러다임 사례와는 달리, 새로운 프로그래밍 패러다임은 등장했다고 하여서 이전에 있던 프로그래밍 패러다임을 지우거나 없애는 것이 아니라 기존 프로그래밍 패러다임이 서로 양립하고, 상호 보완할 수 있게 하여 준다는 것이 프로그래밍 패러다임의 특징입니다

 

여기에 어떠한 프로그래밍 언어가 어떤 프로그래밍 패러다임을 지원하는지, 동작시키는지 정의된 것이 프로그래밍 언어 패러다임으로, 예를 들면 BASIC, C언어는 명령형과 절차형 프로그래밍 언어를 지원하고 C++이나 Python은 이에 더해 명령형과 절차형, 함수형, 객체지향형 방식을 지원해줄 수 있는 것과 같이 하나의 프로그래밍 언어가 한 패러다임을 지원해주는 것이 아닌 여러 경우의 프로그래밍 패러다임에 활용하는 것을 나타내는 말입니다

 

 

컴퓨터 언어로 프로그램을 예로 들어 설명 (c언어)

 

구조화 프로그래밍이란 go to(조건 없이 어느 부분에서 행번호나 다른 레이블이 있는 부분으로 건너뛸 때 사용) 없이 프로그램을 작성하며 블록과 서브루틴을 이용하여 구조화된 제어문을 사용하는 특징을 가지고 있습니다

c언어를 가지고 대표적으로 설명드릴 수 있는 예시 사진입니다

 

#include<stdio.h>

int main()
{
int i,j;
i=1;
printf(“  \n”);

 while(i<10){
j=1;
  while(j<10){
   printf(“  %d * %d  =%d \n”,i,j,i*j);
   j++;
}
i++;
printf(“\n”);
}
}

구조화된 프로그래밍을 대표적으로 보여주는 c언어 구구단활용

 

BNF로 표현된 다음 구문을  EBNF로 표현

 

[01] <부호 없는 정수> ::= <digit> | <부호 없는 정수> <digit>

 

 

EBNF 표현

<부호 없는 정수> ::= <digit> { <digit>}

 

 

재귀적인 표현을 EBNF표현 중{} 메타기호 활용하여 0번 이상 반복 사용 표시함

 

 

BNF 표현과 EBNF 표현을 각각 구문 도표로 표현

 

 

EBNF로 표현된 다음 구문을 BNF로 표현

 

[02] <서브프로그램 선언>::==<type><name> ‘(’ [<param> { , <param>}] ‘)’;

 

 

BNF로 표현하기

<서브프로그램선언>::== <type><name>([<param>{, <param>}]);

 

 

EBNF에서 사용한 ‘’ {}[],; 등과 같은 표현들은 BNF에서 특별한 메타 기호

의미를 가진 것이 아니라 단순한 단말 기호로 표현하였음

 

 

EBNF 구문 도표 | BNF 구문 도표 표현

 

EBNF 구문 도표

정적 의미론 중에서 대표적인 문법인 속성 문법을 따라서 타입명과, 변수 명, 리스트가 따라오는 구성으로 EBNF를 표현 가능합니다

 

Type, name, param은 비 단말 기호로 작성하였고 ‘’ 문법은 메타 기호를 단말 기호로 작성하여 주니 단말기호 동그라미로 그렸습니다

 

() 단말 안에 []기호는 생략 가능하므로 아래로 따로 선을 그려주었고 그 안에 {} 기호는 반복 기능이므로 오른쪽에서 왼쪽으로 화살표 반복 후 ,와 param비단말 기호를 사용하는 것으로 표현하였습니다

 

이후 ;(세미콜론)을 단말 기호로 표현하였습니다

 

 

BNF 구문 도표

BNF에서는 EBNF에서 추가된 메타 기호의 의미는 없어집니다

 

예를 들어 {}나 [] 같은 경우도 BNF에서 특별한 의미를 가진 메타 기호가 아니기 때문에 일반 단말 기호로 바꾸어 표현하였습니다 EBNF와 메타 기호를 인식하는 것이 줄어들게 되어서 BNF 구문 도표는 다른 기능 없이 그대로 받아들여 EBNF에서는 아래로 선을 하나 더 만들어주었지만 여기서는 한 줄로 표현하였고 type이나 name, param 같이 <> 메타 기호로 있는 경우만 비 단말 기호로 표현하였습니다

728x90