Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
138 lines
2.6 KiB
Plaintext
138 lines
2.6 KiB
Plaintext
|
|
[[[해결해야 할 문제들]]]
|
|
=> 메뉴얼 쓰기
|
|
=> 전처리기 기능 넣기
|
|
=> 코드 최적화 알고리즘 넣기
|
|
=> ++, --, =가 변수에만 가능하도록 해놨는데, 배열 인덱싱(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
|
|
[심볼]
|
|
[연산자]
|
|
산술연산자
|
|
+, -, *, /, %
|
|
+=, -=, *=, /=, %=
|
|
++, --
|
|
=
|
|
논리연산자
|
|
&&, ||
|
|
비교연산자
|
|
<, <=, >, >=, ==, !=
|
|
|
|
[기타]
|
|
;
|
|
()
|
|
[] - 인덱싱
|
|
{}
|
|
[함수]
|
|
선언
|
|
호출
|
|
정의
|
|
|