Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Создание простейшего компилятора на Delphi

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Создание простейшего компилятора на Delphi
Имя
Сообщение << Старые топики   Новые топики >>
Создание простейшего компилятора на Delphi - 2008-08-10 20:33:44.276666   
DeCoder

Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
Задача такая: нужен пример простейшего(или не очень) компилятора, созданного на Delphi.
 
Собственно столкнулся с проблемой - хочу написать свой мини-язык для программирования робота. Самого робота я собрали научился его программировать на ассемблере, теперь необходимо создать собственный мини-язык для программирования робота(язык написания команд должен быть как русский так и инглиш), включающий в себя распознавание комманд и конвертирование их в код на ассебле.
 
Язык(слово уже приелось, но другого синонима не знаю) должен быть расчитан на ученика средней школы, 5-7класса - это мой проект на окружную НПК(Научно-Практич. конференция).
 
З.Ы. Есть у кого-нить Паскаль с оболочкой реализованной на Делфи(с исходником, естессно)? Т.е. фактически чтоб был переделан интерфейс на "форточный" и к нему были прикреплены стандартные библиотеки и сам компилятор от ТР7.
Post #: 1
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=Написание+компиляторов
Post #: 2
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&amp;q=Написание+компиляторов

Ну на самом деле резковато, в основном на сайтах по этому запросу даётся общее описание компиляторов без примеров или хотя бы приближения к реальному коду, а не к общим концепциям.

Если с английским нормально, можно почитать это. Там пример компилятора языка Оберон, достаточно близкого к Делфи.
Post #: 3
RE: Создание простейшего компилятора на Delphi - 2008-08-11 17:40:15.170000   
DeCoder

Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
А есть не в .pdf варианте? а то Адобе глючит а комп не мой(
Post #: 4
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.
Post #: 5
RE: Создание простейшего компилятора на Delphi - 2008-08-11 18:43:57.013333   
SmanxX1

Сообщений: 208
Оценки: 0
Присоединился: 2007-07-31 14:33:56.650000
DeCoder
А чем тебя скриптовые языки не устраиваю? Возьми тот же LUA, его функционал легко расширить, он достаточно прост и легок в понимании. Ихмо, лучше не изобретать велосипед заново, а использовать уже изобретенный, сыкономя время или потратив его на более нужные вещи. Книжек, статей и документации о LUA полно, но если трудно икать, могу дать тебе все необходимое. )
Post #: 6
RE: Создание простейшего компилятора на Delphi - 2008-08-11 19:24:57.326666   
yTr42

Сообщений: 224
Оценки: 0
Присоединился: 2008-07-06 23:58:53.516666
А язык ЛОГО не пойдет?
Post #: 7
RE: Создание простейшего компилятора на Delphi - 2008-08-11 23:02:28.983333   
VENOM4X

Сообщений: 246
Оценки: 0
Присоединился: 2008-02-18 22:49:08.960000
Для Delphi есть компонент - PascalScript - но я думаю, что это не совсем то, что надо, т.к. в робота виндосовский бинарник не запихаешь… или речь идёт не о прошивке?
К сведению: Вообще-то для контоллеров AVR есть компилер с Си.
Post #: 8
RE: Создание простейшего компилятора на Delphi - 2008-08-12 07:24:54.676666   
DeCoder

Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
Может вы меня не так поняли… В сохранённом .тхт-файле, созданного 5-классником ищутся забитые в память команды(в процессе выполнения этого действия создаётся последовательность запуска различных действий, уже запрограммированых в роботе); полсе этого данне по беспроводному соеинению передаются в робота(я купил робота, когда был в Китае, немного его уовершенствовал(доп. рефлекторы; 4 мини-камеры наблюдени и т.п.); там(в роботе)&nbsp;мне понравилось то, что у него есть беспроводное соединение и USB-приёмник. Он может переключаться&nbsp;в 2х режимай: 1й - в комплекте есть прога, там управление&nbsp;в реальном времени; и 2й - автономный вариант - ты сам его программируешь и он это просто выполняет, вплоть до ИИ), в виде бинарника команды(у всех команд(даже у&nbsp;циклов) есть свой код - прям как организация чата, только там&nbsp;сокеты, а тут&nbsp;другое соединение(я так и не понял какое - всё по-китайски написано=) )); робот принимает команду и выполняет её(если не успевает, команды накапливаются).
 
