Перейти к содержимому


Фотография

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

библиотека конвертация С++ Lua

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 17

#1 Оффлайн   Larban

Larban
  • Пользователи
  • Сообщений: 25
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 30 Апрель 2015 - 18:21

Доброго всем времени суток
я хотел бы показать вам плод трудов за последние 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: 12 Июль 2015 - 17:53

  • 1Ridav, Totoro, Fingercomp и еще 1 это нравится

#2 Оффлайн   LeshaInc

LeshaInc
  • Пользователи
  • Сообщений: 1 207
  • Уровень сигнала: 15,49%
  • В игре: 117 час. 1 мин.
  • ГородЛуна

Награды

                       

Отправлено 30 Апрель 2015 - 22:40

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



#3 Оффлайн   Larban

Larban
  • Автор темы
  • Пользователи
  • Сообщений: 25
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 30 Апрель 2015 - 23:05

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

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

#4 Оффлайн   KelLiN

KelLiN
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 113,67%
  • В игре: 858 час. 45 мин.

Награды

                       

Отправлено 30 Апрель 2015 - 23:48

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


Сообщение отредактировал KelLiN: 01 Май 2015 - 00:09


#5 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 748
  • Уровень сигнала: 4,82%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 01 Май 2015 - 11:19

А структура
int *a=new int[1000];
...
delete[] a;
Как она у тебя обрабатывается?

#6 Оффлайн   Larban

Larban
  • Автор темы
  • Пользователи
  • Сообщений: 25
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 01 Май 2015 - 11:46

А структура
int *a=new int[1000];
...
delete[] a;
Как она у тебя обрабатывается?

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

Сообщение отредактировал Larban: 01 Май 2015 - 11:47


#7 Оффлайн   Larban

Larban
  • Автор темы
  • Пользователи
  • Сообщений: 25
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 01 Май 2015 - 12:13


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

#8 Оффлайн   KelLiN

KelLiN
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 113,67%
  • В игре: 858 час. 45 мин.

Награды

                       

Отправлено 01 Май 2015 - 13:14

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


  • Totoro это нравится

#9 Оффлайн   Doob

Doob
  • Пользователи
  • Сообщений: 814
  • Уровень сигнала: 19,35%
  • В игре: 146 час. 10 мин.

Награды

                                   

Отправлено 12 Май 2015 - 12:18

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



#10 Оффлайн   Alex

Alex
  • Администраторы
  • Сообщений: 3 743
  • Уровень сигнала: 52%
  • В игре: 392 час. 51 мин.

Награды

                 

Отправлено 12 Май 2015 - 15:55

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

 

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

 

 

 

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

 

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

 

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

 

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


#11 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 748
  • Уровень сигнала: 4,82%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 12 Май 2015 - 22:09

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

#12 Оффлайн   Doob

Doob
  • Пользователи
  • Сообщений: 814
  • Уровень сигнала: 19,35%
  • В игре: 146 час. 10 мин.

Награды

                                   

Отправлено 14 Май 2015 - 11:10

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

 

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


Сообщение отредактировал Doob: 14 Май 2015 - 11:10


#13 Оффлайн   SergOmarov

SergOmarov
  • Пользователи
  • Сообщений: 564
  • Уровень сигнала: 0,34%
  • В игре: 2 час. 36 мин.

Награды

     

Отправлено 18 Июнь 2015 - 13:48

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



#14 Оффлайн   SergOmarov

SergOmarov
  • Пользователи
  • Сообщений: 564
  • Уровень сигнала: 0,34%
  • В игре: 2 час. 36 мин.

Награды

     

Отправлено 08 Июль 2015 - 17:55

Тема актуальна, нет?



#15 Оффлайн   rubinsergei

rubinsergei
  • Пользователи
  • Сообщений: 4
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 13 Март 2016 - 20:44

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



#16 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 735
  • Уровень сигнала: 0,29%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 13 Март 2016 - 20:56

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

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



#17 Оффлайн   ALeXeR

ALeXeR
  • Пользователи
  • Сообщений: 204
  • Уровень сигнала: 33,88%
  • В игре: 255 час. 59 мин.
  • ГородОдесса

Отправлено 16 Март 2016 - 19:10

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

Сообщение отредактировал ALeXeR: 16 Март 2016 - 19:17


#18 Онлайн   eu_tomat

eu_tomat
  • Хранители Кода
  • Сообщений: 880
  • Уровень сигнала: 6,36%
  • В игре: 48 час. 1 мин.

Награды

                          

Отправлено 17 Март 2016 - 17:11

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

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

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





Темы с аналогичным тегами библиотека, конвертация, С++, Lua

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных