토큰
어휘 단위로 구분하는 최소 단위이다
연산자,구분자,명칭,키워드,상수 5가지를 가지고 있다.
명칭은 변수나 함수의 이름처럼 프로그램내에서 사용자가 필요에 따라 만들어 사용하는 토큰들을 말한다.
영문 대소문자, 숫자 혹은 밑줄로 구성되며, 숫자로 시작할수 없으며 키워드(예약어)와 같을 수 없다.
자료형
변수라는 것은 데이터를 저장할 메모리 공간을 할당하고, 이에 이름을 붙여준 것이다.
자료형이란 메모리에 저장된 데이터의 해석방법이라고 볼수 있다. 각 데이터의 저장형식은 메모리의 저장공간을 절약하기 위해서 다른 방법을 사용한다.
문자형
문자의 집합으로 각 문자는 1바이트에 저장된다.
1바이트는 8비트로 구성되어있어서 256개의 문자를 표현할수 있다.
문자상수는 작은따음표(' ')를 사용하여 나타낸다.
아스키코드도 사용이 된다.
int A = 65;
int B = 'A'; //아스키코드 65이다.
그래서 결국 A와 B는 같은 값을 저장하게 된다.
%C로 A와 B를 출력하니 둘다 동일한 값 A로 출력된것을 통해 알수 있다.
여기서 A와 B를 %d로 호출하니 아스키코드 65로 저장된것을 알수 있다.
정수형
char형 변수가 저장할 수 있는 값의 범위는 -128부터 +127(0 ~255)사이다.
그 이상의 값을 저장하려면 int형 변수를 사용해야 한다.
#include<stdio.h>
int main(void)
{
int input, change; //input은 투입액,change는 잔돈을 저장할 변수
int w500, w100, w50, w10; //각 동전의 개수를 저장할 변수
printf("돈을 입력하세요:");
scanf("%d", &input);
change = input - 150; //커피값이 150원일 때 잔돈 계산
w500 = change / 500; //500원 동전의 개수
change = change % 500; //아직 지급하지 못한 남은 잔돈
w100 = change / 100;
change = change % 100;
w50 = change / 50;
change = change % 50;
w10 = change / 10;
printf("500원짜리 동전 %d개\n", w500);
printf("100원짜리 동전 %d개\n", w100);
printf("50원짜리 동전 %d개\n", w50);
printf("10원짜리 동전 %d개\n", w10);
}
심볼테이블
프로그램에서 제공하지 않는 것을 만드는 테이블이다. (임시적으로)
3가지를 가지고 있다. Type,name,address가 있다.
여기서 Type에는 Type랑 size이 같이 들어가 있다.
예를 통해서 이해를 쉽게 하겠다.
int A = 100;
int B;
B = A;
여기서 둘다 Type이 같아야 한다.
데이터는 자기 마음대로 움직일수가 없다. 그래서 CPU가 관여해서 데이터를 옮기게 된다.
일단 메모리 스택에 A 100이 들어 있으면 버스를 통해 CPU에 레지스터에 들어가게 된다.
그 다음에 레지스터에 있는 100이 다시 버스를 타고 메모리에 있는 B에 들어가 된다.
int A = 100;은 처음에는 심볼테이블에 타입에 int를 네임에 A를 넣고 주소에 1000을 입력한다.
그리고 나서 100을 그 주소값에 넣는다.