На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! В разделе обсуждаются следующие темы:
1) Процесс разработки программного обеспечения.
2) Определение требований к программному обеспечению.
3) Составные части и процесс проектирования (см. Шаблоны проектирования).
4) Документирование программного продукта(проекта).
5) Руководство разработкой программного обеспечения.
6) Проектирование пользовательского интерфейса.
7) Контроль версий проекта (см. Управление версиями в Subversion, Стратегии использования svn).
Модераторы: ElcnU
  
> пишу компилятор
    пишу компилятор с собственного языка
    интересно, занимается ли этим кто-нибудь еще?
    если интересно - вышлю исходники компилятора и описание языка
      А чем C++ не устраивает?
        Цитата zheromo, 11.07.02, 12:25:19
        если интересно - вышлю исходники компилятора и описание языка

        Вышли, интересно :), а ты gcc смотрел?
          компилятор я писал вначале не как замену какому либо компилеру или языку, а просто в познавательных целях

          синтаксис выбирался таким, на котором мне было бы самому удобно писать на этом языке, несколько програм я написал (пару-тройку простеньких игрушек, да тучу примеров), но кроме малого размера выполняемого кода (компилятор генерит подпрограмный шитый код с инлайн вставками для двухстековой машины, стек возвратов и стек данных, идея взята из классических реализаций языка Форт http://www.forth.org.ru - очень интересный сайт) похвастать нечем

          сейчас у нас тут проблемы с сервером  :( , как все заработает дам ссылку на страничку

          сейчас я начал писать новый компилятор, уже под конкретную задачу (синтаксический анализ, компиляция, специальные структуры данных) и думаю, что-то из этого, может что и получится, потому что появилась некая концептуальная ясность

          спасибо
            Пожалуйста, расскажите про идеологию Вашего языка.
            Какие управляюшие конструкции есть в языке?
            Какие синтаксические, семантические особенности Вы можете выделить в языке?
            Чем Ваш язык отличается от других, известных, языков программирования?
            --- с уважением: ТотКогоНет
              Цитата ТотКогоНет, 16.07.02, 09:57:21
              --- с уважением: ТотКогоНет

              Это шутка такая? Помоему этот кто-то тут есть...  8)
                Д2 - это язык программирования высокого уровня. Предками языка, оказавшими на него наибольшее влияние, можно назвать Forth, Pascal (Modula-2, Oberon) и С. Язык был задуман как обладающий намеренно простым синтаксисом и возможно большей расширяемостью. Первое было достигнуто за счет сокращения до реального минимума управляющих конструкций, и отказа от такого понятия современных языков алголоидного типа как тип данных, однако же, был оставлен "классический" синтаксис языка типа Pascal. Формально язык содержит единственный тип данных - указатель. Косвенно поддерживаются такие типы как числа и строки символов. Второе, т.е. расширяемость, было достигнуто за счет введения понятия библиотеки или модуля, а также, в основном за счет внутреннего устройства ядра языка идею которого он позаимствовал у Forth ( http://www.forth.org.ru ), хотя это скорее вопросы реализации, чем синтаксиса... Язык поддерживает такие понятия как процедура (векторная процедура), локальные и глобальные переменные, параметры. В языке нет каких либо предопределенных операций и функций кроме, как я уже отмечал, операций управления процессом исполнения. Все функции ввода-вывода, математические, процедуры работы с графикой и т.д. поставляются в виде библиотек и в исходных текстах.

                По поводу расширяемости:
                 1). стандартный императивный подход
                     создание новых процедур которые могут выступать в роли
                     постфикс/инфиксных операторв (с учетом приоритетов)
                     процедуры могут переопределятся (как статически, так и
                     динамически)
                 2). открытые исходные тексты компилятора
                     пользователь может перетранслировать транслятор с
                     целью получения нового синтаксиса
                Хочется добавить:
                 3). полный полиморфизм процедур (необходимо будет ввести
                     типизацию данных)
                 4). настраиваемый под пользователя синтаксис (ЯАП - язык,
                     адаптируемый пользователем)

                  Вышли сорс пожалуйста  ;)
                    Куда?  ;)
                    Сорс лежит на страничке языка: http://d2lang.by.ru по адресу http://d2lang.by.ru/files/d2x86src.zip
                    Спасибо за интерес к моему языку
                    Сообщение отредактировано: zheromo -
                      А можно у вас кое-что спрость? Компилятор это очень хорошё, но на основе чего его можно написать? Я  никак не собирюсь с вами конкурировать, но я тоже написал мало-мальский язык программирования. Именно моло-мальский, он написа на VB, это очень медленно, и пока что он переводит свой код в код на VB, ПРИЧЁМ С КУЧЕЁ ОШИБОК!!! И только после этого!! Компилирует! Естестветто потом возникает много проблем. Я думаю написть компилятор для этого языка на ASSEMBLER, но для этого нужно сначала изучить ASSEMBLER? Посоветуйте что-либо.
                        >Glucker

                        Очень хороший сайт про построение компиляторов http://kit.kulichki.ru
                        куча документации и etc

                        несколько ссылок есть на стрнице моего языка http://d2lang.by.ru
                        там же есть исходники компилятора

                        писать компилятор на ассемблере не нужно, на мой взгляд, вообще
                        подойдет и VB и ObjectPascal и C++
                        идея переводить на какой-нибудь язык высокого уровня не нова и очень даже ничего, в зависимости от того, что нужно, просто изучить вопрос или решить конкретную проблему, смотря какую, конечно
                        ассемблер знать нужно если как продукт компилятора будет генерится машинный код или текст на асме, что в принципе одно и то же

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

                        с уважением,
                          У меня кое-что есть про компиляторы:
                          В.А.Серебряков " Лекции по конструированию компиляторов"
                          306 Kb - txt
                          Кому надо, могу закачать...
                          ========cut==============
                          книга основана на курсе лекций,
                          прочитанных автором  на факультете вычислительной математики и
                          кибернетики Московского  государственного университета в 1991-
                          1993  гг.  
                          ========cut==============
                            Цитата 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
                              Было бы интересно посмотреть исходник компилятора....
                              Закинь на ftp://copyhere.by.ru:ByBy@ftp.by.ru/upload/D2src , если не трудно....
                                Цитата 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 - там лежит все, что касаемо языка
                                  Спасибо, как смогу зайти на FTP (а то сейчас он что-то не пашет) - скачаю :)
                                    У нас преподавали теорию компиляторов по книге Ахо, Ульман "Компиляторы" - конкретный фундаментальный труд. Очень советую  ;)
                                      Видел d2. Неплохо. Даже понравилось.
                                      Мы с друзьями когда-то писали компилер, но он был под Юних и
                                      за основу были взяты Byacc и Bizon.
                                      Если хочешь, могу пошукать исходники [все писалось на С].
                                        а я помаленьку пишу транслятор. Действительно помаленьку, когда есть свободное время (а его немного). По задумке эта штуковина предназначена для написания программ, занимающихся математическими расчетами и будет транслировать с некоторого подмножества Паскаля на большинство современных языков программирования (прям наполеоновские планы). Причем транслировать с сохранением вида и читабельности выражений.
                                        Подмножество языка выбрано так, что программы можно будет переводить даже на VisualBasic.
                                          Извините что долго не отвечал

                                           

                                          2 B@G да, книга отличная, я ее тоже читал, вещь!

                                          2 NadZ
                                          Спасибо. С огромным интересом посмотрю  Ваши исходники.

                                          2 shadeofgray
                                          Очень интересное направление в построении трансляторов, хотел бы побольше узнать о Вашей работе. Больше всего меня интересует, как будет обрабатываться семантика функций на различных языках, т.е. например в Паскале используется Write в C - printf, в Basice - print, как они будут сопоставляться между собой?



                                            Цитата 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 в этом плане проблем не вызовет.
                                            Сообщение отредактировано: shadeofgray -
                                              Цитата shadeofgray, 20.01.03, 13:03:26
                                              А книга была в электронной или бумажной форме? Если в электронной, то нельзя ли дать ссылку?


                                              К сожалению книга была hardware
                                              В библиотеке я ее брал - проблем не было
                                              У тех же авторов есть и более ранние издания, например Ахо, Ульман. Теория синтаксического анализа, перевода и компиляции. М.:Мир, 1978. т.1,2.

                                              Цитата shadeofgray, 20.01.03, 13:03:26
                                              1. Основным назначением языка AlgoPascal является хранение алгоритмов (в основном математического характера) и перевод на как можно большее число языков программирования.


                                              Если это возможно, очень хотелось бы познакомится с полным описанием языка и его реализацией.
                                                Цитата zheromo, 22.01.03, 10:13:19
                                                Если это возможно, очень хотелось бы познакомится с полным описанием языка и его реализацией.

                                                Как только будет возможно. Сейчас, увы, из описания у меня есть только файлы с лексикой и грамматикой (для Flex и Yacc). В принципе могу выслать, но не думаю, что из них можно узнать что-то новое - язык намеренно сделан максимально похож на Паскаль.
                                                А работу над реализацией, увы, тормознула сессия. Идет, но медленнооооо...

                                                  Я тоже написал свой компилятор...
                                                  VBScript в EXE..  
                                                  Первую версию можно скачать на http://scriptcom.narod.ru/
                                                  Она оказалась немного неудачной. Проектные ошибки в реализации Run-time Library.
                                                  Сейчас делаю вторую версию, примерная схема тут http://scriptcom.narod.ru/rtl.html
                                                  Выложу первый релиз где то через месяц

                                                  :)

                                                    Цитата Alex_, 29.01.03, 16:54:14

                                                    Я тоже написал свой компилятор...
                                                    VBScript в EXE..  
                                                    Первую версию можно скачать на http://scriptcom.narod.ru/
                                                    Она оказалась немного неудачной. Проектные ошибки в реализации Run-time Library.
                                                    Сейчас делаю вторую версию, примерная схема тут http://scriptcom.narod.ru/rtl.html
                                                    Выложу первый релиз где то через месяц

                                                    :)



                                                    Сорцы есть?

                                                      Исходники я пока не планирую распостранять..
                                                      Хочу перевести мой проект в Shareware, и попробовать заработать на нем немного денег.

                                                      :)
                                                        Ну, дык, и я туда же... И тоже для своего языка - дикая помесь  Pascal, Oberon и черт
                                                        знает чего еще. Сам себя он уже компилит, но заброшен.
                                                        Потому как хочется чего-то красивого, а выходит как всегда...
                                                          Какой класс языка ? Императивный,как С Pascal и т.д, или декларативный, как например Prolog ?
                                                            Если про d2 - то императивный, прктически чисто процедурный
                                                              Цитата shadeofgray, 20.01.03, 13:03:26
                                                              В языке отсутствуют опережающие объявления – транслятор многопроходный.
                                                              Расскажи про это поподробнее, пожалуйста? В глобальном пр-ве имен это выглядит очень полезным. А как быть внутри функции?
                                                              ExpandedWrap disabled
                                                                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) - то ли приведение типа, толи функция.
                                                              Сообщение отредактировано: Leprecon -
                                                                Цитата
                                                                В глобальном пр-ве имен это выглядит очень полезным. А как быть внутри функции?
                                                                void f()
                                                                {
                                                                   ....
                                                                   for(n=0; n<0; n++)
                                                                   {
                                                                   }
                                                                   ...


                                                                   // И где нибудь в конце функции:
                                                                   int n;
                                                                }  
                                                                Выглядит это как-то неочень

                                                                ну, так у меня ж Паскаль - а там объявления только в начале подпрограммы, в отдельном разделе. А вообще, как я уже говорил - это довольно специфичный язык программирования. Он приспособлен для хранения математических алгоритмов с возможностью автоматического перевода. А всё, что не укладывается в эти две концепции, я просто выкинул из языка :)  Так, нет приведения типов - у меня только три типа - целый, вещественный и булевый. Нечего приводить, по сути дела.


                                                                Думаю, во второй версии я часть выкинутого верну обратно... но пока у меня другая задача - закачать первую версию на сайт библиотеки алгоритмов, для которого я собственно это и делал. Ну и разобраться с переводом уже имеющихся алгоритмов. Владимир (автор сайта) сейчас как раз сподвигается мной на предмет этого. Надо будет его сегодня утречком повопрошать...



                                                                Цитата
                                                                Вобщем-то у меня тоже компилятор пишется помаленьку

                                                                а на какой стадии у тебя процесс сейчас?
                                                                я первую версию своего уже закончил (даже не верится). Теперь надо будет перевод ещё на пару языков добавить. С++ и delphi уже есть, думаю, может взять С# и Visual Basic...


                                                                кстати, всем желающим посмотреть - транслятор лежит на shadeofgray.narod.ru
                                                                Сообщение отредактировано: shadeofgray -
                                                                  Цитата 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; еще нет.

                                                                  Вот вроде рассказал все что у меня реализованно.
                                                                  Сообщение отредактировано: Leprecon -
                                                                    Цитата
                                                                    Вот вроде рассказал все что у меня реализованно.

                                                                    Эта штука у тебя уже есть в виде экзешника, который работает и компилирует модули? Т.е. уже можно что-нить откомпилить и запустить на выполнение?

                                                                    Кстати, вот ты говоришь - "Типы имеют только методы, но не имеют членов ..... Cделано это чтобы реализовать классы стандартных типов". Я правильно понял, что у тебя стандартные типы данных реализованы только средствами самого языка, т.е. есть исходник скажем типа double, который поддерживает всякие операции над ним?

                                                                    Кстати, хочу поделиться интересным техническим решением. У меня один знакомый тоже пишет компилер (урожайная на них будет осень :) ).  Он считает, что в языке не должно быть встроенных типов данных - всё должно быть реализовано средствами языка. Программы у него модульные, в качестве модулей, по-моему, используются DLL-ки. Каждый модуль может экспортировать реализуемые в нем типы данных. Ну и чтобы решить проблему с реализацией стандартных типов, он создает специальный модуль stdtypes - создает его не средствами своего языка, а при помощи другого (кажется, асм). Т.е. этот модуль экспортирует стандартные типы, как и любой модуль его языка, но только он создан не при помощи компиляции исходного текста на этом самом языке (по-моему, его ещё никак не зовут).

                                                                    Да, а как называется твой язык (если у него уже есть название)?
                                                                      Названия нет :) Это всегда для меня сложно было придумывать.
                                                                      Стандартные типы так и реализованы - средствами самого языка. Т.е. в типе double еще реализованы операторы +, -, * и т.д. как в C++, только тела таких операторов написаны на небольшом встроенном асме. В самом кмопиляторе нет ни одного типа. В нем есть только константы.
                                                                      Да, уже компилирует. Только это у меня не ехе, а дллка, которая экспортирует функцию void compile(char* makefile); и еще несколько структур и классов для работы со скомпилированным модулем.
                                                                      Сообщение отредактировано: Leprecon -
                                                                        Вот кстати, прикольная штука у меня есть: код
                                                                        ExpandedWrap disabled
                                                                          <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>

                                                                        при трансляции на С++ становится
                                                                        ExpandedWrap disabled
                                                                          <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.
                                                                          а сколько написание языка(компилятора) занимает по времени?
                                                                            Цитата Misha Muhin, 23.07.03, 21:57:13
                                                                            а сколько написание языка(компилятора) занимает по времени?

                                                                            у меня заняло несколько месяцев. но вообще то вопрос того, сколько часов в день можно выделить для написания.
                                                                            Также много зависит от того, насколько мощный язык должен быть реализован.
                                                                              если можно вопрос, а почему не изобрести компилятор другого типа, например компилит с рисунков, а именно... штот-о на подобие УМЛ, если быть точьнее Ратионал Розе, ведь последнее слово идёт за аналитическими компиляторами а?
                                                                                Цитата zheromo, 11.07.02, 12:25:19
                                                                                пишу компилятор с собственного языка
                                                                                интересно, занимается ли этим кто-нибудь еще?
                                                                                если интересно - вышлю исходники компилятора и описание языка

                                                                                Компиляторы не пишу, но очень инетресно было бы посмотреть и изучить.
                                                                                Идея у вас очень хорошая, так держать. Надеюсь ваш проект найдёт продолжение и развитие.
                                                                                Всего....
                                                                                  Цитата zheromo @ 11.07.02, 11:25
                                                                                  пишу компилятор с собственного языка
                                                                                  интересно, занимается ли этим кто-нибудь еще?
                                                                                  если интересно - вышлю исходники компилятора и описание языка

                                                                                  если можешь отправь мне !!
                                                                                  просто срочно очень нужно
                                                                                  prostak_p@mail.ru :D
                                                                                    Очень полезно было бы написать компилятор формул, типа на вход принимается строка типа х*х+10*у, потом "x", "y" - переменные, 1, 2 - значение переменных, а на выходе - 21 - значение функции. Еще неплохо, что-бы искало все частные производные, типа, говорю - дай производную по х, и получаю строчку 2 *х. Если есть у кого-то, вышлите, пожалуйста на почту burda_r#mail.ru, где №=@/ Спасибо

                                                                                      Очень полезно было бы написать компилятор формул, типа на вход принимается строка типа х*х+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

                                                                                      - что выросло из многодесятилетнего желания (в отличии от авторов, которым пару месяцев назад приспичило...) писать языки и компиляторы.
                                                                                        Цитата

                                                                                        если можешь отправь мне !!
                                                                                        просто срочно очень нужно


                                                                                        Компилятор с сорцами и примерами доступен на странице языка
                                                                                        К соообщению прикрепил сорцы

                                                                                        Описание языка
                                                                                        Прикреплённый файлПрикреплённый файлd2x86src.zip (31.41 Кбайт, скачиваний: 210)
                                                                                          Решил тоже поделится
                                                                                          Для своего проекта сотворил компилятор наподобие С++ только добавил своих типов данных, да и математике немного. В частности окромя booleana b complex по причине сути проекта добавились подтипы stream, common, in, out префекс обозначаюший что переменные могут быть связаны с переменными другого процесса - эт я к вопросу зачем компилятор переписывать(переменные эти по другим правилам живут немного);
                                                                                          Плюс добавил матричную арифметику - например int a[.3.] ; complex c [.1.] - a трехмерная матрица ( вектор матриц )целых чисел а с - вектор комплексных. Проект просто под математику затачивалась, но по жизни работать с матрицами удобно и без математики. Можно даже матрицу классов создать - вроде все ок будет . Еще там реализовано динамическое назначение функций т.е. например

                                                                                          ExpandedWrap disabled
                                                                                             
                                                                                            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 работает( это я так замечтался ;) ). Впрочем он мне необходим еще и потому, что система в реальном режиме запускает сразу несколько потоков шитого кода на исполнения - между ними переключаться легко да и контролировать их.
                                                                                          Сообщение отредактировано: Shirenin -
                                                                                            вышли исходники плз на qaka@mail.ru
                                                                                              на no.spam.rambler@rambler.ru вышли плиз
                                                                                                FCK, спасибо, огромное спасибо вам, товарищ, за то что не дали пропасть теме, последнее сообщение в которой было более четырех лет назад. искренне надеюсь, что ваша страсть к кладоискательству будет грамотно оценена модераторами форума.
                                                                                                еще раз спасибо вам.
                                                                                                  Цитата Trurl @
                                                                                                  Сам себя он уже компилит

                                                                                                  То есть?
                                                                                                    Цитата zera @
                                                                                                    FCK, спасибо, огромное спасибо вам, товарищ, за то что не дали пропасть теме, последнее сообщение в которой было более четырех лет назад

                                                                                                    Прекрасная тема, получил море удовольствия :P

                                                                                                    Вот этот отрывок особенно:
                                                                                                    Цитата Glucker @
                                                                                                    А можно у вас кое-что спрость? Компилятор это очень хорошё, но на основе чего его можно написать? Я никак не собирюсь с вами конкурировать, но я тоже написал мало-мальский язык программирования. Именно моло-мальский, он написа на VB, это очень медленно, и пока что он переводит свой код в код на VB, ПРИЧЁМ С КУЧЕЁ ОШИБОК!!! И только после этого!! Компилирует!

                                                                                                    АААААА!!!1111 Компилирует!!!!!!11 Опасносте!!!!!111

                                                                                                    Мне одному кажется, что это великолепно? :lol:

                                                                                                    Сообщения были разделены в тему "реализовать язык прогр-я для работы с объектами"
                                                                                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                    0 пользователей:


                                                                                                    Рейтинг@Mail.ru
                                                                                                    [ Script execution time: 0,0947 ]   [ 15 queries used ]   [ Generated: 28.04.24, 13:40 GMT ]