Создание простейшего компилятора на Delphi
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Создание простейшего компилятора на Delphi - 2008-08-10 20:33:44.276666
|
|
|
DeCoder
Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
|
Задача такая: нужен пример простейшего(или не очень) компилятора, созданного на Delphi. Собственно столкнулся с проблемой - хочу написать свой мини-язык для программирования робота. Самого робота я собрали научился его программировать на ассемблере, теперь необходимо создать собственный мини-язык для программирования робота(язык написания команд должен быть как русский так и инглиш), включающий в себя распознавание комманд и конвертирование их в код на ассебле. Язык(слово уже приелось, но другого синонима не знаю) должен быть расчитан на ученика средней школы, 5-7класса - это мой проект на окружную НПК(Научно-Практич. конференция). З.Ы. Есть у кого-нить Паскаль с оболочкой реализованной на Делфи(с исходником, естессно)? Т.е. фактически чтоб был переделан интерфейс на "форточный" и к нему были прикреплены стандартные библиотеки и сам компилятор от ТР7.
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-11 13:46:49.626666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Может резковато, но всё-таки: http://www.google.com/search?hl=ru&q=Написание+компиляторов
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-11 15:47:46.953333
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
quote:
ORIGINAL: _SaZ_ Может резковато, но всё-таки: http://www.google.com/search?hl=ru&q=Написание+компиляторов Ну на самом деле резковато, в основном на сайтах по этому запросу даётся общее описание компиляторов без примеров или хотя бы приближения к реальному коду, а не к общим концепциям. Если с английским нормально, можно почитать это. Там пример компилятора языка Оберон, достаточно близкого к Делфи.
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-11 17:40:15.170000
|
|
|
DeCoder
Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
|
А есть не в .pdf варианте? а то Адобе глючит а комп не мой(
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-11 17:48:31.373333
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
http://64.233.169.104/search?q=cache:eG-VX_okn3sJ:www-old.oberon.ethz.ch/WirthPubl/CBEAll.pdf+wirth+oberon+compiler&hl=ru&ct=clnk&cd=1 Кеш гугла, если сможешь читать. Но лучше всё-таки разберись с Адобой и читай в PDF.
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-11 18:43:57.013333
|
|
|
SmanxX1
Сообщений: 208
Оценки: 0
Присоединился: 2007-07-31 14:33:56.650000
|
DeCoder А чем тебя скриптовые языки не устраиваю? Возьми тот же LUA, его функционал легко расширить, он достаточно прост и легок в понимании. Ихмо, лучше не изобретать велосипед заново, а использовать уже изобретенный, сыкономя время или потратив его на более нужные вещи. Книжек, статей и документации о LUA полно, но если трудно икать, могу дать тебе все необходимое. )
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-11 19:24:57.326666
|
|
|
yTr42
Сообщений: 224
Оценки: 0
Присоединился: 2008-07-06 23:58:53.516666
|
А язык ЛОГО не пойдет?
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-11 23:02:28.983333
|
|
|
VENOM4X
Сообщений: 246
Оценки: 0
Присоединился: 2008-02-18 22:49:08.960000
|
Для Delphi есть компонент - PascalScript - но я думаю, что это не совсем то, что надо, т.к. в робота виндосовский бинарник не запихаешь… или речь идёт не о прошивке? К сведению: Вообще-то для контоллеров AVR есть компилер с Си.
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-12 07:24:54.676666
|
|
|
DeCoder
Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
|
Может вы меня не так поняли… В сохранённом .тхт-файле, созданного 5-классником ищутся забитые в память команды(в процессе выполнения этого действия создаётся последовательность запуска различных действий, уже запрограммированых в роботе); полсе этого данне по беспроводному соеинению передаются в робота(я купил робота, когда был в Китае, немного его уовершенствовал(доп. рефлекторы; 4 мини-камеры наблюдени и т.п.); там(в роботе) мне понравилось то, что у него есть беспроводное соединение и USB-приёмник. Он может переключаться в 2х режимай: 1й - в комплекте есть прога, там управление в реальном времени; и 2й - автономный вариант - ты сам его программируешь и он это просто выполняет, вплоть до ИИ), в виде бинарника команды(у всех команд(даже у циклов) есть свой код - прям как организация чата, только там сокеты, а тут другое соединение(я так и не понял какое - всё по-китайски написано=) )); робот принимает команду и выполняет её(если не успевает, команды накапливаются). Так вот: мне просто нужен пример компилятора у которого был бы подсвет синтаксиса, проверка текста и подсветка неправильного при компиляции(хы, компиляции - сохранении в .тхт файле8|) - всё это на Делфи. У мну уже и помощь даже написана и интерфейс сделан и всё работает кроме вышеперечисленного. Просто я не знаю как проверять сохранённый текст. Искать слова в тексте? - тогда получается чушь, если не в 1 строчке - команды выполняются вразброс. Вот я и хочу узнать, как компилируется текст на примере несложного компилятора с исходником..
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-12 11:35:05.026666
|
|
|
SmanxX1
Сообщений: 208
Оценки: 0
Присоединился: 2007-07-31 14:33:56.650000
|
quote:
которого был бы подсвет синтаксиса Есть компонент SynEdit для делфи, в нем любую подсветку сделать проще простого. quote:
Вот я и хочу узнать, как компилируется текст на примере несложного компилятора с исходником.. Ну как, как – разбиваеться на блоки и проверяеться, потом транслируеться в нужный вид.
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-13 06:49:19.420000
|
|
|
DeCoder
Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
|
quote:
ORIGINAL: SmanxX1 quote:
Вот я и хочу узнать, как компилируется текст на примере несложного компилятора с исходником.. Ну как, как – разбиваеться на блоки и проверяеться, потом транслируеться в нужный вид. По какому принципу разбивается? Я прошу о помощи а не о насмешках.
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-13 14:42:56.680000
|
|
|
Kolan4iK
Сообщений: 258
Оценки: 0
Присоединился: 2007-09-28 20:23:45.553333
|
=)
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-13 15:04:45.936666
|
|
|
SmanxX1
Сообщений: 208
Оценки: 0
Присоединился: 2007-07-31 14:33:56.650000
|
quote:
По какому принципу разбивается? Ну об этом можно узнать только продиассамблировав компилятор )) А так, что первое приходит в голову - это нахождение функций/процедур и последующая их проверка и трансляция, т.е. банально ищем слово function, и обрабатываем весь текст идущий за ней до слова end, ну естественно еще проверять конструкции begin/end, т.к. end может быть больше или меньше чем begin и наоборот. quote:
Я прошу о помощи а не о насмешках. А где ты видел "насмешки"? ;) Есть еще такой скриптовый язык, называеться DelphiWebScript если не ошибаюсь, так вот исходники этого компилятора вроде можно скачать. Поищи..
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-13 15:59:14.740000
|
|
|
DeCoder
Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
|
Давно бы так=) quote:
ORIGINAL: SmanxX1 quote:
По какому принципу разбивается? Ну об этом можно узнать только продиассамблировав компилятор )) А так, что первое приходит в голову - это нахождение функций/процедур и последующая их проверка и трансляция, т.е. банально ищем слово function, и обрабатываем весь текст идущий за ней до слова end, ну естественно еще проверять конструкции begin/end, т.к. end может быть больше или меньше чем begin и наоборот. Я так пробовал - оч. долго проверяет(дольше чем должно быть, 40 строк проверял 3 минуты!)
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-13 16:39:24.533333
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
quote:
ORIGINAL: SmanxX1 А так, что первое приходит в голову - это нахождение функций/процедур и последующая их проверка и трансляция, т.е. банально ищем слово function, и обрабатываем весь текст идущий за ней до слова end, ну естественно еще проверять конструкции begin/end, т.к. end может быть больше или меньше чем begin и наоборот. Ну по-хорошему надо строить синтаксическое дерево. Находишь слово unit, создаёшь узел с именем "unit", идёшь дальше, находишь procedure, создаёшь узел с именем "procedure" и делаешь его дочерним узлом узла "unit", и так далее. Точно так же делаешь отдельными узлами условия и циклы. Когда встречаешь end (или until для цикла repeat, например), "закрываешь" этот узел и возвращаешься к предыдущему. При этом проверяешь, может ли текущий узел быть дочерним для узла уровнем выше. Например, если ты встречаешь узел "var", то он должен быть дочерним либо для узла "procedure" ("function"), либо для узла "unit". Если дерево собралось нормально, значит синтаксически программа правильна. Может быть есть способы проще, но при таком варианте ты сразу на выходе получишь абстрактное синтаксическое дерево, а это уже считай front-end настоящего компилятора. Мало ли когда-нибудь захочется продолжить это дело upd. quote:
Я так пробовал - оч. долго проверяет(дольше чем должно быть, 40 строк проверял 3 минуты!) Ну это ты как-то очень криво написал программу. Смотри, где самая большая задержка. Вообще у тебя должен получится обычный парсер. С XML-парсерами знаком? Вот принцип тот же, только < и > нету. И, кстати говоря, синтаксические правила для парсера можно так же выносить в отдельный файл, наподобие dtd-файлов для валидации XML.
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-13 16:44:33.763333
|
|
|
DeCoder
Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
|
Епрст) Работа не сложная, но шопипдец геморойная=) Лан, пошел делать8D
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-13 16:57:53.403333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
А ты думал. Сейчас компиляторописатели (особенно с оптимизацией кода) получают ооочень большие деньги ;).
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-13 17:01:50.403333
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
quote:
ORIGINAL: DeCoder Епрст) Работа не сложная, но шопипдец геморойная=) Лан, пошел делать8D Да ничего сложного на самом деле. Главное грамотно построить синтаксис языка. Посмотри какой-нибудь language report, там обычно в конце приводится синтаксическая схема языка, что-то вроде: quote:
unit ::= 'unit' unitName 'interface' {expression} 'inplementation' {expression} 'end.' unitName ::= ident expression ::= (typeExp | varExp | procExp | funcExp) {expression} … что означает примерно следующее: "unit по определению есть: слово 'unit', за которым следует unitName, затем слово 'interface', затем 0 или больше expression, затем слово 'implementation', снова 0 или больше expression и слово 'end.'. unitName по определению есть ident (идентификатор). expression по определению есть…" Так ты составляешь правила, потом можешь либо сам написать универсальный парсер, который будет проверять исходник на соответствие заданному тобой синтаксису, либо воспользоваться готовым решением - Lex & Yacc. Но с ними я не работал, поэтому однозначно посоветовать не могу.
|
|
|
RE: Создание простейшего компилятора на Delphi - 2008-08-13 17:13:15.540000
|
|
|
DeCoder
Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
|
Лан ребят, спасибо за помощь! [sm=em62.gif] - kreol - отдельное спасибо.[sm=dont.gif] З.Ы. УУУ надеюсь, йа выживу и останусь в трезвом уме и твёрдой памяти[sm=em88.gif] Не поминайте нахом ближайшие 2 месяца(примерно):)
|
|
|
RE: Создание простейшего компилятора на Delphi - 2011-01-01 02:59:53.093333
|
|
|
L$peed
Сообщений: 1
Оценки: 0
Присоединился: 2011-01-01 02:51:51.466666
|
Незнаю как начсет своего компилятора…но вот как компилировать код delphi я знаю! я его напишу…а доводить до совершенства…я думаю ваша задача // procedure TForm1.Button1Click(Sender: TObject); begin AssignFile(filen,'имя(путь) создаваемого файла (расширение *.dpr)'); #создаем файл с расширением *.dpr) rewrite(filen); #открываем для записи writeln(filen,'{$APPTYPE CONSOLE}'); writeln(filen,'uses SysUtils;'); writeln(filen,memo1.text); #запись предыдущих очень важно! + то поле, в котором есть текст программы (на pascal) closefile(filen); #закрываем файл SHellExecute(handle,'open','cmd.exe',pchar('/k dcc32.exe -e Путь к созданному файлу'),'C:\Windows\system32',SW_SHOW); end; \\ Вот и все! ну а дельше домодернизируйте сами =)
|
|
|
RE: Создание простейшего компилятора на Delphi - 2011-01-01 03:34:49.180000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
Суровый некрофил пограммист.
|
|
|
RE: Создание простейшего компилятора на Delphi - 2011-01-04 12:58:27.146666
|
|
|
codeismy.name
Сообщений: 618
Оценки: 0
Присоединился: 2009-07-19 00:30:13.200000
|
задача на самом деле интересная… только я бы это назвал и делал бы немного иначе… я бы делал бы это нечто подобным на парсер кода, как в интерпритируемых языках типа php кстати сам щас собираю роботика простого (манипулятор) на базе Arduino но буду использовать именно модель парсера кода, как указал выше. хотя вот проверка ошибок действитольно интересно реализована :) ещё вот что посоветовал бы: весь код склеивать в одну строку, заменяя \n символы на пробелы, а потом склеить все двойные пробелы, это должно упростить парсинг кода
|
|
|
|
|