[C언어] #001 토큰 (tokens)

COM2008. 1. 11. 23:49 |

프로그래머가 코드를 짜면, 컴파일러는 일차적으로 해석을 해야한다. 그러나 컴퓨터는 계산기일 뿐이므로 "이해"라는 것을 하는것은 불가능하다.

물론, AI 에 대한 논란의 여지는 있다. 그리고 그것은 결국 인간의 인텔리젼스는 무엇인가로 귀착된다. 단지 뇌의 신경물질 전달의 결과로 볼것이냐 혹은 더 상위의 개념 ( 가령 영혼이라든가... ) 을 전제하느냐의 문제이다. 전자라면, AI는 매우 가능한 것이며, 이미 진행되고 있는 그것이다. 반면에 후자라면, AI는 이해라기 보다는 이해를 하는 것처럼 보이게 만들기위한 인간의 노력일 뿐이다.

궁극에가서는 같은 것을 놓고, 혹자는 AI라고 칭하고, 혹자는 조금더 진보된 계산기일 뿐이라고 칭할 것이다. 그러면 AI 라고 칭하는 자들은 , 인간이 그 이상도 그 이하도 아니므로 당신말도 맞다 라고 할 것이다.

여튼, 컴파일러는 소스코드를 모종의 기본단위로 쪼개고, 오브젝트 코드로 바꾸는데, 그러한 쪼갬의 단위를 token 이라고 한다.


ANSI C 에서는 6가지 종류가 있고, 다음과 같다.

keyword
identifier
constant
string
operator
punctuation


-----------------------------------------------------------------------------------------------------------------------

키워드는 C언어에서 미리 예약된 토큰이고, ANSI C 에서는 32 개가 있고, 다음과 같다.

auto , break , case , char , const , continue , default , do , double , else , enum , extern , float , for , goto , if , int , long , register , return , short , signed , sizeof , static , struct , switch , typedef , union , unsigned , void , volatile , while

여기에 컴파일러마다 추가적으로 지정할 수 있다. 그러나 주의할 것은 키워드 외에도 실제적으로 사용할 수 없는 단어들은 많다는 거다. 특히, 자주쓰는 라이브러리에 정의된 상수나 함수들은 피해야 한다.


----------------------------------------------------------------------------------------------------------------------

identifier 는 어떤 대상을 identify 해주는 녀석이다. 가령, 함수명이라든가, 변수명 등을 예로 들 수 있다.  우리말로는 식별자 라고 한다.

예를들면...
...
int a , b , sum ;
callback();
...


에서, a 도 identifier 이고, b 도 , sum 도 , callback 도 identifier 이다. 반면, int 는 keyword 이다.
() 는 operator 이고, ; 는 punctuation 이다.

identifier 에 사용가능한 문자는 문자, 숫자, 그리고 underscore  ( _ ) 이다.


identifier 의 구문규칙을 살펴보면 다음과 같다.

identifier  ::=  { letter | underscore }1 { letter | underscore | digit }0+
underscore  ::=  _

즉, 숫자로 시작하는 것은 허용하지 않는다.

underscore 로 시작하는것도 구문상 문제가 되지는 않으나, 시스템에서 정의된 많은 식별자들이 _ 로 시작하도록 셋팅되어있기때문에, 시스템 프로그래머가 아닌경우, _ 로 시작하는것은 권장하지 않는다.

stdio.h 안에 _iobuf 등을 예로 들수 있다.