Giter Site home page Giter Site logo

bogachev-pa / rdo_studio Goto Github PK

View Code? Open in Web Editor NEW

This project forked from aurusov/rdo_studio

0.0 0.0 0.0 86.33 MB

License: MIT License

C++ 94.55% C 1.93% JavaScript 0.04% CSS 1.90% Visual Basic 0.03% Standard ML 0.10% Max 0.36% PowerShell 0.12% Shell 0.08% Python 0.87%

rdo_studio's People

Contributors

alex-superator avatar alexchernov avatar alikbars avatar aurusov avatar bogachev-pa avatar darthkurt avatar dluschan avatar dronbas avatar k-alexandrovsky avatar kopninandrey avatar nvrrus avatar proydakov avatar seivgard avatar yarikmmm avatar yarkeeb avatar yulek1 avatar

Watchers

 avatar  avatar  avatar

rdo_studio's Issues

Сломались тесты

Прикрутил регрессионные тесты в линуховой сборке. Несколько моделей с ошибками. В моей сборке все тесты прошли.

Рефакторинг вызова методов для Select

  1. На первом шаге сделать из Select контекст. Перенести создание калков из бизона в него. Вызов из бизона должен стать у всех одинаковой копипастой. (готово)
  2. На втором шаге упростить бизон, убрать копипасту. Объединить вызовы Select'а между собой.

Продолжение работы над задачей требует предварительного рефакторинга LPRDOFUNArithm и LPRDOFUNLogic.

Доступ к параметру ресурса бесконечной вложенности

@aurusov
Грамматические правила для рекурсивного доступа к параметру следующие:

param_full_name
    : RDO_IDENTIF
    {
        #PASS2
        {
            LPRDOValue pName = PARSER->stack().pop<RDOValue>($1);
            Context::Params params;
            params[Context::Params::IDENTIFIER] = pName->value().getIdentificator();
            Context::FindResult result = PARSER->context()->find(Context::METHOD_OPERATOR_DOT, params, pName->src_info());
            ASSERT(result.getSwitchContext());
            LPContext pContext = result.getSwitchContext().context;

            $$ = PARSER->stack().push(pContext);
        }
    }
    | param_full_name '.' RDO_IDENTIF
    {
        #PASS2
        {
            LPContext pParentContext = PARSER->stack().pop<Context>($1);
            ASSERT(pParentContext);
            PARSER->contextStack()->push(pParentContext);

            LPRDOValue pName = PARSER->stack().pop<RDOValue>($3);

            Context::Params params;
            params[Context::Params::IDENTIFIER] = pName->value().getIdentificator();
            Context::FindResult result = pParentContext->find(Context::METHOD_OPERATOR_DOT, params, pName->src_info());
            ASSERT(result.getSwitchContext());
            LPContext pContext = result.getSwitchContext().context;

            $$ = PARSER->stack().push(pContext);
        }
    }
    ;

В ходе их применения возникло две проблемы:

  1. Как можно перейти к контексту вложенного ресурса (ведь это конкретный объект!) через релевантный ресурс, если на этапе компиляции еще неизвестно, какому ресурсу он будет релевантен и, соответственно, неизвестно, что за объект является вложенным в него ресурсом.
    Чтобы достать параметр из пока что неизвестного ресурса, достаточно просто сделать калк, который выполнится в рантайме. Но ведь на контекст нам надо переключаться при компиляции!
    Может быть, нужно переключаться на контекст типа (а не ресурса) или что-то в этом духе и формировать какие-то калки для поиска и перехода к вложенному ресурсу? Это кажется жутко сложным, но я не вижу простого решения.
  2. Из-за наличия в конструкциях вроде planning/stopping правил
RDO_IDENTIF '.' ...

Возникали shift/reduce конфликты с param_full_name, который я вставил в set_statement. И разрешались они вовсе не так, как нужно. Поэтому я поставил param_full_name (наверное, его надо будет переименовать) вместо RDO_IDENTIF во все эти правила, грамматически всё стало работать хорошо, я переключался на контекст паттерна или чего угодно еще через поиск в парсере, передавал этот контекст дальше, а там кастил к нужному типу.
Проблема только с процессом - он не является контекстом. Собственно, мне просто сделать его контекстом и всё?

