Перейти к публикации
Форум - ComputerCraft
Larban

Библиотека для конвертирования кода C++ в Lua

Рекомендованные сообщения

Доброго всем времени суток
я хотел бы показать вам плод трудов за последние 3 дня (если считать именно время потраченное на разработку я справился за день)
библиотека поможет всем тем кому lua показался "неудобным"
библиотека конвертирует код c++ в lua
например вот программка
 

#include <iostream>
#include <string>
int main()
{
std::string str;
std::cout << "Hello" << " " << "user" << "!" << "\n";
std::cin >> str;
if(str == "hello"){
std::cout << ":)";
}elseif(str == "hi"){
std::cout << ":) hi";
}else{
std::cout << ":( bye";
}
std::cin >> str;
return 0;
}

 
прекрасно выполняется в visual studio 2010 (если добавить в начало: #include "stdafx.h")
и превращается в:
 

io = require("io")
string = require("string")
function main()

 str = ""
io.write("" .. "Hello" .. " " .. "user" .. "!" .. "\n")
 str = io.read();
if str == "hello" then
io.write("" .. ":)")
elseif str == "hi" then
io.write("" .. ":) hi")
 else 
io.write("" .. ":( bye")
 end 
 str = io.read();
return 0;
 end 
main()

не очень красивый Lua код больше смахивает на C++ (но тем не менее работает так-же как и в Visual Studio 2010)
так-же если вы введете например "#include <MyClassList.h>"
то вместо этой строки получите все содержимое файла "/lib/CpplLibs/MyClassList.h" (в том файле должен быть именно lua код)

пример использования:

Cppl = require("Cppl")
Cppl.convert("путь к файлу с программой c++","флаги как в шелл"[,"если есть флаг -tofile вводим сюда путь к файлу для сохранения"])

--возможные флаги
--"-noprint" не печатать программу на монитор
--"-tofile" записать программу в файл
--"-printlog" разпечатать логи на монитор
--"-returnlog" вернуть логи
--флаги разделяются пробелом, в конце всех флагов поставте дополнительный пробел: "-noprint " ,"-noprint -returnlog ","-noprint -returnlog -tofile "

log = Cppl.convert("program.cpp","-noprint -returnlog -tofile ","program.lua") --конвертировать и записать в файл и вернуть логи

program,log = Cppl.convert("program.cpp","-noprint -returnlog ") --конвертировать и вернуть программу с логами

program = Cppl.convert("program.cpp","-noprint ")--конвертировать и вернуть программу

program = Cppl.convert("program.cpp","-noprint -printlog ")--конвертировать и вернуть программу и напечатать логи на монитор

int x,y,z = 1024;--работает
int x = 10;--работает не забываем про ";" иначе обявление переменной не будет конвертирована
int *a=new int[1000]; --работает
delete x,y,z;--работает
array arr; --так обявляется массив чего либо
%lua: --не конвертировать все после ":" до конца строки
%lua* --не конвертировать пока не будет найдена строка: "*lua%"
%lua: %lua* *lua% --это нужно писать в начале строки сами эти надписи стираются

не буду тянуть кота за ... в долгий ящик

pastebin.com uJUrPSQw

буду рад любой (желательно обоснованной) критике
в будущем доратобаю будет поддерживать все стандартные с++ библиотеки
чуть не забыл конструкцию else if нужно писать слитно иначе придется допиливать код вручную

Изменено пользователем Larban
  • Like 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Один вопрос... Зачем? Зачем C++ конвертировать в Lua, это же полный бред. Lua - встраиваемый язык, он встраивается в такие языки как C, C#, C++ и другие. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Один вопрос... Зачем? Зачем C++ конвертировать в Lua, это же полный бред. Lua - встраиваемый язык, он встраивается в такие языки как C, C#, C++ и другие.

ответ: некие игроки (например null если не ошибаюсь) жаловался на синтаксис lua видимо ему было не удобно без фигурных и круглых скобок

вот я и написал конвертер c++ в lua

там ведь сразу тебе и фигурные плюшки и классы и минимальная реализация собственных классов и все что только хочешь

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а меня после Tcl бесит, что аргументы функциям нужно передавать через (). набираешь print, потом (), потом стрелку влево, "" и только затем текст...И фигурные скобочки это наше всё. do end это пережитки прошлого века.
Для чего нужно ? Синтаксис Lua в общем то унаследован от древних языков. Я не прочь использовать что-нибудь по приятнее. Даже свой конвертер думаю навоять, но в игре пишу меньше времени чем уйдёт на написание конвертера.
В идеале разобраться бы с вирт машиной и надобавлять бы туда других языков.

Изменено пользователем KelLiN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А структура

int *a=new int[1000];

...

delete[] a;

Как она у тебя обрабатывается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А структура

int *a=new int[1000];

...

delete[] a;

Как она у тебя обрабатывается?

извини пока никак я с++ еще изучаю и в книге я до этого места еще не дошел

напиши чего еще не хватает я добавлю

Изменено пользователем Larban

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

так не приятно когда все готово релиз а потом находишь ошибки которые раньше не находил :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это в порядке вещей. Нет ничего идеального.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще бы библиотеку python>lua и lua>python, а то питон популярный, на нем больше реализовано алгоритмов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Один вопрос... Зачем? Зачем C++ конвертировать в Lua, это же полный бред. Lua - встраиваемый язык, он встраивается в такие языки как C, C#, C++ и другие. 

 

Люди любят трудности, но часто переоценивают свои возможности :)

 

 

 

