На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (3) 1 2 [3]  все  ( Перейти к последнему сообщению )  
> Проект транслятора или интерпретатора на C++, Ищу единомышленника для совместной работы
    Цитата Zaytsev Artem @
    А какого формата файлы они генерируют?
    Исходники на C (lex/yacc) или C++ (flex/byson). Содержат набор таблиц описывающих лексику/синтаксис языка и интерпретаторы этих таблиц, которые вместе с написанным тобой функциями и производят компиляцию.

    flex/bison могут работать вместо первой пары.

    Есть варианты, генерирующие все это на паскале или других языках.
    Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
      Цитата Zaytsev Artem @
      А какого формата файлы они генерируют?

      На сколько я понял из описания (руками эти тулзы не трогал), на выходе получаются файлы с исходным кодом для лексического/синтаксического анализаторов в виде отдельных функций, которые можно включить в свой проект. На входе должно быть формальное описание языка в заданном формате. Советую подобными инструментами воспользоваться, коли нет опыта написания своего транслятора, тем более Вы хотите для разных своих продуктов скриптовые языки делать разными. Тогда просто для каждого своего языка скриптов Вам нужно будет задавать свою грамматику в формате, принимаемом тулзой, запускать тулзу, получать файли с исходнимком анализатора, добавлять этот исходник в проект. Если какие-то языки будут не сильно друг от друга отличаться, Вам просто будет достаточно сделать несколько правок в формальном описании грамматики языка.
        Homez, тема давняя, но если ещё актуально, могу предложить написать интерпретатор C++ подобного языка для использования его на серверах, как и вместо PHP.
        "Подобного" - потому, что оставив мощь C++, следует взять возможности PHP по обработке текста HTML, скажем, сам C++ код обрамляется тегами <?c++ ... ?>, вне которых - HTML код, добавить API работы с GET и POST параметрами CGI приложения, некоторое число твиков.
        Идея родилась после написания своей системы управления содержимым на C++: http://maasoftware.ru, на C++ писалось лучше и привычнее, чем на PHP, но возможности микширования кода PHP и HTML не хватало, также возможности вставки значений переменных языка в HTML, возможно, eval(), `` и т.д.
        У PHP, в свою очередь, плохо с перегрузкой функций, отсутствует строгая типизация, да и синтаксис после C++ не привычен.
        Соответственно, есть наработки для работы с CGI параметрами, и вообще, кросс-платформенная библиотека-замена STL: ToolsLib

        PS: В простейшем виде, C++ файл можно скомпилировать и запустить на Linux сервере, например, так:
        /home/user/cpp_c.sh:
        ExpandedWrap disabled
          #!/bin/sh
           
          if [ "x$1" = "x" ]; then
              exit 1
          fi
           
          s=/tmp/1.cpp
          fn=/tmp/1.out
          cat "$1" | sed "1d" >$s
          g++ -lstdc++ -o $fn $s 2>&1 >/dev/null && $fn
          r=$?
          rm $s $fn
          exit $r


        и сам файл скрипта на C++ в каталоге web-сервера, скажем, sample.cgi:
        ExpandedWrap disabled
          #!/home/user/cpp_c.sh
           
          #include <stdio.h>
           
          int main()
          {
              printf("Content-Type: text/plain\n");
              printf("Cache-control: no-cache\n");
              printf("\n");
              printf("C++ output !\n");
              return 0;
          }
        Сообщение отредактировано: maa -
            maa, тема давняя и уже не актуальная. Я больше не горю идей какого-то глобального проекта компилятора или транслятора.

            По поводу вашей идеи проекта. А как использовать существующую кодовую базу на C++? Может быть, Вы предполагаете написание что-то типа транслятора, который будет обрабатывать код с <?c++ ... ?>, чтобы на выходе получалась программа на C++?

            Про себя могу сказать, что мои наработки по трансляции пригодились мне относительно недавно. Я заинтересовался проектированием микропроцессоров, послушал несколько соответствующих курсов на coursera.org и возникла идея сделать свой дизайн микропроцессора. Понятно, что это учебный проект и для собственного удовольствия. Мне не удалось найти какую-то удобную среду для проектирования своего дизайна на HDL (Hardware Definition Language), такую, чтобы можно было производить валидацию и тестирование чипов, поэтому решил написать свою, на Java. И вот как раз свои знания по написанию компиляторов я использовал в этой своей среде: я написал транслятор собственного HDL, описал несколько чипов на нем, чипы парсятся и представляются программно, проверочные выражения успешно проходят валидацию. К сожалению, еще предстоит много работы, а времени уделить удается мало, давно не садился за этот проект.
              Homez
              Неплохо бы посмотреть. А визарды ака генераторы как в qartuse есть? А в чём основная трудность, над чем работаете?
              Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
                Цитата
                Неплохо бы посмотреть.

                Я подумал о том, чтобы выложить проект, например, на GitHub, но предвкушаю, что, в нынешнем состоянии, могут грянуть кардинальные перемены всего внутреннего API, поэтому пока не тороплюсь.

                Цитата
                А визарды ака генераторы как в qartuse есть?

                Не знаю, что такое qartuse. Мой проект в текущем состоянии - это пока консольное приложение, которые вычитывает описания чипов из файлов ресурсов, проводит их валидацию и тесты.

                Цитата
                А в чём основная трудность, над чем работаете?

                Сейчас остановился на многобитных входах/выходах и проверочных выражениях для них. С однобитными входами/выходами всё ок.

                Добавлено
                Ну вот, например, описание мультиплексора:

                chip mux
                {
                in a, b, sel;
                out out;
                parts not(in=sel,out=notSel),nand(a=notSel,b=a,out=selA),nand(a=sel,b=b,out=selB),nand(a=selA,b=selB,out=out);
                test out=sel?b:a;
                }

                not - другой описанный чип, nand - базовый чип. Делается проверка, что нет циклической рекурсии при описании чипов, делается проверка, что нет цикличности в сигналах внутри чипов, это я делаю с помощью графов.

                Добавлено
                Основным источником вдохновения был вот этот курс: http://www.nand2tetris.org/. Но я послушал и другие, намерен пойти дальше и попробовать сделать хотя бы простенький конвейер a-la классический конвейер MIPS.
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:
                Страницы: (3) 1 2 [3]  все


                Рейтинг@Mail.ru
                [ Script Execution time: 0,0931 ]   [ 14 queries used ]   [ Generated: 10.12.19, 20:55 GMT ]