Upd: сделал процесс контекстом, вроде работает.

Исправить сообщения об ошибках в модели ../models/test\function\param_type_error\game5.rtestx

@aurusov
Код модели, вызывающий ошибку:

$Function Где_дырка : such_as Место_дырки
$Type = algorithmic
$Parameters
    _Фишка:    Фишка
$Body
    integer Место = _Фишка;
    return  дырки_рядом_нет;
$End

Здесь Фишка - это тип ресурса.
Старое сообщение об ошибке:

FUN (10): ошибка: Ожидается целочисленное значение, найдено: Фишка
FUN (10): ошибка: См. тип: integer

Сообщение об ошибке в моей сборке:

FUN (10): ошибка: Неизвестный параметр ресурса: _Фишка

Старое сообщение об ошибке очевидно информативнее и правильнее.
Причина моего сообщения об ошибке в том, что при свертке param_full_name попадаем в контекст типа ресурса, ожидая, что придет параметр, но его не приходит и мы ищем параметр по имени _Фишка в этом типе. Т.е. до места сравнения типов мы даже не доходим.
Это происходит из-за того, что в РДО не сделано присваивание ресурсов (а так же возврат ресурсов из функции и создание локальных ресурсов внутри функции), и, соответственно, никакого кода для их обработки тоже не написано.

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

Сейчас все модели тесты проходят.

Tag

Добавь таг с номером версии, а то Дженкинс не может собрать исходники. И перезапусти сборки.

Документация по РДО

@aurusov
Где сейчас взять последнюю документацию по РДО? Мне нужно для курсача добавить в неё информацию об изменениях. Попробовал форкнуть rdo_editor, но там какая-то устаревшая документация.

Модель с вложенными ресурсами

@aurusov
Предлагаю такую модель: магазин продает компьютеры/ноутбуки, клиенты выбирают их по параметрам комплектующих. Соответственно комплектующие и будут вложенными ресурсами.
Если ок, буду продумывать подробности.

Ссылка на модель.

Что делать с автоматически удаленными пробелами при коммите?

@aurusov
Т.к. Netbeans автоматически удаляет пробелы в конце строк, в коммиты иногда попадает мусор в виде удаления этих самых пробелов.
Что делать?

  1. Отключить автоматическое удаление пробелов в netbeans.
  2. Позволить подобному мусору попадать в коммиты.

Подсветка синтаксиса в примерах

Вот тут лежит популярная библиотека для подсветки синтаксиса. Вот тут уже готовый парсер для РДО. Если чего-то не хватает - дополняй. Если совсем прото, то

  1. собери парсер с помощью скрипта build.py
  2. для тестирования возьми пример с моделью и добавь в начало что-то типа
<script src="../../highlight.js/build/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

Использовать IAsString в RDOValue

UnknownPointer удален. Теперь нужно свести интерфейс IAsString к INotify, к примеру, и спокойно использовать в RDOValue:

std::string RDOValue::onPointerAsString() const
{
    ASSERT(typeID() == RDOType::t_pointer);
    LPIAsString asString = getPointer<IAsString>();
    if (asString)
        return asString->asString();

    throw RDOValueException("Для rdo::runtime::RDOValue не определен метод getAsString()");
}

Как-то так.

Листы для курсового проекта

Лист 1 - Постановка задачи. А2.
http://bogachev-pa.github.io/8_semester_work/1_result_A1.pdf
Штамп: http://bogachev-pa.github.io/8_semester_work/1_title.pdf
Лист 2 - Синтаксические диаграммы работы с вложенными ресурсами. А1.
http://bogachev-pa.github.io/8_semester_work/2_result_A1.pdf
Лист 3 - Диаграмма деятельности переключения контекстов. А1.
http://bogachev-pa.github.io/8_semester_work/3_result_A1.pdf
Лист 4_1 - Диаграмма классов. А2.
http://bogachev-pa.github.io/8_semester_work/4_1_result_A2.pdf
Лист 4_2 - Диаграмма деятельности создания вложенных ресурсов. А2.
http://bogachev-pa.github.io/8_semester_work/4_2_result_A2.pdf
Лист 4_3 - Диаграмма деятельности создания ресурсов рантайма. А2.
http://bogachev-pa.github.io/8_semester_work/4_3_result_A2.pdf
Лист 5 - Результаты работы. А1.
http://bogachev-pa.github.io/8_semester_work/5_result_A1.pdf
Штамп: http://bogachev-pa.github.io/8_semester_work/5_title.pdf

