Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 6
1

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

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

Author24 — интернет-сервис помощи студентам
Хочу узнать поподробнее, как реализовать компиляцию некого заданного кода в exe для windows через самописную программу. Ведь как-то писали компиляторы для других ЯП-ов.
Например, есть код (предположим, паскалеподобный):
Pascal
1
2
3
begin
print'HELLO!'
exit
Мне нужно, чтобы через мою прогу он переводился (компилировался) в exe-файл, который запускался бы через windows и выполнял то, что написано в коде.
Мне важен сам принцип создания exe через программу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2013, 12:43
Ответы с готовыми решениями:

Загрузка исходного кода и компиляция *.exe
Помогите разобраться как в Visual Studio 2010 загрузить исходный код для компиляции программы?

Компиляция библиотеки через make.exe
Скачал исходный код библиотеки oglft-0.9, скачал make-3.81.exe, не могу понять как скомпилировать,...

Компиляция C++ кода через консоль
Есть простенький код: #include <iostream> #include <vector> int main(int argc, char *argv){...

Создание exe (компиляция) через программу
Всем привет. Возможно я не так что-то вводил в поиске, но ничего на эту тему я не нашел. Нужно...

16
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,494
Записей в блоге: 1
07.03.2013, 12:46 2
Цитата Сообщение от AndreyMironenko Посмотреть сообщение
Мне нужно, чтобы через мою прогу он переводился (компилировался) в exe-файл, который запускался бы через windows и выполнял то, что написано в коде.
а почему тебе так принципиально его компилировать в exe?
чем тебя интерпретатор не устраивает?
0
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 6
07.03.2013, 12:48  [ТС] 3
Тем, что для работы нужен интерпретатор. А так - всё компилиуется и запускается где угодно.

Спрашиваю больше для самообразования, но и попытаться реализовать тоже интересно.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,494
Записей в блоге: 1
07.03.2013, 12:55 4
Цитата Сообщение от AndreyMironenko Посмотреть сообщение
Тем, что для работы нужен интерпретатор. А так - всё компилиуется и запускается где угодно.
А какая разница?
а так для работы нужен компилятор.
иначе смысл преобразовывать какой-то текст программы, если можно на своём компе её на си написать и вручить кому хочешь уже экзешник.
0
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 6
07.03.2013, 12:59  [ТС] 5
Я же говорю, мне просто интересно, как это реализовать. Если не знаешь, можешь не писать.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,494
Записей в блоге: 1
07.03.2013, 13:09 6
Цитата Сообщение от AndreyMironenko Посмотреть сообщение
Я же говорю, мне просто интересно, как это реализовать. Если не знаешь, можешь не писать.
Ясно. Тогда иди читай Dragon Book
http://www.amazon.com/dp/03214... verfl08-20
А в форумном сообщении про написание компиляторов тебе много не расскажут.
1
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 6
07.03.2013, 14:12  [ТС] 7
Интересно. Найду ещё что-нибудь в инете. Спасибо.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
07.03.2013, 14:17 8
Транслируйте код в ассемблер и запускайте ассемблер.
0
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
07.03.2013, 14:20 9
я не эксперт по компиляторам, но думаю вам этот код
Код
begin
print'HELLO!'
exit
для начала нужно перекодировать в ассемблер.
но begin - exit лучше заменить на {} ведь они короче или на /* */ тогда комментарии в C++ можно интерпретировать как программу( я не говорю, что так нужно сделать, но может на этой идее у вас появится более продвинутая идея)

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

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

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

после перекодирования в ассемблер стоит использовать готовый компилятор для ассемблера.
Мне нужен свой компилятор, а не компилятор ассемблера.
0
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
07.03.2013, 14:34 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
0
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
07.03.2013, 14:39 12
Цитата Сообщение от AndreyMironenko Посмотреть сообщение
нужно, чтобы через мою прогу он переводился (компилировался) в exe-файл, который запускался бы через windows и выполнял то, что написано в коде
Можно компилировать в байткод под .NET, должно быть куда проще и готовых инструментов под это больше. На выходе будет готовый exe-файл.
0
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
07.03.2013, 15:00 13
если у вас возникают такие вопросы то начинать нужно с Литература C++ раздел "Основы программирования и синтаксис языка"
там представлены достойные книги, которые быстро приведут вас к цели

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

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

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

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

Не по теме:


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

0
213 / 137 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
07.03.2013, 15:05 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
0
XRuZzz
07.03.2013, 15:22
  #15

Не по теме:

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

0
213 / 137 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
07.03.2013, 15:32 16
Цитата Сообщение от XRuZzz Посмотреть сообщение
помоему это мнимая легкость
почему так считаете?

Добавлено через 8 минут
По вашему, легче изучить ассемблер, принцип работы процессора, регулярные выражения и много много другого - это легче??
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
07.03.2013, 15:47 17
ТС вообще хочет что-то вроде своего языка, поэтому полюбому придется учить.

Первым делом разработайте сам язык.
Потом пишите синтаксичаский анализатор, далее по нарастающей.
0
07.03.2013, 15:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2013, 15:47
Помогаю со студенческими работами здесь

Компиляция exe из кода
У меня есть некий заранее подготовленный код на c# который мне надо скомпилировать в exe...

Компиляция C# кода в .exe
Здравствуйте, форумчане. Я новичок в C# и у меня возникла следущая проблема: у меня не получается...

Error 1001 или Компиляция кода в .exe приложение
Первый файл кода(TestApp.cs) using System; class TestApp { static void Main() {...

Компиляция java в exe через консоль linux
Здравствуйте. Есть необходимость компилировать java в exe программу (используя программу на подобии...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru