• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Свой компилятор

  • Автор темы User
  • Дата начала
Статус
Закрыто для дальнейших ответов.
U

User

Подскажите как можно сделать свой редактор. Я хочу чтоб он компилил мой скриптовый язык и занимал мало места (до 20 мб) . Но наверно, чтоб он создавал *.exe нужно основать его например на mingw или gcc, чтоб написаный скриптовый код в редакторе переводился в код с++ и подавался как параметр на запуск компилятору, а тот создаст *.exe. Но я не разбираюсь в этих компиляторах, их столько: gcc, g++, mingw32-c++, mingw32-g++, mingw32-gcc что я запутался. Подскажите какой лучше и как это все сделать?. И как можно сделать чтоб редактор запускал компилятор с параметром, или это делается не так?. В общем кто разбирается помогите пожалуйста.
 
G

grigsoft

Правильный вопрос - а нафига зачем? Если ты не имешь понятия ни об одной области (редактор, синтаксис, компиляция, наконец, генерация exe), то может тебе надо не это? Какая задача изначально стоит? Если ты под Win, пишешь, может хватит для твоей задачи WSH\VBScript\JavaScript? Или наоборот, просто на C++ писать и подобрать компилятор, который можно распространять? Знаю, например, коммерческую систему в которой в качестве скриптового языка используется С, все скрипты компилятся в длл, и дергаются оттуда функции в качестве плагинов. Какая задача была?
 
U

User

Возможно я не правильно выразился : есть допустим DLL (или lib) с моим движком, я хочу чтоб из этого IDE можно было вызывать функции моего движка, что потом оно могло скомпилить в exe. Желательно чтоб exe потом не обращалось к этой DLL при запуске. Здесь вся соль в том, чтоб в редакторе не писался код С\С++, а сразу функции моего движка. Тоесть никаких include, using namespace std, main() итд, а синтаксис движка (допустим я хочу чтоб не ставилась точка с запятой, а эти выражения отделялись одной строчкой; приложение могло начинатся чтото типа команды CreateWindow() итп).

1) Идеально бы было если б было только IDE, компилятор (моего движка) со своей DLL, и линковщик со своей DLL. Но боюсь написать компилятор грубо говоря своего языка будет очень тяжело, потому что наверное придется иметь дело с асем., которого я не знаю.
2) Потому возможно самый простой вариант написать exe которой IDE будет передавать написаный в нем код, та будет переделывать его в код С++ и передавать компилятору С++ . Но я не знаю куда спрятать *.h файлы и *.lib файлы, чтоб их никто не видел, иначе украдут движок еще.

Очень похожая вещь на пункт 1) Blitz3D если кто слышал
Наверное похоже на пункт 2) BlitzMax
 
G

grigsoft

Об этом я и говорю, те варианты, которые ты предлагаешь - это твое видение путей решения проблемы, о которой ты не говоришь. Если тебе надо сделать что-то наподобие среды Blitz, то я бы отметил следующее -
1. Нормальный путь, с собственным языком и компиляцией в ехе тебе не осилить в разумные сроки.
2. Если тебе очень неймется придумать свой язык - то можно сделать компиляцию в промежуточный код (любая книга по основам компиляторов тебе в помощь). Также приготовить исполняемый файл, который берет твой промежуточный код из ресурсов и выполняет его. Линковщик твой в результате будет просто укладывать код в ресурсы готового экзешника.
3. Наконец, я бы остановился на любом известном языке с бесплатным компилятором, написал бы его расширение и на этом расширении дал бы пользователю писать. Там без проблем делается все - например на С++ прячутся стандартные include (перед компиляцией просто добавляется стандартный хидер к файлу), main тоже используется стандартный типа
Код:
int main(...)
{
Initialize();
CreateWindow();
Finalize();
}
Тогда пользователь может начинать программу с CreateWindow().

Впрочем, если тебе нужна будет отладка, вариант 2 будет более подходящим и простым в исполнении.
 
U

User

Обьясни немного поподробней 2 пункт, если я правильно понял в BlitzMax реализован именно он, потому что *.exe там получаются размером от 2 мб, что не сильно приятно. Причем я даже понятия не имею как его реализовывать.
Интересен 3 пункт, но здесь непонятны 2 вещи:
- фукции Initialize(); CreateWindow(); Finalize(); пользователь потом будет описывать сам ? Но тогда ему придется писать :
void Initialize() {
bla-bla-bla.....
........
.......
} так же само и с остальными функциями, что не очень красиво.

- и если я возьму обычный компилятор с IDE там будут всякие папки lib, include где я по сути и должен хранить мой движок (я не хочу чтоб он был на виду), и тогда любой пользователь будет пополнять мой компилятор различными библиотеками под С\С++ и будет вызывать от туда функции, причем ему не составит труда вынуть статическую библиотеку моего движка с *.h файлами и просто неренести на обычный С\С++ компилятор.
Пополнение это не плохо, я хочу это реализовать, но чтоб они были моего производства, и пополнял я как бы плагинами.
Тут нужно чтоб мой движок и все пополнения были в каком нибудь неизвесном формате.
 
U

User

Кстати, а как сделано в GameMaker, там ведь ни компилятора ни DLL только ехе самого GameMaker, файлы без расширения, и файлы .lib .
От это тоже очень класный вариант бы был.
Если нету GameMaker скачай www.gamemaker.nl
 
G

grigsoft

по 2.
Есть твоя программа на твоем языке, например:
Код:
CreateWindow 100, 100 // размер
Rectangle 0,0-99,99, BLACK // рисуем границу поля
Твой компилятор превращает ее в такой код:
Код:
0 100 100
1 0 0 99 99 0
Как превращает - читай книжки умные.
Далее этот компактный код кладется в ресурсы заготовленного исполняемого файла. Этот файл при выполнении смотрит свои ресурсы и выполняет программу:
Код:
switch (code)
{
case 0: // CreateWindow
CreateWindow(nParam1, nParam);
break;
case 1: // Rectangle
DrawRectangle(nParam1, ....);
break;
case 2: // Cicrle
DrawCircle(...);
break;
....
}
И так далее.
 
D

drSchur

А зачем?
Создание компилятора - задача далеко не тривиальная. Сперва определитесь с техническими спецификациями. И потом, среди существующих продуктов неужели нет такого, который вам подойдёт?
Есть такая книжка: "Компиляторы: принципы, технологии и инструменты", авторы Альфред Ахо, Рави Сети и Джеффри Ульман
 
U

User

Хорошо, допустим exe я сделаю, но как мне заложить в него код? этот exe будет принимать его как параметр при запуске ? И потом самим становится ехе нужной мне изначально ?

И к стати, как мне узнать какую функцию компилятор обозначил какой цифрой ?
 
G

grigsoft

Так компилятор же ты писать будешь - ты сам и назначишь :(
А код закладывается в ресурсы, см. UpdateResource кажется.
 
P

pushkin

Предлагаю жителям форума заняться созданием нашего национального компилятора по мотивам синтаксиса следующего йезыка:


:)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!