@@

0@ 개요

1@ 초보자를 위한 토큰

+1@ 파이썬이나 자바스크립트 경험자를 위한 설명

+2@ 초보자를 위한 설명

2@ C++토큰의 좀더 엄밀한 정의

+1@ 키워드

+2@ 식별자

+3@ 연산자

+4@ 리터럴

@@@


@@0@ 개요


 이번 강좌는 코드의 가장 기본인, 단어들, C++에서는 토큰(Token)이라고 부르는 것이 무엇이고 어떻게 작동하는지 설명할거야.

 사실 언어를 배우기 가장 좋은 방법은 코드에 따른 작동 방식의 예제를 보고, 지금 이 코드들이 어떻게 작동하는지, 코드의 변화에 따라 어떻게 다르게 작동할지 생각/테스트/시행착오 해보는거야.

 영어에서도 문법만 보는 사람과 직접 언어를 구사하기도 하는 사람 중 후자가 더 발전 속도가 빠르다는 거 알고 있잖아? 

그리고 너가 한국어를 배운 언어구사자인 이상, 코드에서 본능적으로 패턴을 찾아낼 수 밖에 없어.


  그래서, 만약 이 강좌가 이해가 안된다면(당연하지만), 

다른 강좌들과 강좌 속의 예제를 보면서 문법과 의미를 추론을 이 강좌와 병행하는 것도 좋아. (가장 추천)


예시

 #include <iostream>
 
 int main()
 {
     std::cout << "HelloWorld";
     return 0;
 }



@@1@ 초보자를 위한 설명


@@1@1@ 타 프로그래밍 언어 유경험자

 자바스크립트나 파이썬 같은 언어를 쓰시던 분들은, 아마 토큰 자체는 잘 구별할 수 있을거고, 

C++은 다른 언어의 줄 끝에 세미콜론만 적어준 버전으로 생각하시면 편합니다.

다만 같은 문자라도 항상 같은 역할을 하는 토큰을 의미하지 않습니다. 상대적인 위치에 따라 토큰의 종류와 역할이 달라지고, 기호가 조합되어서 다른 기능이 될 수도 있고, 기호같은 경우, 사이에 공백이 있든 없든 구별되는 기호,와 있거나 없을 경우 또 다른 기호로 취급되는 기호가 있습니다. 더 자세한 내용을 원한다면 

2@ 로 가시기 바랍니다. 


@@1@2@ 초보자

 C/C++에서의 토큰이란, 쉽게 생각하면 단어들이야.

"Hello, my horse has three gay."라는 문장이 있을 때, 단어는 

"Hello|,|my|horse|has|three|gay|." 문장부호 구별까지 포함해서 단어를 구분한다면 이와같아.

C/C++도 마찬가지야, 띄어쓰기가 되어있으면 그냥 독립적인 단어로 봐도 돼. 그리고 그 단어들을 토큰이라고 해.


 #include <iostream>
 
 int main()
 {
     std::cout << "HelloWorld";
     return 0;
 }

 이건 C++코드의 예시야. 보기만 해도 무슨 뜻인지 모르겠지? 

그래도 일단 위의 규칙을 따르면 단어, 즉 토큰을 분리할 수는 있어. 해보자.

" # | include | < | iostream | > | int | main | ( | ) | { | std | : | : | cout | < | < | " | HelloWorld | " | ; | return | 0 | ; | } "

 이때 "_" (언더바) 같은 경우에는 영어와 하나로 취급되는 것만 기억하면 돼.

 만약 누구의 도움 없이 코드를 단어/토큰으로 분해할 수 있다면 기초강좌 1.탄을 진행할 수 있어. 



@@2@ 좀 더 자세한 설명


1. 키워드 keyword, 내장되어있는 토큰들 중 함수, 또는 치환으로 해석되지 않고 오직 컴파일 문법으로서 해석되는 토큰. 반환값을 가지지 않음. 

2. 식별자 identifier, 사용자 이름지정이 가능한, 예를 들어 클래스, 함수, 객체이름등. 만들어질 경우 키워드나, 연산자의 일부로서 사용되게 할 수 있음.

3. 연산자 operator, 옆에 있는 두개나 한개의(예외존재~1~) 개체를, 인수로 하는 함수나, 함수/객체가 들어간 치환으로 해석되고, 컴파일러에서 처리하는 우선순위가 정해져 있고, 정할 수 있는 토큰. 반드시 타입을 가진 리턴값을 반환하게 됨. 그러니까 연산자가 아닌 것은 다른 함수의 인수나 피연산자에 절대 들어갈 수 없어. 

4. 리터럴 literal, 사용자가 코드에 직접 적어놓은(하드코딩~2~한) 숫자나 문자열, 또는 컴파일 시점에 값을 반드시 정할 수 있고, 프로그래머가 값을 정하라고 한 객체.


 같은 문자라도 상대적인 문법적 위치에 따라 키워드로, 연산자로 다르게 해석될 수 있어. 


@@2@1@ 키워드

 예를 들어,

";" , ",(분리자)" ,"comma", main, class, void, "int, float등", "{}(함수/클래스/namespace 정의)", "()(함수 정의)", "return", "break",

"continue", "goto" ,"public, private, protected", " "클래스명" "객체명" 뒤에 나오는 "=" 복사생성자, "{}/()",생성자" 등등


@@2@2@ 식별자

키워드: "사용자 지정 클래스명", "사용자 지정 구조체명", "사용자 지정 함수명"

객체명: "클래스명" "사용자 지정 객체명";

연산자(임시객체): ""사용자 지정 클래스명"{}"


@@2@3@ 연산자

 연산자는 각 연산자마다 연산 우선도가 정해져 있어. 그리고 이 순서는 () 괄호연산자로 우선적으로 연산할 연산자를 지정할 수 있

어. 그 순서는 ~W~ 나 ~M~ 에 잘 정리되어 있어.

연산자의 종류는 아래와 같아,

"[]"~1~,"사+n칙연산","논리, 비교연산","포인터 참조","대입연산류","범위지정연산자","캐스트연산자","멤버참조","콤마연산자",

"삼항연산자"~1~,"타입이름{param}(임시객체)"  등등

 어쨌든 진짜 많아. 

 연산자(함수)들은 문법적 조건만 지킨다면 클래스 내에서 작동을 재정의 할 수 있어.


 @@2@4@리터럴

 컴파일 때 이미 정해져 있거나, 반드시 정해질 수 있는 값이야. 즉 코드에 직접 쓰여져 있는 값이나 그 값으로 정해지는 값들이지.

   예시

    1234
    "hello maaaaaaaan"


@@@ 각주

자료 출처

*W* 위키피디아 연산자 문서

*M* 도움이 되는 마이크로소프트 연산자 공식 문서


+ comma 연산자에 관하여

3

4

단어 정리

 Token, identifier, keyword, operator, literal