Компиллятор
Заранее благодарен!
Скажите как создать простейший компиллятор на borland pascal 7.0?
Заранее благодарен!
Если позволяет уровень - смотри исходники freepascal'я
Если позволяет уровень - смотри исходники freepascal'я
Нужно простое.
Как например програмно создать консольную exe-шку
В которой будет задан определенный код?(например вывод строки на экран)
Нужно простое.
Как например програмно создать консольную exe-шку
В которой будет задан определенный код?(например вывод строки на экран)
Сначала определись с ОС и форматом исполняемых файлов
Сначала определись с ОС и форматом исполняемых файлов
ОС - DOS (На паскале ж надо!)
Формат - exe или com
ОС - DOS (На паскале ж надо!)
Формат - exe или com
Читай маны по форматам фпайлов.
И компилятор ты...хы-хы .. замахнулся -то не слабо.
Хоть задумал-бы транслято с языка на язык.
И кстати сразу готовый экзешник некто не лепит. Сначала работает компилятор - он создает объектные файлы, а затем они (объектные файлы , в том числе библеотечные) линкуются линкером. И здеся наконец вылезает .exe. И все ето для того, что бы ты смог один кусок(модуль) написать например на Pase, а некоторые фукции, требующие оптимизации на asme, например.
Ты это сам придумал?
Читай маны по форматам фпайлов.
И компилятор ты...хы-хы .. замахнулся -то не слабо.
Хоть задумал-бы транслято с языка на язык.
И кстати сразу готовый экзешник некто не лепит. Сначала работает компилятор - он создает объектные файлы, а затем они (объектные файлы , в том числе библеотечные) линкуются линкером. И здеся наконец вылезает .exe. И все ето для того, что бы ты смог один кусок(модуль) написать например на Pase, а некоторые фукции, требующие оптимизации на asme, например.
Ты это сам придумал?
Ладно! Если ты такой умный, то приведи примерчик или дай ссылочку!
Создать компилятр АСМ.
Или высокого языка программирования из Паскаль в ASM.
Это две различные задачи. Хотя в них есть общее.
Если для первого тебе понадобиться изучить формат OBJ или EXE(NE или MZ) и мануэл от Intel.
То для второго тебе понадобиться больше усилий по написанию. Ты должен будешь заняться кодо генерацией и лексический анализатор усложнится.
Возможно стоит обратить внимание на генераторы компиляторов.
Лично я поставил перед собой цель научиться писать компиляторы. Не быстро написать. А писать хорошо и самому.
Ладно! Если ты такой умный, то приведи примерчик или дай ссылочку!
Советую прочитать Книгу дракона. "Альфред Ахо,Рави Сети,Джеффри Ульман Компиляторы.djvu"
Также в сети можно найти сайт посвещенный студенчиским компилятором.
Формат - exe или com
Это не связанно. Ты можешь написать компилятор который бы компилировал и для виндоуса в exe(PE)
COM - это самый простой формат. Чисто машинный код и все.
А что понимается под компилятором?
Создать компилятр АСМ.
Или высокого языка программирования из Паскаль в ASM.
Это две различные задачи. Хотя в них есть общее.
Если для первого тебе понадобиться изучить формат OBJ или EXE(NE или MZ) и мануэл от Intel.
То для второго тебе понадобиться больше усилий по написанию. Ты должен будешь заняться кодо генерацией и лексический анализатор усложнится.
Возможно стоит обратить внимание на генераторы компиляторов.
Лично я поставил перед собой цель научиться писать компиляторы. Не быстро написать. А писать хорошо и самому.
Советую прочитать Книгу дракона. "Альфред Ахо,Рави Сети,Джеффри Ульман Компиляторы.djvu"
Также в сети можно найти сайт посвещенный студенчиским компилятором.
Это не связанно. Ты можешь написать компилятор который бы компилировал и для виндоуса в exe(PE)
COM - это самый простой формат. Чисто машинный код и все.
Дай ссылочку на книжку...или на сайт...
я ничего не нашел
Дай ссылочку на книжку...или на сайт...
я ничего не нашел
Может за тебя еще и компьютер включить?
введи в яндаксе "Альфред Ахо,Рави Сети,Джеффри Ульман Компиляторы.djvu" первая ссылка с верху.
Для примера поищи в инете реализацию s-Pascal (компилер паскаля на паскале же и написаный, сам себя компилит). К нему добрый человек написали подробнейшее описание кода в виде учебника.
Могу послать книгу Ахо на мыло)
Давай..._slash@bk.ru
Давай..._slash@bk.ru
А как в винде открыть файлы djvu???
А как в винде открыть файлы djvu???
Тебе нужно скачать DjVu Browser Plugin
Скачать можно отсюда.
http://www.lizardtech.com/
Тебе нужно скачать DjVu Browser Plugin
Скачать можно отсюда.
http://www.lizardtech.com/
В пнонедельник после 16.00 лови)
Если позволяет уровень - смотри исходники freepascal'я
Где (в какой папке компилятора или в каком месте сайта) находятся исходники Free Pascal? Lazarus действительно идет в комплекте с исходниками (pas и pp - файлы). Я нашел в компиляторе Free Pascal файлы ppu, но я ни чем не могу их открыть. Или Free Pascal написан не на Pascal. Подскажите, пожалуйста!
В пнонедельник после 16.00 лови)
Ну и где??? Скинь плис на [email]_slash@bk.ru[/email]
Ну и где??? Скинь плис на [email]_slash@bk.ru[/email]
Кидаю
Где (в какой папке компилятора или в каком месте сайта) находятся исходники Free Pascal? Lazarus действительно идет в комплекте с исходниками (pas и pp - файлы). Я нашел в компиляторе Free Pascal файлы ppu, но я ни чем не могу их открыть. Или Free Pascal написан не на Pascal. Подскажите, пожалуйста!
Сылка взета от сюда.
http://www.freepascal.org/down/source/sources-russia.html
К примеру здесь
ftp://ftp.chg.ru/pub/lang/pascal/fpc/dist/source-2.0.2/fpc-2.0.2.source.zip
15 Мб
Если надо могу кинуть на мыло.
А здесь лежат исходники различных компиляторов.
http://exmortis.narod.ru/
Кидаю
Ну ты меня закидал прям.....пасибо
Ну ты меня закидал прям.....пасибо
Да незачто)))
Вообще делается примерно так. Строится лексический анализатор - простенькая процедурка, выделяющая из исходного текста отдельные лексемы, т. е. слова, скобки, запятые, строковые константы и т.д. (в общем всё, что является самостоятельной языковой единицей и разделяется между собой как правило пробелами (исключение здесь составляют те самые скобки и запятые, которые не обязательно разделяются пробелами)).
Затем строится синтаксический анализатор. Он обращается к лексическому: "дай очередную лексему". Проанализировав, что это за лексема, синтаксический анализатор предпринимает те или иные действия, к примеру, увидев ключевое слово "procedure", он может перейти в состояние "далее идет процедура и ее надо распознать", затем берет очередную лексему и это должно быть имя процедуры, его надо где-то запомнить, берет очередную лексему, и если это открывающая скобка, то у процедуры будут параметры, надо распознать параметры, а если нет скобки, то слово begin и т. д.
Для языков с достаточно простой грамматикой можно построить ручками транслятор (интерпретатор), непосредственно описав грамматику языка с помощью, скажем, нормальных форм Бэкуса-наура.
Серьезные вещи используют много этапов - от лексического и синтаксического анализа до оптимизации и генерации кода, при этом входной текст "перекочевывает" несколько раз в разные формы - сначала в синтаксическое дерево и таблицу имен, потом во внутреннее представление, и т. д.
Самый простой выход - найти програмульку "LEX" - генератор лексических анализаторов, описать свой язык с помощью нормальных форм Бэкуса-Наура, например:
<ОпределениеПеременной>::=Var <ИмяПеременной>:<ИмяТипа>;
<ОпределениеФункции>::=Function <ИмяФункции> [(<СписокПараметров>)]: <ВозвращаемыйТип>; begin <НаборОператоров> end;
<ОпределениеПроцедуры>::=Procedure <ИмяПроцедуры> [(<СписокПараметров>)]; begin <НаборОператоров> end;
<НаборОператоров>::=<Оператор>{;<Оператор>}
<СписокПараметров>::=Var <ИмяПеременной>:<ИмяТипа>{,<ИмяПеременной>:<ИмяТипа>}
<ИмяТипа>::=char|integer|word|string ["["<ДлинаСтроки>"]"]
и так далее. (Получается нечто вроде Паскаля).
И это самое описание языка дать на съедение LEX'у - на выходе программа даст готовый исходник транслятора на C.