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>
This commit is contained in:
137
CryptoSource/ScriptEngine-MCF File/version.txt
Normal file
137
CryptoSource/ScriptEngine-MCF File/version.txt
Normal file
@@ -0,0 +1,137 @@
|
||||
|
||||
[[[해결해야 할 문제들]]]
|
||||
=> 메뉴얼 쓰기
|
||||
=> 전처리기 기능 넣기
|
||||
=> 코드 최적화 알고리즘 넣기
|
||||
=> ++, --, =가 변수에만 가능하도록 해놨는데, 배열 인덱싱(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
|
||||
[심볼]
|
||||
[연산자]
|
||||
산술연산자
|
||||
+, -, *, /, %
|
||||
+=, -=, *=, /=, %=
|
||||
++, --
|
||||
=
|
||||
논리연산자
|
||||
&&, ||
|
||||
비교연산자
|
||||
<, <=, >, >=, ==, !=
|
||||
|
||||
[기타]
|
||||
;
|
||||
()
|
||||
[] - 인덱싱
|
||||
{}
|
||||
[함수]
|
||||
선언
|
||||
호출
|
||||
정의
|
||||
|
||||
Reference in New Issue
Block a user