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

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

User

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

grigsoft

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

User

#3
Возможно я не правильно выразился : есть допустим 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
 

grigsoft

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

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

User

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

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

User

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

grigsoft

Well-known member
15.11.2005
735
0
#7
по 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

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

User

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

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

grigsoft

Well-known member
15.11.2005
735
0
#10
Так компилятор же ты писать будешь - ты сам и назначишь :(
А код закладывается в ресурсы, см. UpdateResource кажется.
 
Статус
Закрыто для дальнейших ответов.