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


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