Универсальный язык программирования
На моём движке есть возможность в текстовом файле писать игру на языке, отличном от lua, но который при запуске движка анализируется и создаётся на его основе программа на языке lua. Преобразователь там простейший, но у меня возникла идея создания универсального языка, причём анализатор был бы похож примерно на парсерный адвентюрный. Суть идеи такова: пишется программа такими командами, как:
cls, очистить экран, очистка
print, вывести сообщение, pln, вывод, message
if ... then ... else...end
или
если...то...иначе...конец
и парсерный анализатор эти команды преобразовывает в команды, понимаемые lua интерпретатором. Я понимаю, что писать такие программы будет гораздо дольше, но если использовать сокращенные, то одинаково, просто не привычно. Но даже если вы где-то напишете if .. то.. иначе..end, то никакой ошибки при этом не возникнет, ведь адвентюры синонимы воспринимают одинаково, а IF и ЕСЛИ это и есть синонимы разных языков программирования.
Получается, что можно будет писать так:
if a~= b then print c
else print d
end
и так:
if a not eq b then pln c
else pln d
end
и так:
если a не равно b то вывести c
иначе вывести d
конец
и даже так:
если a <> b then print c
иначе pln d
end
Мне кажется, что такое создать можно, реально.
P.S. Я попробовал сделать простейший анализатор и выяснилось, что нужны строгие правила синтаксиса для правильной парсеровки текста: обязательные кавычки в текстовых сообщениях, законченность условий (endif), начало и конец процедур с именами процедур.
cls, очистить экран, очистка
print, вывести сообщение, pln, вывод, message
if ... then ... else...end
или
если...то...иначе...конец
и парсерный анализатор эти команды преобразовывает в команды, понимаемые lua интерпретатором. Я понимаю, что писать такие программы будет гораздо дольше, но если использовать сокращенные, то одинаково, просто не привычно. Но даже если вы где-то напишете if .. то.. иначе..end, то никакой ошибки при этом не возникнет, ведь адвентюры синонимы воспринимают одинаково, а IF и ЕСЛИ это и есть синонимы разных языков программирования.
Получается, что можно будет писать так:
if a~= b then print c
else print d
end
и так:
if a not eq b then pln c
else pln d
end
и так:
если a не равно b то вывести c
иначе вывести d
конец
и даже так:
если a <> b then print c
иначе pln d
end
Мне кажется, что такое создать можно, реально.
P.S. Я попробовал сделать простейший анализатор и выяснилось, что нужны строгие правила синтаксиса для правильной парсеровки текста: обязательные кавычки в текстовых сообщениях, законченность условий (endif), начало и конец процедур с именами процедур.
интересная идея :)
ОтветитьУдалить