
[[[해결해야 할 문제들]]]
=> 메뉴얼 쓰기
=> 전처리기 기능 넣기
=> 코드 최적화 알고리즘 넣기
=> ++, --, =가 변수에만 가능하도록 해놨는데, 배열 인덱싱(a[2])에도 가능하도록 바꿀 것. 
=> 함수에 배열을 넘겨줄 수 있도록 할 것.

=> 대부분의 명령에서 임시 저장 공간으로서 ECX, EDX등의 레지스터를 쓰는데, 레지스터의 개수가 제한적이라서
   중복될 경우가 생길 수 있는데, 이럴 경우에 결과가 잘못 나오게 된다.
	예를 들어 int a = func( 4 ) + 10; 이런 문장이 기계어 코드로 바뀔 때
	1.MOV 	ECX, 10
	2.MOV	ECX, 4
	3.PUSH	ECX
	4.CALL	func
	5.ADD	ESP, 4
	6.ADD	ECX, EDX
	7.MOV	a, ECX
	이렇게 바뀌는데, 1번 명령에서 ECX에다 임시로 10을 저장해 놨는데
	2번 명령에서 임시로 값을 집어 넣는다고 4를 넣어버려서 미리 넣어 
	놓은 값 10을 잃어버릴 경우도 생길 수 있다.
   ->PUSH, POP으로 해결할 수도 있는데... 이럴 경우 너무 느려지게 된다.
   ->각 명령마다 레지스터 사용 상태를 저장해 놓고, 새로운 Statement가 시작될때마다
   레지스터 사용 상태를 초기화 하도록 해놓은 다음에 레지스터 사용 상태에 따라
   임시 저장 레지스터를 선택하도록 하는 것도 괜찮을 듯...
=> EAX 레지스터는 함수의 리턴값으로 예약해놓고 쓰는데, 이것과 중복될 경우에도
	예기치 못한 결과가 날 수 있다.
=> 문자열의 덧셈 연산을 할 때 임시 문자열 변수들이 사용되는데, 이것을 적절히 없애주는 알고리즘도
	나중에 만들 것.









[0.9]


[0.8]
=>string연산들 추가.( +, +=, = )

[0.78]
=>VirtualMachine 클래스 추가, 함수 바인딩 추가

[0.77]
=>IntermediateCode -> 기계어 코드 부분에 대한 버그들 수정.

[0.75]
=>IntermediateCode -> 기계어 코드 부분 추가.
=>TYPE_FUNCTION_CALL에 대한 타입 체크 추가

[0.7]
=>IntermediateCode에서 바로 기계어 코드를 생성할 수 있도록 하기 위해 
	IntermediateCode 클래스를 전면 재 코딩

[0.6.2]
=>0.5 버전에서 만든 Intermediate코드 클래스에 함수와 배열에 대한 코드 생성 기능 추가
=>IntermediateCode 클래스 리팩터링

[0.6.1]
=>함수와 배열을 지원하도록 SymbolTable과 SyntaxTree를 수정함.

[0.6]
=>Virtual Machine을 만들어서 Intermediate 코드가 실행될 수 있도록 함.

[0.5]
=>Intermediate 코드 생성 기능 추가.

[0.4]
=>syntax tree에서 타입 체킹 추가

[0.3]
=>symbol table과 syntax tree 추가

[0.2]
=>기본 문법에 대한 parser 코딩

[0.1]
=>기본 문법에 대한 lexer 코딩
  전처리기는 기능을 아직 넣지 않았음.
	[전처리기]
		#include
		#define
	[주석]
		//
		/* ... */
	[상수]
		int상수
		float상수
		bool상수
		string상수
		vector상수
	[키워드] 	
		(변수 선언 키워드)
			int
			float
			bool
			string
			vector
		(루프 키워드)
			for
			while
		(분기 키워드)
			if
			else
			switch
		(점프 키워드)
			break
			continue
			default
			case
			return
	[심볼]
	[연산자]
		산술연산자
			+, -, *, /, %
			+=, -=, *=, /=, %=
			++, --
			=
		논리연산자
			&&, ||
		비교연산자
			<, <=, >, >=, ==, !=

	[기타]
		;
		()
		[]	- 인덱싱
		{}
	[함수]
		선언
		호출
		정의

