bogachev-pa / rdo_studio Goto Github PK
View Code? Open in Web Editor NEWThis project forked from aurusov/rdo_studio
License: MIT License
This project forked from aurusov/rdo_studio
License: MIT License
Прикрутил регрессионные тесты в линуховой сборке. Несколько моделей с ошибками. В моей сборке все тесты прошли.
Select
контекст. Перенести создание калков из бизона в него. Вызов из бизона должен стать у всех одинаковой копипастой. (готово)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);
}
}
;
В ходе их применения возникло две проблемы:
RDO_IDENTIF '.' ...
Возникали shift/reduce конфликты с param_full_name, который я вставил в set_statement. И разрешались они вовсе не так, как нужно. Поэтому я поставил param_full_name (наверное, его надо будет переименовать) вместо RDO_IDENTIF во все эти правила, грамматически всё стало работать хорошо, я переключался на контекст паттерна или чего угодно еще через поиск в парсере, передавал этот контекст дальше, а там кастил к нужному типу.
Проблема только с процессом - он не является контекстом. Собственно, мне просто сделать его контекстом и всё?
Upd: сделал процесс контекстом, вроде работает.
@aurusov
Код модели, вызывающий ошибку:
$Function Где_дырка : such_as Место_дырки
$Type = algorithmic
$Parameters
_Фишка: Фишка
$Body
integer Место = _Фишка;
return дырки_рядом_нет;
$End
Здесь Фишка
- это тип ресурса.
Старое сообщение об ошибке:
FUN (10): ошибка: Ожидается целочисленное значение, найдено: Фишка
FUN (10): ошибка: См. тип: integer
Сообщение об ошибке в моей сборке:
FUN (10): ошибка: Неизвестный параметр ресурса: _Фишка
Старое сообщение об ошибке очевидно информативнее и правильнее.
Причина моего сообщения об ошибке в том, что при свертке param_full_name
попадаем в контекст типа ресурса, ожидая, что придет параметр, но его не приходит и мы ищем параметр по имени _Фишка в этом типе. Т.е. до места сравнения типов мы даже не доходим.
Это происходит из-за того, что в РДО не сделано присваивание ресурсов (а так же возврат ресурсов из функции и создание локальных ресурсов внутри функции), и, соответственно, никакого кода для их обработки тоже не написано.
Я пока залил в свой форк моделей фактическое сообщение об ошибке, чтобы сборки проходили, т.к. не уверен, можно ли без костылей решить эту проблему, не сделав нормальную работу с ресурсами в функциях, а это достаточно трудоемкий процесс, и я им займусь после сдачи курсача.
Сейчас все модели тесты проходят.
Добавь таг с номером версии, а то Дженкинс не может собрать исходники. И перезапусти сборки.
@aurusov
Где сейчас взять последнюю документацию по РДО? Мне нужно для курсача добавить в неё информацию об изменениях. Попробовал форкнуть rdo_editor, но там какая-то устаревшая документация.
@aurusov
Предлагаю такую модель: магазин продает компьютеры/ноутбуки, клиенты выбирают их по параметрам комплектующих. Соответственно комплектующие и будут вложенными ресурсами.
Если ок, буду продумывать подробности.
@aurusov
Т.к. Netbeans автоматически удаляет пробелы в конце строк, в коммиты иногда попадает мусор в виде удаления этих самых пробелов.
Что делать?
@aurusov
Необходимо проверить:
Вот тут лежит популярная библиотека для подсветки синтаксиса. Вот тут уже готовый парсер для РДО. Если чего-то не хватает - дополняй. Если совсем прото, то
<script src="../../highlight.js/build/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
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
Еще список листов можно посмотреть здесь, если удобнее.
@aurusov
Что это такое? Я неправильно собрал рдо? Запускаю в режиме дебага.
Это точно не я что-то сломал, потому что у меня то же самое с вашими исходниками, т.е. я, видимо, в нетбинсе что-то не так делаю.
@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). Аналогично образцам.
Что делать с теорией по последовательностям не знаю, как вариант, оставить в конце.
Код в бизоне должен стать копипастой для всех вызовов через '.'. Нужно оставить только одно обобщенное место. Как вариант, сразу предусмотреть рекурсивный вызов через '.'.
В идеале написать теорию с нуля так, чтобы можно было разобраться вместо лекций.
@aurusov
Я поставил претти принтеры для gdb под netbeans отсюда - те, что в первом пункте и выкачиваются через svn.
Могут не заработать из-за каких-то нестыковок питона3 и gdb, тут описан простой способ пофиксить, глубже я не разбирался.
Протестил на некоторых контейнерах, вроде работают неплохо.
Но проблему с \020\035\040 в строках не решают. Кажется, тут дело не в претти принтере. На stackoverflow есть один аналогичный вопрос, но толкового ответа, к сожалению, нет.
http://stackoverflow.com/questions/4830279/print-command-in-gdb-return-035-on-strings
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.