Я ещё не закончил планирование как будет обрабатываеть kjass parser, но я хочу чтобы это хоть в более или менее отличалось от vJass и cJass.  Поэтому я набрасал немного черного варианта Синтаксиса kjass. 
Но программу ещё не написал, потом что пока определяюсь что лучше использовать. Векторы или массивы. Множества или ХешМассивы. Вот думаю ещё, все убрать в консоль(Никаких лишних форм, все показывается в консоли), или CLR + консоль(Есть прогрессбар-статус, Отчет об ошибках сообщается в консоли), или чисто CLR(Все показывается в формах), или же MFС(Передумал). Или чисто WinApi(Рассматриваю как вариант, но всё же строчить компоненты в rc не охота, или прописывать вручную по параметрам. Мало веса - тоже важно, как и скорость ы...)...
Но программу ещё не написал, потом что пока определяюсь что лучше использовать. Векторы или массивы. Множества или ХешМассивы. Вот думаю ещё, все убрать в консоль(Никаких лишних форм, все показывается в консоли), или CLR + консоль(Есть прогрессбар-статус, Отчет об ошибках сообщается в консоли), или чисто CLR(Все показывается в формах), или же MFС(Передумал). Или чисто WinApi(Рассматриваю как вариант, но всё же строчить компоненты в rc не охота, или прописывать вручную по параметрам. Мало веса - тоже важно, как и скорость ы...)...
Вот как мне правильно импортировать из sfmpq в C++ функции так, чтобы хендл получала переменная при открытии. Чтобы я знал, что архив я открыл или прочее.. Мне лишь нужны будут операции над извлечением из архива, затем после обработки, добавлением обратно.
ReadMe
Объявление функций
Функции объявляются так же, как и в cJass, но вместо nothing можно ставить null
null Test(){
 debugmsg "Test?";
}
int Minus(){
	return -1;
}ultra - Псевдокод-функция, не define.. Служит для эмуляции типа func(&type, n+1); 
inline - прописывает функцию перед её вызовом в нескольких экземплярах
line - перемещает функцию к самой первой обращающееся функции к лайновой функции. Т.е. ближе к месту самого первого вызова.
fine - устанавливает прыжок для inline
inline - прописывает функцию перед её вызовом в нескольких экземплярах
line - перемещает функцию к самой первой обращающееся функции к лайновой функции. Т.е. ближе к месту самого первого вызова.
fine - устанавливает прыжок для inline
Объявление переменных
int  - Целое
flo - Вещественное
str - Строка
bool - Логическое
Остальные как обычно.
flo - Вещественное
str - Строка
bool - Логическое
Остальные как обычно.
varlist каркас для объявления нескольких переменных внутри функций. Исключительно только для функций. Типы и имена должны перечисляться через запятую, однако переменные не должны совпадать с глобальными.
varlist C{
	unit c, unit g, timer t
	int id, flo x, flo y
}
null func(){
local C = { GetSpellAbilityUnit(), GetSpellTargetUnit(), .Create, t.Handle, GetWidgetX( c), GetWidgetX(c) }
// code...
}funclist -  почти тоже самое, что и varlist, но перечисляются типы, но только в круглых скобках. Возвращаемый тип ставиться перед круглыми скобками.
funclist funcx = null(str);
funcx func2(s){
	debugmsg s;
}struct - Статическая структура. Как в vJass, но тупо статическая. Одна может принимать вид конструкции у другой, при этом может иметь свою конструкцию.
struct A{
	unit	Speller = null //sts_A_Speller
	unit	Target	= null
	flo		TargetX = 0.
	flo		TargetY = 0.
	int		HandleId = 0
	timer	Timer	= null
}
struct B<-A{
	int Counts = 0
}
null ops(){
A.Speller = GetSpellTargetUnit(); // Правильно
A.Counts = 0; // Не правильно 
B.Speller = GetSpellTargetUnit(); // Правильно
B.Counts = 0; // Правильно
}
Директивы
$_ALL, $_RANGED - для массивов
$_func - для функций ( code ) function function_name
$_func - для функций ( code ) function function_name
0x, $ - Hex 
0a, $$ = Rave
0a, $$ = Rave
Массивы
int a[ ][100] - двумерны
int b[ ] - одномерный
int b[ ] - одномерный
Внимание: Работает только внутри функций..
b[9] = {$_ALL | 0} Диапазоном от 0 до 9 [0..8] установит 0.
a[5][20] = {$_ALL}{$_ALL | 0} Диапазоном от 0 до 5 [0..4] и от 0 до 20 [0..19] , установит 0
b[] = {$_RANGED| 5 | 7 |0} Диапазоном с 5 по 7 [5..7] установит 0.
b[][] = {$_RANGED| 5 | 10}{$_RANGED| 0 | 100| 0} Диапазоном с 5 по 7 [5..7] и с 0 по 100 [0..100] установит 0.
b[9] = {$_ALL | 0} Диапазоном от 0 до 9 [0..8] установит 0.
a[5][20] = {$_ALL}{$_ALL | 0} Диапазоном от 0 до 5 [0..4] и от 0 до 20 [0..19] , установит 0
b[] = {$_RANGED| 5 | 7 |0} Диапазоном с 5 по 7 [5..7] установит 0.
b[][] = {$_RANGED| 5 | 10}{$_RANGED| 0 | 100| 0} Диапазоном с 5 по 7 [5..7] и с 0 по 100 [0..100] установит 0.
Объекты и Классы
object  - создаёт динамическую структуру симулирующую объект. Максимальный размер через обязательный ключ setsize не может быть больше 1024 и меньше 16.
replecator - особый ключ для компилятора, который запрещает плодить переменные массивы для объекта, вместо этого он использует одну и туже переменную для каждой ветки, но если память уже не может выделена для следующей ветки, то создаётся новая переменная массив. Можно включать и выключать.
replecator - особый ключ для компилятора, который запрещает плодить переменные массивы для объекта, вместо этого он использует одну и туже переменную для каждой ветки, но если память уже не может выделена для следующей ветки, то создаётся новая переменная массив. Можно включать и выключать.
initialization - Для управления переменными объекта, при создании.
finalization - Для управления переменными объекта, при удалении.
callback - Таймерная функция внутри объекта.
finalization - Для управления переменными объекта, при удалении.
callback - Таймерная функция внутри объекта.
object TestObj setsize 1024 
{
	replecator on
	int a
	int b
	replecator off
	int c[8]
	int d[4][4] 
	initialization
	{
		.a = 0
		.b = 0
		.c[8] = { $_ALL | 0 }
		.d[4][4] = { $_ALL | 0 }{ $_ALL | 0 }
	}
	
