Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
AndreyMironenko
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 6
#1

Компиляция заданного кода в exe через программу - C++

07.03.2013, 12:43. Просмотров 824. Ответов 16
Метки нет (Все метки)

Хочу узнать поподробнее, как реализовать компиляцию некого заданного кода в exe для windows через самописную программу. Ведь как-то писали компиляторы для других ЯП-ов.
Например, есть код (предположим, паскалеподобный):
Pascal
1
2
3
begin
print'HELLO!'
exit
Мне нужно, чтобы через мою прогу он переводился (компилировался) в exe-файл, который запускался бы через windows и выполнял то, что написано в коде.
Мне важен сам принцип создания exe через программу.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
07.03.2013, 12:46     Компиляция заданного кода в exe через программу #2
Цитата Сообщение от AndreyMironenko Посмотреть сообщение
Мне нужно, чтобы через мою прогу он переводился (компилировался) в exe-файл, который запускался бы через windows и выполнял то, что написано в коде.
а почему тебе так принципиально его компилировать в exe?
чем тебя интерпретатор не устраивает?
AndreyMironenko
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 6
07.03.2013, 12:48  [ТС]     Компиляция заданного кода в exe через программу #3
Тем, что для работы нужен интерпретатор. А так - всё компилиуется и запускается где угодно.

Спрашиваю больше для самообразования, но и попытаться реализовать тоже интересно.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
07.03.2013, 12:55     Компиляция заданного кода в exe через программу #4
Цитата Сообщение от AndreyMironenko Посмотреть сообщение
Тем, что для работы нужен интерпретатор. А так - всё компилиуется и запускается где угодно.
А какая разница?
а так для работы нужен компилятор.
иначе смысл преобразовывать какой-то текст программы, если можно на своём компе её на си написать и вручить кому хочешь уже экзешник.
AndreyMironenko
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 6
07.03.2013, 12:59  [ТС]     Компиляция заданного кода в exe через программу #5
Я же говорю, мне просто интересно, как это реализовать. Если не знаешь, можешь не писать.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
07.03.2013, 13:09     Компиляция заданного кода в exe через программу #6
Цитата Сообщение от AndreyMironenko Посмотреть сообщение
Я же говорю, мне просто интересно, как это реализовать. Если не знаешь, можешь не писать.
Ясно. Тогда иди читай Dragon Book
http://www.amazon.com/dp/0321486811/...ackoverfl08-20
А в форумном сообщении про написание компиляторов тебе много не расскажут.
AndreyMironenko
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 6
07.03.2013, 14:12  [ТС]     Компиляция заданного кода в exe через программу #7
Интересно. Найду ещё что-нибудь в инете. Спасибо.
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,064
Записей в блоге: 3
Завершенные тесты: 1
07.03.2013, 14:17     Компиляция заданного кода в exe через программу #8
Транслируйте код в ассемблер и запускайте ассемблер.
XRuZzz
Антикодер
659 / 560 / 27
Регистрация: 15.09.2012
Сообщений: 2,511
07.03.2013, 14:20     Компиляция заданного кода в exe через программу #9
я не эксперт по компиляторам, но думаю вам этот код
Код
begin
print'HELLO!'
exit
для начала нужно перекодировать в ассемблер.
но begin - exit лучше заменить на {} ведь они короче или на /* */ тогда комментарии в C++ можно интерпретировать как программу( я не говорю, что так нужно сделать, но может на этой идее у вас появится более продвинутая идея)

после перекодирования в ассемблер стоит использовать готовый компилятор для ассемблера.

ещё нужно изучить регулярные выражения, без них очень сложно будет понять, как разобрать строку на операторы, переменные и прочее
AndreyMironenko
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 6
07.03.2013, 14:22  [ТС]     Компиляция заданного кода в exe через программу #10
Croessmah, я не понял тебя, что ты сказал? В смысле транслировать в компилятор ассемблера?

Добавлено через 57 секунд
Цитата Сообщение от XRuZzz Посмотреть сообщение
я не эксперт по компиляторам, но думаю вам этот код
Код
begin
print'HELLO!'
exit
для начала нужно перекодировать в ассемблер.
но begin - exit лучше заменить на {} ведь они короче или на /* */ тогда комментарии в C++ можно интерпретировать как программу( я не говорю, что так нужно сделать, но может на этой идее у вас появится более продвинутая идея)

