Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.34.87] |
|
Сообщ.
#1
,
|
|
|
пишу компилятор с собственного языка
интересно, занимается ли этим кто-нибудь еще? если интересно - вышлю исходники компилятора и описание языка |
Сообщ.
#2
,
|
|
|
А чем C++ не устраивает?
|
Сообщ.
#3
,
|
|
|
Цитата zheromo, 11.07.02, 12:25:19 если интересно - вышлю исходники компилятора и описание языка Вышли, интересно , а ты gcc смотрел? |
Сообщ.
#4
,
|
|
|
компилятор я писал вначале не как замену какому либо компилеру или языку, а просто в познавательных целях
синтаксис выбирался таким, на котором мне было бы самому удобно писать на этом языке, несколько програм я написал (пару-тройку простеньких игрушек, да тучу примеров), но кроме малого размера выполняемого кода (компилятор генерит подпрограмный шитый код с инлайн вставками для двухстековой машины, стек возвратов и стек данных, идея взята из классических реализаций языка Форт http://www.forth.org.ru - очень интересный сайт) похвастать нечем сейчас у нас тут проблемы с сервером :( , как все заработает дам ссылку на страничку сейчас я начал писать новый компилятор, уже под конкретную задачу (синтаксический анализ, компиляция, специальные структуры данных) и думаю, что-то из этого, может что и получится, потому что появилась некая концептуальная ясность спасибо |
Сообщ.
#5
,
|
|
|
Пожалуйста, расскажите про идеологию Вашего языка.
Какие управляюшие конструкции есть в языке? Какие синтаксические, семантические особенности Вы можете выделить в языке? Чем Ваш язык отличается от других, известных, языков программирования? --- с уважением: ТотКогоНет |
Сообщ.
#6
,
|
|
|
Цитата ТотКогоНет, 16.07.02, 09:57:21 --- с уважением: ТотКогоНет Это шутка такая? Помоему этот кто-то тут есть... 8) |
Сообщ.
#7
,
|
|
|
Д2 - это язык программирования высокого уровня. Предками языка, оказавшими на него наибольшее влияние, можно назвать Forth, Pascal (Modula-2, Oberon) и С. Язык был задуман как обладающий намеренно простым синтаксисом и возможно большей расширяемостью. Первое было достигнуто за счет сокращения до реального минимума управляющих конструкций, и отказа от такого понятия современных языков алголоидного типа как тип данных, однако же, был оставлен "классический" синтаксис языка типа Pascal. Формально язык содержит единственный тип данных - указатель. Косвенно поддерживаются такие типы как числа и строки символов. Второе, т.е. расширяемость, было достигнуто за счет введения понятия библиотеки или модуля, а также, в основном за счет внутреннего устройства ядра языка идею которого он позаимствовал у Forth ( http://www.forth.org.ru ), хотя это скорее вопросы реализации, чем синтаксиса... Язык поддерживает такие понятия как процедура (векторная процедура), локальные и глобальные переменные, параметры. В языке нет каких либо предопределенных операций и функций кроме, как я уже отмечал, операций управления процессом исполнения. Все функции ввода-вывода, математические, процедуры работы с графикой и т.д. поставляются в виде библиотек и в исходных текстах.
По поводу расширяемости: 1). стандартный императивный подход создание новых процедур которые могут выступать в роли постфикс/инфиксных операторв (с учетом приоритетов) процедуры могут переопределятся (как статически, так и динамически) 2). открытые исходные тексты компилятора пользователь может перетранслировать транслятор с целью получения нового синтаксиса Хочется добавить: 3). полный полиморфизм процедур (необходимо будет ввести типизацию данных) 4). настраиваемый под пользователя синтаксис (ЯАП - язык, адаптируемый пользователем) |
Сообщ.
#8
,
|
|
|
Вышли сорс пожалуйста ;)
|
Сообщ.
#9
,
|
|
|
Куда? ;)
Сорс лежит на страничке языка: http://d2lang.by.ru по адресу http://d2lang.by.ru/files/d2x86src.zip Спасибо за интерес к моему языку |
Сообщ.
#10
,
|
|
|
А можно у вас кое-что спрость? Компилятор это очень хорошё, но на основе чего его можно написать? Я никак не собирюсь с вами конкурировать, но я тоже написал мало-мальский язык программирования. Именно моло-мальский, он написа на VB, это очень медленно, и пока что он переводит свой код в код на VB, ПРИЧЁМ С КУЧЕЁ ОШИБОК!!! И только после этого!! Компилирует! Естестветто потом возникает много проблем. Я думаю написть компилятор для этого языка на ASSEMBLER, но для этого нужно сначала изучить ASSEMBLER? Посоветуйте что-либо.
|
Сообщ.
#11
,
|
|
|
>Glucker
Очень хороший сайт про построение компиляторов http://kit.kulichki.ru куча документации и etc несколько ссылок есть на стрнице моего языка http://d2lang.by.ru там же есть исходники компилятора писать компилятор на ассемблере не нужно, на мой взгляд, вообще подойдет и VB и ObjectPascal и C++ идея переводить на какой-нибудь язык высокого уровня не нова и очень даже ничего, в зависимости от того, что нужно, просто изучить вопрос или решить конкретную проблему, смотря какую, конечно ассемблер знать нужно если как продукт компилятора будет генерится машинный код или текст на асме, что в принципе одно и то же можно посмотреть, что это за компилятор, исходники его? с уважением, |
Сообщ.
#12
,
|
|
|
У меня кое-что есть про компиляторы:
В.А.Серебряков " Лекции по конструированию компиляторов" 306 Kb - txt Кому надо, могу закачать... ========cut============== книга основана на курсе лекций, прочитанных автором на факультете вычислительной математики и кибернетики Московского государственного университета в 1991- 1993 гг. ========cut============== |
Сообщ.
#13
,
|
|
|
Цитата Dr_Freeman, 06.10.02, 07:59:40 У меня кое-что есть про компиляторы: В.А.Серебряков " Лекции по конструированию компиляторов" 306 Kb - txt Кому надо, могу закачать... Эта, а также куча другой литературы есть на http://kit.kulichki.net посмотрите также ссылки на странице моего языка http://d2lang.by.ru в разделе http://d2lang.by.ru/library.html |
Сообщ.
#14
,
|
|
|
Было бы интересно посмотреть исходник компилятора....
Закинь на ftp://copyhere.by.ru:ByBy@ftp.by.ru/upload/D2src , если не трудно.... |
Сообщ.
#15
,
|
|
|
Цитата Jin X, 23.10.02, 22:41:11 Было бы интересно посмотреть исходник компилятора.... Закинь на ftp://copyhere.by.ru:ByBy@ftp.by.ru/upload/D2src , если не трудно.... Вроде там... А так заходите на http://d2.plex.ru или http://d2lang.chat.ru - там лежит все, что касаемо языка |
Сообщ.
#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) - то ли приведение типа, толи функция. |
Сообщ.
#31
,
|
|
|
Цитата В глобальном пр-ве имен это выглядит очень полезным. А как быть внутри функции? void f() { .... for(n=0; n<0; n++) { } ... // И где нибудь в конце функции: int n; } Выглядит это как-то неочень ну, так у меня ж Паскаль - а там объявления только в начале подпрограммы, в отдельном разделе. А вообще, как я уже говорил - это довольно специфичный язык программирования. Он приспособлен для хранения математических алгоритмов с возможностью автоматического перевода. А всё, что не укладывается в эти две концепции, я просто выкинул из языка Так, нет приведения типов - у меня только три типа - целый, вещественный и булевый. Нечего приводить, по сути дела. Думаю, во второй версии я часть выкинутого верну обратно... но пока у меня другая задача - закачать первую версию на сайт библиотеки алгоритмов, для которого я собственно это и делал. Ну и разобраться с переводом уже имеющихся алгоритмов. Владимир (автор сайта) сейчас как раз сподвигается мной на предмет этого. Надо будет его сегодня утречком повопрошать... Цитата Вобщем-то у меня тоже компилятор пишется помаленьку а на какой стадии у тебя процесс сейчас? я первую версию своего уже закончил (даже не верится). Теперь надо будет перевод ещё на пару языков добавить. С++ и delphi уже есть, думаю, может взять С# и Visual Basic... кстати, всем желающим посмотреть - транслятор лежит на shadeofgray.narod.ru |
Сообщ.
#32
,
|
|
|
Цитата shadeofgray, 10.06.03, 00:38:25 Сначало скажу что он из себя представляет. Компилирует он модули. Нечто немного смахивающее на дллки. В них есть несколько сегментов. а на какой стадии у тебя процесс сейчас? 1. Инфа 2. Импорт - модули, которые надо подгрузить для работы этого. 3. Список типов, классов и структур в этом модуле. Про каждый из них есть инфа о названии всех методов, переменных и т.д. Т.е. RTTI 4. Список функций и методов. Тоже вместе с RTTI 5. Список переменных и констант. Аналогично. 6. Данные. Т.е. реальные значения элементов из сегмента 5. 7. Сегменты кода. На него ссылаются функции из 4. Компилируются функции в байт код, который при загрузке модуля переводится в машинный код и линкуется. Сегментов кода у меня несколько видов предусмотрено. Но реализованно пока три. 1. Байт код который просто переводится в машинный. 2. Сегмент для специальных математических функций. Это функции такого вида: double f(double x,double y) = x*x + y; Здесь функции хранятся в виде польско инверсной записи. По которой либо строится машинный код, либо можно к примеру построить производную этой функции. 3. Сегмент машинного кода. Перевода при загрузке модуля для него не требуется. Этот сегмент есть, но компиляция для него еще не реализована. Переменные как в java - только ссылки на реальные объекты. Экземпляр выглядит так: 1. Кол-во ссылок на него. 2. Указатель на RTTI структуру. 3. Сами даные. Есть такая вещь как типы: type A { data(4); double f(); } Типы имеют только методы, но не имеют членов. Зато внутри типа можно указать размер его данных - например data(8); Cделано это чтобы реализовать классы стандартных типов. Т.е. double, int и т.д. Например: type double { data(8); string ToStr(); } Удобно использовать такие переменные (т.е. double d) как классы. Например: string str = d.ToStr(); Но переменные в них запрещены. Есть еще константы. Константы имеют только данные этого Типа или Класса. Но не имеют кол-ва ссылок на экземпляр и ссылки на RTTI. Но они пока не реализованы. Реализовано только их использование в арифметических выражениях: x*0.1 + 0.2; А компиляция констант: const double Pi = 3.14; еще нет. Вот вроде рассказал все что у меня реализованно. |
Сообщ.
#33
,
|
|
|
Цитата Вот вроде рассказал все что у меня реализованно. Эта штука у тебя уже есть в виде экзешника, который работает и компилирует модули? Т.е. уже можно что-нить откомпилить и запустить на выполнение? Кстати, вот ты говоришь - "Типы имеют только методы, но не имеют членов ..... Cделано это чтобы реализовать классы стандартных типов". Я правильно понял, что у тебя стандартные типы данных реализованы только средствами самого языка, т.е. есть исходник скажем типа double, который поддерживает всякие операции над ним? Кстати, хочу поделиться интересным техническим решением. У меня один знакомый тоже пишет компилер (урожайная на них будет осень ). Он считает, что в языке не должно быть встроенных типов данных - всё должно быть реализовано средствами языка. Программы у него модульные, в качестве модулей, по-моему, используются DLL-ки. Каждый модуль может экспортировать реализуемые в нем типы данных. Ну и чтобы решить проблему с реализацией стандартных типов, он создает специальный модуль stdtypes - создает его не средствами своего языка, а при помощи другого (кажется, асм). Т.е. этот модуль экспортирует стандартные типы, как и любой модуль его языка, но только он создан не при помощи компиляции исходного текста на этом самом языке (по-моему, его ещё никак не зовут). Да, а как называется твой язык (если у него уже есть название)? |
Сообщ.
#34
,
|
|
|
Названия нет Это всегда для меня сложно было придумывать.
Стандартные типы так и реализованы - средствами самого языка. Т.е. в типе double еще реализованы операторы +, -, * и т.д. как в C++, только тела таких операторов написаны на небольшом встроенном асме. В самом кмопиляторе нет ни одного типа. В нем есть только константы. Да, уже компилирует. Только это у меня не ехе, а дллка, которая экспортирует функцию void compile(char* makefile); и еще несколько структур и классов для работы со скомпилированным модулем. |
Сообщ.
#35
,
|
|
|
Вот кстати, прикольная штука у меня есть: код
<br>procedure a;<br>var<br> i : Integer;<br>begin<br> i:=0;<br> repeat<br> i:=i+1;<br> until i>10;<br>end;<br> при трансляции на С++ становится <br>void a()<br>{<br> int i;<br><br> i = 0;<br> do<br> {<br> i = i+1;<br> }<br> while(i<=10);<br>}<br> обрати внимание на то, как изменилось условие цикла until/while. |
Сообщ.
#36
,
|
|
|
а сколько написание языка(компилятора) занимает по времени?
|
Сообщ.
#37
,
|
|
|
Цитата Misha Muhin, 23.07.03, 21:57:13 а сколько написание языка(компилятора) занимает по времени? у меня заняло несколько месяцев. но вообще то вопрос того, сколько часов в день можно выделить для написания. Также много зависит от того, насколько мощный язык должен быть реализован. |
Сообщ.
#38
,
|
|
|
если можно вопрос, а почему не изобрести компилятор другого типа, например компилит с рисунков, а именно... штот-о на подобие УМЛ, если быть точьнее Ратионал Розе, ведь последнее слово идёт за аналитическими компиляторами а?
|
Сообщ.
#39
,
|
|
|
Цитата zheromo, 11.07.02, 12:25:19 пишу компилятор с собственного языка интересно, занимается ли этим кто-нибудь еще? если интересно - вышлю исходники компилятора и описание языка Компиляторы не пишу, но очень инетресно было бы посмотреть и изучить. Идея у вас очень хорошая, так держать. Надеюсь ваш проект найдёт продолжение и развитие. Всего.... |
Сообщ.
#40
,
|
|
|
Цитата zheromo @ 11.07.02, 11:25 пишу компилятор с собственного языка интересно, занимается ли этим кто-нибудь еще? если интересно - вышлю исходники компилятора и описание языка если можешь отправь мне !! просто срочно очень нужно prostak_p@mail.ru |
Сообщ.
#41
,
|
|
|
Очень полезно было бы написать компилятор формул, типа на вход принимается строка типа х*х+10*у, потом "x", "y" - переменные, 1, 2 - значение переменных, а на выходе - 21 - значение функции. Еще неплохо, что-бы искало все частные производные, типа, говорю - дай производную по х, и получаю строчку 2 *х. Если есть у кого-то, вышлите, пожалуйста на почту burda_r#mail.ru, где №=@/ Спасибо
|
Сообщ.
#42
,
|
|
|
Очень полезно было бы написать компилятор формул, типа на вход принимается строка типа х*х+10*у, потом "x", "y" - переменные, 1, 2 - значение переменных, а на выходе - 21 - значение функции. А это - в Windows: Пуск - Программы - Стандартные - Калькулятор. Еще неплохо, что-бы искало все частные производные, типа, говорю - дай производную по х, и получаю строчку 2 *х. Если есть у кого-то, вышлите, пожалуйста на почту burda_r#mail.ru, где №=@/ А это - MathCad. А вообще всё это - "пишем компиляторы с языка, названия которому я не знаю..." - детский сад! Сначала специфицируется язык, а потом ... может и компилятор писать расхочется. Посмотрите - интересная статья: http://www.uni-vologda.ac.ru/cs/syntax/ariphm.htm http://www.uni-vologda.ac.ru/cs/syntax/index.html - что выросло из многодесятилетнего желания (в отличии от авторов, которым пару месяцев назад приспичило...) писать языки и компиляторы. |
Сообщ.
#43
,
|
|
|
Цитата если можешь отправь мне !! просто срочно очень нужно Компилятор с сорцами и примерами доступен на странице языка К соообщению прикрепил сорцы Описание языка Прикреплённый файлd2x86src.zip (31.41 Кбайт, скачиваний: 210) |
Сообщ.
#44
,
|
|
|
Решил тоже поделится
Для своего проекта сотворил компилятор наподобие С++ только добавил своих типов данных, да и математике немного. В частности окромя booleana b complex по причине сути проекта добавились подтипы stream, common, in, out префекс обозначаюший что переменные могут быть связаны с переменными другого процесса - эт я к вопросу зачем компилятор переписывать(переменные эти по другим правилам живут немного); Плюс добавил матричную арифметику - например int a[.3.] ; complex c [.1.] - a трехмерная матрица ( вектор матриц )целых чисел а с - вектор комплексных. Проект просто под математику затачивалась, но по жизни работать с матрицами удобно и без математики. Можно даже матрицу классов создать - вроде все ок будет . Еще там реализовано динамическое назначение функций т.е. например int sqr(int x)=x*x; //sqr(3)=9 sqr((int)a) // впрочем пока надо равно после скобок писать скоро устраню { return a; } //sqr(3)=3 sqr(b)+=b;// если определено например sqr(int) и sqr(double) - ошибка будет //sqr(3)=6 Кстати про booalen - инт в него то же при особой необходимости конвертается но особая как бы фишка в умножении при умножении на него он сохраняет значение если он TRUE и делает 0 если FALSE так наприме функция int sign(double x)=[1,-1]*[x>0,x<0]; //получить знак или int max(int a,int b)=a+(b-a)*(b>a); //получить наибольшее В целом же см выше изначально приспосабливал для описания кусочно заданных формул. Компиляции как таковой правда нет все транслируется в шитый код который потом шустро крутится. Для промежуточных данных используется 2 стека - арифметический там локальные переменные промежуточные данные и так далее(в edi хранится) и програмный - там управление программой(в esp хранится) . Если интересно попробую оторвать его от проекта и дать в отдельном виде или проект доделать - что б там визуальная среда (написанная кстати на этом же языке как и десктоп и оконная беблиотека) появилась. З.Ы. Кстати шитый код и продеференцировать можно и поиздеваться как-нибудь еще или например передать другой части этой программы по сети которая не на x86 работает( это я так замечтался ). Впрочем он мне необходим еще и потому, что система в реальном режиме запускает сразу несколько потоков шитого кода на исполнения - между ними переключаться легко да и контролировать их. |
Сообщ.
#45
,
|
|
|
вышли исходники плз на qaka@mail.ru
|
Сообщ.
#46
,
|
|
|
на no.spam.rambler@rambler.ru вышли плиз
|
Сообщ.
#47
,
|
|
|
FCK, спасибо, огромное спасибо вам, товарищ, за то что не дали пропасть теме, последнее сообщение в которой было более четырех лет назад. искренне надеюсь, что ваша страсть к кладоискательству будет грамотно оценена модераторами форума.
еще раз спасибо вам. |
Сообщ.
#48
,
|
|
|
Цитата Trurl @ Сам себя он уже компилит То есть? |
Сообщ.
#49
,
|
|
|
Цитата zera @ FCK, спасибо, огромное спасибо вам, товарищ, за то что не дали пропасть теме, последнее сообщение в которой было более четырех лет назад Прекрасная тема, получил море удовольствия Вот этот отрывок особенно: Цитата Glucker @ А можно у вас кое-что спрость? Компилятор это очень хорошё, но на основе чего его можно написать? Я никак не собирюсь с вами конкурировать, но я тоже написал мало-мальский язык программирования. Именно моло-мальский, он написа на VB, это очень медленно, и пока что он переводит свой код в код на VB, ПРИЧЁМ С КУЧЕЁ ОШИБОК!!! И только после этого!! Компилирует! АААААА!!!1111 Компилирует!!!!!!11 Опасносте!!!!!111 Мне одному кажется, что это великолепно? Сообщения были разделены в тему "реализовать язык прогр-я для работы с объектами" |