Open Robby-the-paladin opened 7 months ago
Пример автомата для FA:
FA {
ab label = baobab terminal initial_state;
aba terminal
...
aba bab v;
bab ab o;
ab aba c
}
Пример автомата для MFA:
MFA {
ab label = baobab terminal initial_state;
aba terminal
...
aba bab v 12 o;
bab ab eps 12 c;
ab aba &12
}
Грамматика:
Так, а где интеграция в генератор случайных объектов? Причём на базе вашего же языка теперь уж надо. И метод Verify должен уметь обращаться к генератору по типу, причём к каждому типу автомата привязана инстанциация грамматики, по которой и делается генерация. Хардкодить грамматику ещё и в генераторе нельзя.
https://github.com/OnionGrief/Chipollino/issues/318#issuecomment-1920621658 Отдельный от парсера генератор уже залит в main. В последнем коммите(https://github.com/OnionGrief/Chipollino/commit/4d699605ccde3c1c9a2d8dfb1a7cfa70f388319b) сделал встроенный в лексер, но я не уверен, что это архитектурно правильно. Генерировать напрямую из правил lexy не получится, так что в последнем коммите я просто добавил методы generate для структур грамматики.
Мне вот вообще не видно по коду, что генератор генерирует только корректные MFA (т.е. те, у которых нет записи внутри той же ячейки или чтения внутри записи в ячейку). И такие условия негоже хардкодить, а нужно привязывать к типу и вызывать по нему для каждого из классов автоматов как метод для графа (выбирающий, можно ли построить выбранный вами переход, или ограничивающий возможные метки на переходах некоторым собственным пулом значений для выбора). И так для DFA проверять детерминизм, а для MFA как минимум корректность обработки памяти.
По-хорошему, этот генератор должен бы накладываться на абстрактные методы построения графов по заданным параметрам (ветвление, длина, достижимость), и именно это и было первоначальной нашей целью, но уж ладно, времени на это не осталось. Но ограничение значений генератора для построения только корректных автоматов сделать необходимо.
Написать модуль для загрузки автоматов в интерактивный конвертер: