Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.131.178] |
|
Страницы: (4) 1 [2] 3 4 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Спасибо, как смогу зайти на FTP (а то сейчас он что-то не пашет) - скачаю
|
Сообщ.
#17
,
|
|
|
У нас преподавали теорию компиляторов по книге Ахо, Ульман "Компиляторы" - конкретный фундаментальный труд. Очень советую ;)
|
Сообщ.
#18
,
|
|
|
Видел d2. Неплохо. Даже понравилось.
Мы с друзьями когда-то писали компилер, но он был под Юних и за основу были взяты Byacc и Bizon. Если хочешь, могу пошукать исходники [все писалось на С]. |
Сообщ.
#19
,
|
|
|
а я помаленьку пишу транслятор. Действительно помаленьку, когда есть свободное время (а его немного). По задумке эта штуковина предназначена для написания программ, занимающихся математическими расчетами и будет транслировать с некоторого подмножества Паскаля на большинство современных языков программирования (прям наполеоновские планы). Причем транслировать с сохранением вида и читабельности выражений.
Подмножество языка выбрано так, что программы можно будет переводить даже на VisualBasic. |
Сообщ.
#20
,
|
|
|
Извините что долго не отвечал
2 B@G да, книга отличная, я ее тоже читал, вещь! 2 NadZ Спасибо. С огромным интересом посмотрю Ваши исходники. 2 shadeofgray Очень интересное направление в построении трансляторов, хотел бы побольше узнать о Вашей работе. Больше всего меня интересует, как будет обрабатываться семантика функций на различных языках, т.е. например в Паскале используется Write в C - printf, в Basice - print, как они будут сопоставляться между собой? |
Сообщ.
#21
,
|
|
|
Цитата zheromo, 20.01.03, 10:57:03 2 B@G да, книга отличная, я ее тоже читал, вещь! А книга была в электронной или бумажной форме? Если в электронной, то нельзя ли дать ссылку? Цитата zheromo, 20.01.03, 10:57:03 Очень интересное направление в построении трансляторов, хотел бы побольше узнать о Вашей работе. Больше всего меня интересует, как будет обрабатываться семантика функций на различных языках, т.е. например в Паскале используется Write в C - printf, в Basice - print, как они будут сопоставляться между собой? 1. Основным назначением языка AlgoPascal является хранение алгоритмов (в основном математического характера) и перевод на как можно большее число языков программирования. Перевод должен быть читабельным и выглядеть именно как перевод, а не результат дизассемблирования. Задача компиляции не ставится. 2. Язык получается из Паскаля путем удаления части возможностей и добавления малого числа новых. 3. Удаляются возможности, по разному реализуемые в разных языках программирования (или реализуемые не во всех - вроде записей с вариантами, в VB они кажется не могут создаваться). Также удаляются возможности, не являющиеся необходимыми для поставленной задачи – классы были бы удалены, даже если бы все языки программирования поддерживали классы. Часть возможностей удаляется ввиду того, что мне всё это одному писать но многие я бы не включил, даже если бы работал в команде из сотни энтузиастов. 4. Добавляются возможности, наличие которых требуется спецификой задачи. Так, в модуль добавлен раздел declaration – в нем помещаются объявления тех процедур и функций, реализации которых не имеют отношения к сути алгоритма – скажем, функция сравнения в алгоритме сортировки или функция оценки качества решения в алгоритме стохастической оптимизации. Эти подпрограммы являются аналогом абстрактных методов – в самом алгоритме не реализованы, а реализуются пользователем, адаптирующим алгоритм под свои нужды. Краткое описание структуры модуля: Цитата unit ИмяМодуля; declaration//внешние переменные, процедуры и функции. var //объявления переменных //объявления процедур и функций interface Имя1, …, ИмяN; //список имен, доступных пользователю алгоритма implementation const //Объявления констант. var //Объявления переменных //описания процедур и функций В языке отсутствуют опережающие объявления – транслятор многопроходный. Из скалярных типов данных поддерживается только три: Boolean, Integer, Real. Детали реализации типов данных могут меняться от языка к языку. Integer может быть как 32- так и 64- или 16-разрядным - определить это внутри алгоритма невозможно. Аналогичная ситуация и с вещественным типом. Из сложных типов данных поддерживается только многомерный динамический массив. Нумерация элементов не обязательно начинается с нуля. Строк пока нет и не уверен, что будут – не нравятся мне отличия в нумерации C/Pascal, будет источник путаницы. Параметры могут передаватся как по значению, так и по ссылке или константной ссылке. Функциональность стандартных библиотек ограничена математикой. (Как раз о Write/Print/printf). Ввод-вывод и прочее удалены по принципиальным соображениям. Впрочем, если алгоритм этого потребует, можно будет поместить объявление функции ввода/вывода в раздел declaration, а потом после трансляции написать функцию-адаптер, которая будет реализовывать объявленную функцию и служить посредником между библиотечными функциями и алгоритмом. Теперь о переводе: Если язык это позволяет, будет генерироваться класс, реализующий данный алгоритм. Интерфейсные подпрограммы и данные будут открытыми членами, внутренние – закрытыми, а объявленные в разделе declaration – абстрактными. Заодно будет решена проблема многопоточности и реэнтерабельности алгоритма. С динамическими массивами придется повозиться – в Дельфи, скажем, нижняя граница – всегда ноль. Придется писать класс-адаптер. Но есть причины, по которым нижняя граница должна быть варьируемой. При трансляции в С, боюсь, придется пользоваться макросами для доступа к элементам массива. А вот VB в этом плане проблем не вызовет. |
Сообщ.
#22
,
|
|
|
Цитата shadeofgray, 20.01.03, 13:03:26 А книга была в электронной или бумажной форме? Если в электронной, то нельзя ли дать ссылку? К сожалению книга была hardware В библиотеке я ее брал - проблем не было У тех же авторов есть и более ранние издания, например Ахо, Ульман. Теория синтаксического анализа, перевода и компиляции. М.:Мир, 1978. т.1,2. Цитата shadeofgray, 20.01.03, 13:03:26 1. Основным назначением языка AlgoPascal является хранение алгоритмов (в основном математического характера) и перевод на как можно большее число языков программирования. Если это возможно, очень хотелось бы познакомится с полным описанием языка и его реализацией. |
Сообщ.
#23
,
|
|
|
Цитата zheromo, 22.01.03, 10:13:19 Если это возможно, очень хотелось бы познакомится с полным описанием языка и его реализацией. Как только будет возможно. Сейчас, увы, из описания у меня есть только файлы с лексикой и грамматикой (для Flex и Yacc). В принципе могу выслать, но не думаю, что из них можно узнать что-то новое - язык намеренно сделан максимально похож на Паскаль. А работу над реализацией, увы, тормознула сессия. Идет, но медленнооооо... |
Сообщ.
#24
,
|
|
|
Я тоже написал свой компилятор... VBScript в EXE.. Первую версию можно скачать на http://scriptcom.narod.ru/ Она оказалась немного неудачной. Проектные ошибки в реализации Run-time Library. Сейчас делаю вторую версию, примерная схема тут http://scriptcom.narod.ru/rtl.html Выложу первый релиз где то через месяц |
Сообщ.
#25
,
|
|
|
Цитата Alex_, 29.01.03, 16:54:14 Я тоже написал свой компилятор... VBScript в EXE.. Первую версию можно скачать на http://scriptcom.narod.ru/ Она оказалась немного неудачной. Проектные ошибки в реализации Run-time Library. Сейчас делаю вторую версию, примерная схема тут http://scriptcom.narod.ru/rtl.html Выложу первый релиз где то через месяц Сорцы есть? |
Сообщ.
#26
,
|
|
|
Исходники я пока не планирую распостранять.. Хочу перевести мой проект в Shareware, и попробовать заработать на нем немного денег. |
Сообщ.
#27
,
|
|
|
Ну, дык, и я туда же... И тоже для своего языка - дикая помесь Pascal, Oberon и черт
знает чего еще. Сам себя он уже компилит, но заброшен. Потому как хочется чего-то красивого, а выходит как всегда... |
Сообщ.
#28
,
|
|
|
Какой класс языка ? Императивный,как С Pascal и т.д, или декларативный, как например Prolog ?
|
Сообщ.
#29
,
|
|
|
Если про d2 - то императивный, прктически чисто процедурный
|
Сообщ.
#30
,
|
|
|
Цитата shadeofgray, 20.01.03, 13:03:26 Расскажи про это поподробнее, пожалуйста? В глобальном пр-ве имен это выглядит очень полезным. А как быть внутри функции?В языке отсутствуют опережающие объявления – транслятор многопроходный. void f()<br>{<br> ....<br> for(n=0; n<0; n++)<br> {<br> }<br> ...<br><br><br> // И где нибудь в конце функции:<br> int n;<br>} Вобщем-то у меня тоже компилятор пишется помаленьку Так же как у тебя глобальные объявления могут находиться где-угодно. Но вот функции у меня пока, есть только такого вида: f(x,y) = x*x + sin(y)/ x+ ....; Вот я и думаю, что делать с объявлениями переменных внутри функций типа: f(x,y) { ... } И расскажи как ты делал приведение типов в арифметический выражениях: ведь не зная заранее что из себя представляет идентификатор 'a', такую конструкцию просто так не пропарсишь: (a) -b это может приведение переменной -b к типу a. А может быть вычитание (a) и b : Я избавился от этого просто выкинув некоторые виды конструций из своего языка. Т.е. в этом случае это будет именно вычитание. Но если в конце окажется что 'a' - это тип, а не переменная, то будет Error: Undefined identifer Не помню точно как в паскале, но там тоже самое может быть: a(b) - то ли приведение типа, толи функция. |