Так вот: мне просто нужен пример компилятора у которого был бы подсвет синтаксиса, проверка текста и подсветка неправильного при компиляции(хы, компиляции - сохранении в .тхт файле8|) - всё это на Делфи. У мну уже и помощь даже написана и интерфейс сделан и всё работает кроме вышеперечисленного. Просто я не знаю как проверять сохранённый текст. Искать слова в тексте? - тогда получается чушь, если не в 1 строчке - команды выполняются вразброс. Вот я и хочу узнать, как компилируется текст на примере несложного компилятора с исходником..
Post #: 9
RE: Создание простейшего компилятора на Delphi - 2008-08-12 11:35:05.026666   
SmanxX1

Сообщений: 208
Оценки: 0
Присоединился: 2007-07-31 14:33:56.650000
quote:

которого был бы подсвет синтаксиса

Есть компонент SynEdit для делфи, в нем любую подсветку сделать проще простого.

quote:

Вот я и хочу узнать, как компилируется текст на примере несложного компилятора с исходником..

Ну как, как – разбиваеться на блоки и проверяеться, потом транслируеться в нужный вид.
Post #: 10
RE: Создание простейшего компилятора на Delphi - 2008-08-13 06:49:19.420000   
DeCoder

Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
quote:

ORIGINAL: SmanxX1
quote:

Вот я и хочу узнать, как компилируется текст на примере несложного компилятора с исходником..

Ну как, как – разбиваеться на блоки и проверяеться, потом транслируеться в нужный вид.

По какому принципу разбивается? Я прошу о помощи а не о насмешках.
Post #: 11
RE: Создание простейшего компилятора на Delphi - 2008-08-13 14:42:56.680000   
Kolan4iK

Сообщений: 258
Оценки: 0
Присоединился: 2007-09-28 20:23:45.553333
=)
Post #: 12
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 если не ошибаюсь, так вот исходники этого компилятора вроде можно скачать. Поищи..
Post #: 13
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 минуты!)
Post #: 14
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.
Post #: 15
RE: Создание простейшего компилятора на Delphi - 2008-08-13 16:44:33.763333   
DeCoder

Сообщений: 209
Оценки: 0
Присоединился: 2007-10-29 15:09:04.486666
Епрст) Работа не сложная, но шопипдец геморойная=)
Лан, пошел делать8D
Post #: 16
RE: Создание простейшего компилятора на Delphi - 2008-08-13 16:57:53.403333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
А ты думал. Сейчас компиляторописатели (особенно с оптимизацией кода) получают ооочень большие деньги ;).
Post #: 17
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. Но с ними я не работал, поэтому однозначно посоветовать не могу.
Post #: 18
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 месяца(примерно):)
Post #: 19
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;
\\

Вот и все! ну а дельше домодернизируйте сами =)
Post #: 20
RE: Создание простейшего компилятора на Delphi - 2011-01-01 03:34:49.180000   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
Суровый некрофил пограммист.
Post #: 21
RE: Создание простейшего компилятора на Delphi - 2011-01-04 12:58:27.146666   
codeismy.name

Сообщений: 618
Оценки: 0
Присоединился: 2009-07-19 00:30:13.200000
задача на самом деле интересная…
только я бы это назвал и делал бы немного иначе…
я бы делал бы это нечто подобным на парсер кода, как в интерпритируемых языках типа php

кстати сам щас собираю роботика простого (манипулятор) на базе Arduino но буду использовать именно модель парсера кода, как указал выше. хотя вот проверка ошибок действитольно интересно реализована :)

ещё вот что посоветовал бы:
весь код склеивать в одну строку, заменяя \n символы на пробелы, а потом склеить все двойные пробелы, это должно упростить парсинг кода
Post #: 22
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Создание простейшего компилятора на Delphi







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.