Записка: http://bogachev-pa.github.io/8_semester_work/report.doc

Всё одним архивом: http://bogachev-pa.github.io/8_semester_work/8_semester_work.zip

Еще список листов можно посмотреть здесь, если удобнее.

Cтранное поведение rdo studio

@aurusov
Что это такое? Я неправильно собрал рдо? Запускаю в режиме дебага.
Это точно не я что-то сломал, потому что у меня то же самое с вашими исходниками, т.е. я, видимо, в нетбинсе что-то не так делаю.
screenshot from 2014-04-16 13 00 25

Рефакторинг справки

@aurusov
План действий у меня такой:
А. Укрупнить разделы справки, выводить весь раздел с подразделами на одной страничке, но сохранить гиперссылки к подразделам. Одна страничка представляет собой один раздел формата А.Б. (см. далее)
Б. Свести к минимуму текст в "папках". Желательно убрать вообще. Т.е. если есть подразделы, весь текст в них.
В. Добавить больше примеров в странички, отвечающие за какую-нибудь вкладку в RAO-studio (RSS, RTP и т.д.)

Структура такая (корень - справка по языку РДО):

1 Введение - имитационное моделирование
2 Структура языка (можно про историю РДО или оставить пустым)
  2.1 Условные обозначения
  2.2 Основные понятия (этот пункт в справке расширить информацией по ресурсам и т.п.)
  2.3 Алфавит языка
  2.4 Типы данных языка
  2.5 Арифметические и логические выражения
  2.6 Лексемы и разделители (подпункты оставить как есть, там всё нормально)
  2.7 Глобальные переменные и стандартные функции
  2.8 Процедурное программирование (пустой или несколько общих слов)
    2.8.1 Операторы процедурного программирования
    2.8.2 Инструкции процедурного программирования
3 Объекты языка
  3.1 Типы ресурсов (RTP)
  3.2 Ресурсы (RSS)
    3.2.1 Описание ресурсов
    3.2.2 Неопределенное значение параметра ресурса (?? - непонятный пункт в справке, не очень информативный. Видимо надо расширить с полным описанием синтаксиса (# при создании и т.п.)).
    3.2.3 Вложенные ресурсы
  3.3 Образцы (EVN и PAT).
    3.3.1 Описание образцов. Далее все подпункты (rule, event, etc) оставить как есть, только добавить примеров.
  3.4 Точки принятия решений (DPT)
    3.4.1 Описание точек принятия решений. Далее все подпункты (some, prior) оставить как есть, только добавить примеров.
  3.5 Символьные констранты, функции и последовательности (FUN)
    3.5.1 Символьные констранты
    3.5.2 Последовательности
    3.5.3 Функции
  3.6 Анимация (FRM).
    3.6.1 Кадры анимации
    3.6.2 Элементы отображения
  3.7 Процессы (PRC)
  3.8 Объект прогода (SMR)
  3.9 Объект описания показателей (PMD)
  3.10 Объект результатов (PMV)
  3.11 Объект трассировки (TRC). Аналогично образцам.

Что делать с теорией по последовательностям не знаю, как вариант, оставить в конце.

Добавить теорию

В идеале написать теорию с нуля так, чтобы можно было разобраться вместо лекций.

pretty printer

@aurusov
Я поставил претти принтеры для gdb под netbeans отсюда - те, что в первом пункте и выкачиваются через svn.
Могут не заработать из-за каких-то нестыковок питона3 и gdb, тут описан простой способ пофиксить, глубже я не разбирался.
Протестил на некоторых контейнерах, вроде работают неплохо.

Но проблему с \020\035\040 в строках не решают. Кажется, тут дело не в претти принтере. На stackoverflow есть один аналогичный вопрос, но толкового ответа, к сожалению, нет.
http://stackoverflow.com/questions/4830279/print-command-in-gdb-return-035-on-strings

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.