При решении проблем ключевых слов при конвертации в Lua было решено не городить непонятные костыли, а реализовать системное решение по преобразованию JASS кода.
Возможности
На данный момент их мало, но при достаточном количестве лайков и комментариев их список будет пополняться.
Переименование идентификаторов
Идея проста - после парсинга проходим по всем идентификаторам и назначаем им новое имя избегая повторений и ключевых слов. Так как у нас каждый элемент дерева знает где он объявлен логика останется прежней.
globals
real do = 1
real keyword = 2
endglobals
function end takes real until returns real
local real in = do + until + keyword
return in
endfunction
function main takes nothing returns nothing
local real repeat = end(do) + end(keyword)
endfunction
globals
real a = 1
real b = 2
endglobals
function c takes real e returns real
local real d = a + e + b
return d
endfunction
function f takes nothing returns nothing
local real g = c(a) + c(b)
endfunction
Важно. На данный момент не решена проблема с ExecuteFunc. Но это будет после реализации следующей возможности:
Инлайн переменных
Для решения проблемы из предыдущего абзаца необходимо реализовать инлайн значенний переменных и проводить над ними операции. На данный момент не реализована. Если вам она нужна, то ставьте лайки и пишите комментарии.
В предыстории же написано: