Files
Client/CryptoSource/ScriptEngine-MCF File/version.txt
LGram16 dd97ddec92 Restructure repository to include all source folders
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>
2025-11-29 20:17:20 +09:00

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
[심볼]
[연산자]
산술연산자
+, -, *, /, %
+=, -=, *=, /=, %=
++, --
=
논리연산자
&&, ||
비교연산자
<, <=, >, >=, ==, !=
[기타]
;
()
[] - 인덱싱
{}
[함수]
선언
호출
정의