본문 바로가기
카테고리 없음

C언어의 고유 특징에 대하여(8)

by 데일리J형 2022. 5. 14.

예제를 통해서 C언어가 기본적으로 사용하고 있는 문자들과 어휘들에 대해서 알아보겠습니다. 

 

C 프로그램의 구문과 어휘

C 언어로 작성된 프로그램은 C 컴파일러가 컴퓨터가 이해할 수 있는 목적 언어로 번역시켜 주는 문자들의 집합으로 볼 수 있으며 대부분의 시스템에서 목적 언어는 컴퓨터상에서 스스로 수행될 수 있는 기계어 형태가 됩니다. 이때 번역의 대상이 되는 프로그램을 원시 프로그램(source program)이라고 하며 번역된 코드를 목적 코드(object code)라고 합니다. 이러한 번역 기능을 갖은 프로그램을 컴파일러(compiler)라고 하며 C 언어의 번역기를 C 컴파일러라고 부릅니다. 이런 C 컴파일러는 우선 프로그램에 있는 문자들을 토큰(token)으로 분류를 하며 이 토큰은 C언어의 가장 기본적인 어휘로 사용되며 이 어휘를 조합하여 C언어가 제공하고 있는 문법에 맞춰 작성해야 합니다.

 

일반적으로 C 언어로 작성된 프로그램은 몇 개의 함수들의 정의로 구성되며 이런 함수들은 C 언어에서 사용하는 기본 어휘들로 작성되어야 하고이 기본 어휘는 예약어, 식별자, 상수, 상수 문자열, 연산자, 분리자로 구성됩니다. 이 어휘로 작성된 프로그램을 컴파일러가 C 언어의 구문에 따라 맞게 구성되었는가를 조사합니다. 따라서 아무리 기초적인 에러라 할 지라도 구문 문법에 맞지 않을 경우 프로그램의 번역을 중지하게 되어 있습니다. 

 

C 언어로 작성된 프로그램은 다음의 문자들을 사용하여 작성됩니다. 

 

소문자 : a b c d..... z

대문자 : A B C D..... Z

숫자 : 0 1 2 3 4 5 6 7 8 9 0

기타 문자 : + - / = ( ) { } [ ] < > ' "! @ # $ % & _ | ^ ~. , ; :?

공백 문자 : 공백(blank), 새 줄(new line : \n), 탭(tab : \t)

 

이들 문자들을 이용해 프로그램한 후 이를 컴파일시키면 컴파일러는 이 프로그램을 구문적 단위인 토큰으로 분류를 하게 됩니다. 

 

어휘 분석을 위한 프로그램 예시

/*read in two integers and print their sum */
#define <stdio.h>
main()
{
	int x, y, sum;
    printf("please input x and y : ");
    scanf("%d %d", &x, &y);
    sum = x + y;
    printf("\n x = %d, y=%d\n", x , y);
    printf("sum = %d, sum\n);
}

위의 프로그램에서 사용된 기본 어휘를 종류별로 나열해 보면 다음과 같습니다. 

 

주석(comment) : /* 와 */ 사이의 내용

식별자(identifier) : main, x, y, sum, printf, scanf

예약어(reserved word) : int 

문자열 상수(string constant) : " 와 " 사이의 내용

연산자(operator) : &, = , +

분리자(separator) : ( ) { } , ;

 

여기에 사용된 식별자, 예약어, 연산자, 분리자 모두가 토큰이며 공백이나 주석은 토큰 내부를 제외한 프로그램의 어디에나 존재할 수 있습니다. 위의 프로그램에서 첫 번째 줄의 "/* read in two integers and print their sum */"은 프로그램의 설명을 부여한 것으로 실제 프로그램의 실행에는 전혀 관계하지 않습니다. 이와 같이 프로그램에 어떤 설명을 붙이고자 할 경우 "/*"와 "*/"를 사용하는데 컴파일러가 이 부호를 만나면 번역하지 않고 그냥 지나가 버립니다. 

 

두 번째 줄의 "#include <stdio.h>"는 입출력에 관계되는 stdio.h라는 헤더 파일을 현재 위치로 복사해 오는 전처리 지시어입니다. 이 stdio.h라는 파일의 내용을 살펴보면 printf 함수와 scanf함수에 대한 정의가 담겨 있는 것을 알 수 있을 것입니다. scanf 함수는 키보드를 통해 어떤 자료를 입력받을 때 사용하는 입력 함수로 자세한 설명은 함수 부분이나 파일의 입출력 부분에서 다시 설명하겠습니다. 

 

세 번째 줄에서 main은 식별자로 구분되며 ()는 컴파일러에게 함수임을 나타내며 다음 줄의 {와 프로그램의 마지막 줄에 있는 }, 그리고 프로그램 내의 모든 콤마 (,)는 분리자로 해석됩니다. 

 

다섯 번째 줄의 int는 예약어로 사용되기 때문에 프로그램 변수나 함수의 이름으로 사용하면 안 됩니다. 뒤의 x, y, sum은 식별자로 사용되며 이는 프로그램 작성 시 변수, 함수, 상수 등에 부여된 이름을 의미합니다. 이 식별자는 영문자와 숫자의 조합에 의해 구성될 수 있으나 첫 문자는 반드시 영문자나 밑줄을 사용하도록 합니다. 식별자로 사용할 문자열의 크기는 컴파일러에 따라 처음 8 문자나 31자까지만 이식을 하고 그 이상은 다만 사용자의 편리를 위해 제공하고 있습니다. 따라서 의미 있는 이름을 사용하는 것이 프로그래밍에 도움이 됩니다. 용도를 쉽게 파악하면 여러모로 편리하기 때문입니다. 

 

 

댓글