Еще бы библиотеку python>lua и lua>python, а то питон популярный, на нем больше реализовано алгоритмов.

 

Да это же утопия, наверно, всякие конвертеры  для языков программирования, разве нет?

 

Может какой-то кусочек простенький и можно чего-то как-то транслировать, может он даже будет восприниматься компилятором, но код что они дадут на выходе может оказаться не только не оптимальным, но и малопонятным. 

 

Вот было бы здорово !
Выучил один язык, обзавелся "конверторами" и пишу в резюме: "Владею Delphi, C, C++, Java, ...  и т.д. и т.п." :facepalm: 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Зачем программированием заниматься если лень изучать его ей богу не понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Зачем программированием заниматься если лень изучать его ей богу не понятно.

 

Просто когда-то интересно было изучать что-то новое, а сейчас нет. Я уже начал забывать многие языки типа паскаля и бейсика. Лучше знать что-то одно. Если перевести все стандартные ритона библиотеки на луа, то будет полная совместимость, конечно будут спавнится костыли при трансляции, но и с высокого на низкий уровень трансляция тоже корявая идет.

Изменено пользователем Doob

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Щас попытался открыть код на pastebin, пишет, что удален. Где взять теперь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На самом деле годно довольно таки. Допустим, мне сложно перестроиться с С++ на lua и этот конвентор просто находка для мнея. Жаль, что раньше я эту темку не увидел

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

IMHO, лучше перестроиться с С++ на Луа, и пользоваться всей мощью этого языка,

чем вложить аналогичное (если не большее) количество усилий в освоение сего велосипеда, и последующей борьбы с его граблями.

  • Like 5

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Втпринцепе для любителей си-подобных синтаксисов конвертор из си-подобного в луа синтаксис будет кстати, но не самого же с++, так как во первых у с++ есть возможность произвольной адресации, а во вторых в полюсах напроч отсутствует все упрощающие жизнь абстракции ( например автоматическая подстановка приметивов типов данных). Вообще было бы не плохо чтоб если в ОС на полюсах кодинг производился бы, но это бы сильно повлияло бы на сложность мода, так как пришлось бы писать на java разделитель потоков, а так как java имеет больший уровень абстракции чем с++ пришлось бы писать ещё один уровень абстракции, это бы повлияло на производительность сервера, причём в плохом смысле этого слова, так что юзаем луа)

Изменено пользователем ALeXeR

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

IMHO, лучше перестроиться с С++ на Луа, и пользоваться всей мощью этого языка, чем вложить аналогичное (если не большее) количество усилий в освоение сего велосипеда, и последующей борьбы с его граблями.

Золотые слова, полностью согласен с Totoro.

 

Языки Lua и С++ слишком разные для сколь-нибудь эффективной трансляции кода из одного в другой. Пользование подобным транслятором убьет все преимущества Lua. Я тоже не сразу разглядел эти преимущества, а год назад синтаксис Lua меня вообще расстраивал, но совсем недавно, освободившись от диктата C++ я стал относиться к Lua уважительно. Этому, конечно, сильно способствовало изучение Python – мощного скриптового языка, но и Lua тоже очень неплох. Вывод, который я сделал для себя: если планируешь долго пользоваться языком – хорошенько изучи его синтаксис и овладей новыми приёмами – это станет отличным вложением времени.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×