C++로 자작 언어(ClauText) 만들기

1. ClauText 알아보기 A

 ClauText가 어떻게 만들어 졌는지 알아보기 전에 ClauText에 대해서 알아봅시다.

Main = { $call = { id = 0 } }

Event = {
	id = 0

	$local = { i j }
	$assign = { $local.i value = { 1 } }

	$while = {
		condition = { 
			$COMP<EQ = { $local.i 9 } 
		}
		then = {
			$assign = { $local.j value = { 1 } }
			$while = {
				condition = {
					$COMP<EQ = { $local.j 9 }
				}
				then = {
					$if = { 
						condition = { $EQ = { 0 $modular = { $local.j 2 } } }
						then = {							
							$print = { data = { $local.i } }
							$print = { data = { " * " } }
							$print = { data = { $local.j } }
							$print = { data = { " = " } }
							$print = { data = { $multiple = { $local.i $local.j } } }
							$print = { enter = { \n } }
						}	
					}		
					$assign = { $local.j value = { $add = { 1 $local.j } } }		
				}
			}
			$print = { data = { ------- } }
			$print = { enter = { \n } }
			$assign = { $local.i value = { $add = { 1 $local.i } } }
		}
	}

	$_getch = { }
}

위는 구구단(약간의 변형) 코드입니다.

보통의 언어처럼 Main함수가 있지만, $call = { id = any_id } 정도만 사용할 수 있다는 제약이 있습니다.

Event는 함수처럼 생각하면 됩니다. 그리고 Event의 id는 함수이름이라 생각하며 되며

 이름에는 보통 아무꺼나 와도 되지만, NONE같은 경우는 프로그램내에서 사용될 수 있기때문에

사용해서는 안됩니다. 그외에는 한글, 숫자, 영어등이 가능합니다.

 그리고 대부분 Event 부분의 구조등은 A = { B  = { C } } 또는 A = B 등으로 구성되어 있고

데이터 부분의 구조도 이와 비슷하며 { A = B } 같은 구조도 가능합니다.

 전반적으로 JSON과 비슷한? 느낌을 받을 수 있습니다.

그리고 JSON과 비슷한? 구조로 된 데이터를 불러올 수 있고 불러온 데이터의 추가, 삭제, 수정 등이

가능합니다. 

 데이터 구조는 Paradox사의 clausewitz engine 게임의 saveGame 파일에서 구조를 그대로 가져 왔습니다.

(주로 Paradox사의 Europa Universalis 4 save 파일로 테스트하였습니다.)

그래서 위 게임의 세이브파일을 불러온 다음 수정할 수 있습니다.

 

댓글

댓글 본문
버전 관리
vztpv
현재 버전
선택 버전
graphittie 자세히 보기