	callback{
		// код омгф код????
	}
	
	finalization
	{
		.a = 0
		.b = 0
		.c[8] = { $_ALL | 0 }
		.d[4][4] = { $_ALL | 0 }{ $_ALL | 0 }
	}
}class - Может подключать к себе объект через ключ extends . В отличии от объекта он не имеет ограничений.  Может так же иметь finalization, initialization и callback, который автоматический создаёт таймер и шаг к нему. 
Класс может иметь и статический каркас, который наследуется из другого класса. Т.е. он использует конструкцию типов из другого, но не методы. В статическом каркасе нельзя объявлять перемененные. 
-> Доступ к классу внутри класса или self->
. Доступ к объектку внутри класса или this.
Класс без extends  - так же как объект, по сути превращается в полноценную структуры. Так же как vJass.
class MyClass extends TestObj
{
	unit Unit
	int  Data
	
	callback{
		self = expiredid
		if ->Data > 0 {
			->Data-=2;
		}
		else
		{
			->timer.Delete
			->Delete
		}
	}
	
	initialization(unit c, int b)
	{
		this = object.Create
		.a = GetUnitLevel(c)
		.b = GetUnitPointValue(c)
		->Unit = c 
		->Data = b
		->onTimer( 0.5, true, $_func callback )
	}
	
	finalization
	{
		.Delete
		->Data = null
	}
}Создаются классы, объекты, и типы из handle  с помощью спец. функции .Create или ->Create, а удаляются через .Delete или ->Delete.
Отладка
debugmessager - Устанавливает функцию для сообщений. По умолчанию BJDebugMsg;
debugmessager = BJDebugMsg; debugmsg - вбивает в функцию сообщений параметры.
debugmsg "Отладка...";autodebug - Добавляет отладочный код, который показывает в игре, какая строчка кода выполняется до запуска. 
autodebug on;
autodebug off;Прочее
Типа case:
int test(str String){
	case of String {
		on "test 1": return 1
		on "test 2": return 2
		on "test 3": return 3
		on "test 4": return 4
		otherwise: return 0
	}
	return NULL
}
В планах:
if error NOMINUS on this{
	debugmsg "Значение this не корректно!"
} 
Пакет:
packet(MyPacket) load on {
	inside trigger Trigger = null
	
	inside null Action(){
	
	}
	
	finalization{
		/*
		Код 
	*/
	}
	
	initialization{
	/*
		Код 
	*/
	}
}НЗМ: Если писать подробнее, то это геммор xd.. Хотя вдруг я решу не делать некоторые примочки для компилятора псевдо-кода KJassSyntax.
Опрос: Стоит ли бросить эту затею?
        
    1. 
                        Да, мартышкин труд.
                            
                        2. 
                        Лучше изучай C++ для другого дела, чтобы пригодно было. Например для разработки собственных игр или софта.
                            
                        3. 
                        Нет (+Свой комментарий или молча нет)
                            
                         
                        
                        
                    
 VOLCHACHKA-…
                                VOLCHACHKA-…
                            
 
                    
                
Догадаться не сложно: float string
Ред. prog
А еще лучше - учил бы Unreal Engine.
Может вы имели ввиду Unity, а не Unreal Engine. Или всё-таки ареал?
Это
Хотя и парсить все переменные не очень весело.