после перекодирования в ассемблер стоит использовать готовый компилятор для ассемблера.
Мне нужен свой компилятор, а не компилятор ассемблера.
XRuZzz
Антикодер
659 / 560 / 27
Регистрация: 15.09.2012
Сообщений: 2,511
07.03.2013, 14:34     Компиляция заданного кода в exe через программу #11
Вам нужно почитать основы о том как работает процессор. Если вы хотите сразу транслировать в машинный код никто не мешает. Но ассемблерные команды позволяют работать с машинным кодом более просто.
после компиляции у вас будет бинарный файл, который можно легко транслировать в ассемблер.

то есть ассемблер предназначен для того чтобы генерировать такие бинарные файлы более простым способом.

То есть алгоритм такой
читаем строку 1 - пусто
читаем строку 2 - begin
проверяем есть ли в строке ключевые слова вашего языка
C++
1
2
3
4
5
6
7
8
9
10
11
12
switch (keyword)
{
case 'begin':
пишем в файл asm код ассемблера для начала программы
break;
case 'exit':
как бы begin- а ещё не было выдаём сообщение об ошибке
(если был пишем в файл asm код ассемблера для конца программы)
break;
case 'print':
проверяем что после print и если всё верно оформлено , то пишем в файл asm вывод на экран на ассемблере
}
далее аналогично вызываем функцию в которой находится switch
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 443
07.03.2013, 14:39     Компиляция заданного кода в exe через программу #12
Цитата Сообщение от AndreyMironenko Посмотреть сообщение
нужно, чтобы через мою прогу он переводился (компилировался) в exe-файл, который запускался бы через windows и выполнял то, что написано в коде
Можно компилировать в байткод под .NET, должно быть куда проще и готовых инструментов под это больше. На выходе будет готовый exe-файл.
XRuZzz
Антикодер
659 / 560 / 27
Регистрация: 15.09.2012
Сообщений: 2,511
07.03.2013, 15:00     Компиляция заданного кода в exe через программу #13
если у вас возникают такие вопросы то начинать нужно с Литература C++ раздел "Основы программирования и синтаксис языка"
там представлены достойные книги, которые быстро приведут вас к цели

ну и посмотрите советы по книгам в разделе форума про ассемблер. (у каждого типа процессора свой ассемблер)

Добавлено через 9 минут
ну и по традиции дам ссылки на вики
Машинный код
Ассемблер_(язык_программирования)
Компилятор

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

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

Не по теме:


под каждым сообщением есть волшебная кнопка "Спасибо"

Tolias28
205 / 120 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
07.03.2013, 15:05     Компиляция заданного кода в exe через программу #14
Цитата Сообщение от kamre Посмотреть сообщение
Можно компилировать в байткод под .NET, должно быть куда проще и готовых инструментов под это больше
Кстати да. Если для вас сам язык не принципиален, а нужно лишь получать из кода(любого языка программирвоания) говотовый exe-файл, тогда посмотрите в сторону .NET-языков, например C#. Там есть встроенные средства для компиляции исходного кода программы. Вот пример:
C#
1
2
3
4
5
6
CSharpCodeProvider csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v4.0" } }); //Указываем версию .NET Framework компилируемой программы
string[] assemblyNames = new[] { "mscorlib.dll", "System.Core.dll", "System.Runtime.Serialization.dll" }; //Указываем нужные dll, которые используются в программе
CompilerParameters parameters = new CompilerParameters(assemblyNames, "MeCompiledProgram.exe", false); //во втором параметре имя программы
parameters.GenerateExecutable = true; //указываем, что нам нужно скомпилировать экзешник, а не DLL-файл
CompilerResults results = csc.CompileAssemblyFromSource(parameters, code); //сама компиляция. В переменной code должен присутствовать код, из которого скомпилируется программа
List<CompilerError> listOfErrors = results.Errors.Cast<CompilerError>().ToList(); //если в коде присутствовали ошибки, тогда мы их здесь получим в списке listOfErrors
и все! Всего несколько строк позволяют создать такой же exe-файл, как это делает при компиляции Visual Studio
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2013, 15:22     Компиляция заданного кода в exe через программу
Еще ссылки по теме:
Компиляция кода... не могу сообразить. C++
C++ Компиляция в командной строке (cl.exe) под платформы Windows XP и выше
C++ Компиляция исходного кода в работающей программе
C++ Компиляция кода Source Engine 2013
Компиляция простейшего кода на C++ под GNU/Linux C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
XRuZzz
07.03.2013, 15:22     Компиляция заданного кода в exe через программу
  #15

Не по теме:

Цитата Сообщение от Tolias28 Посмотреть сообщение
и все! Всего несколько строк позволяют создать такой же exe-файл, как это делает при компиляции Visual Studio
помоему это мнимая легкость

Yandex
Объявления
07.03.2013, 15:22     Компиляция заданного кода в exe через программу
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru