OnionGrief / Chipollino

преобразования регулярных выражений и конечных автоматов
Other
18 stars 4 forks source link

Add pda #325

Open alien-agent opened 6 months ago

alien-agent commented 6 months ago

Добавлен тип PDA. Поддержаны методы:

По умолчанию на стэке лежит символ Symbol::StackTop == "z0". Каждый переход должен снимать со стэка ровно один символ. Каждый переход может класть на стэк несколько символов (чтобы не класть ничего на стэк, нужно передать eps в качестве push символа).

TonitaN commented 6 months ago

Есть вопросы по совместимости. Библиотеку unistd.h подключила к Windows, не очень понимаю, зачем было привязываться к ней (магия с хешами не кажется столь обязательной). Но в вашей сборке у меня уже не генерируются шаблоны, не только для PDA, а вообще ни для чего. Проверьте кто-нибудь на винде, у вас та же история?

alien-agent commented 6 months ago

Есть вопросы по совместимости. Библиотеку unistd.h подключила к Windows, не очень понимаю, зачем было привязываться к ней (магия с хешами не кажется столь обязательной). Но в вашей сборке у меня уже не генерируются шаблоны, не только для PDA, а вообще ни для чего. Проверьте кто-нибудь на винде, у вас та же история?

Я честно говоря, вообще не знаю как она попала в код. Видимо IDE автоматически подключила. Сейчас удалю, вместе с исправлением всех замечаний.

TonitaN commented 6 months ago

UPD: Что-то сломалось в логах ещё раньше: у меня всё работает на январской версии, но на нынешней размер логов при порождении шаблонов показывается равным 0.

А всё, увидела, вернулись восклицательные знаки.

TonitaN commented 6 months ago

А в вашем случае есть проблема совместимости генерации lexy и windows - используется не тот слеш в суффиксе пути, из-за чего вылетает ошибка. Буду пробовать чинить у себя, как починю - напишу.

TonitaN commented 6 months ago

Удалила лишнюю библиотеку и запустила lexy совместимо. Ломается кодировка UTF-8 в логах вот тут:

\text{Принадлежност� }\\\text{� языку }\end{array}
alien-agent commented 6 months ago

А можете проверить воспроизводится ли проблема на master ветке? Такая строка помещается в отчет ровно в одном месте (Tester.cpp, строчка 97), и я к нему и близко не подходил (как и к refal-функциям которые эту таблицу потом форматируют).

TonitaN commented 6 months ago

Не все проблемные эпсилон-переходы обрабатываются корректно. При второй комплементации автомата Дика это видно. rendered_report.pdf

TonitaN commented 6 months ago

В дополненном PDA есть переход между финальным и нефинальным состоянием, в котором просто обращаются финальности, без промежуточного состояния.

TonitaN commented 6 months ago

А можете проверить воспроизводится ли проблема на master ветке? Такая строка помещается в отчет ровно в одном месте (Tester.cpp, строчка 97), и я к нему и близко не подходил (как и к refal-функциям которые эту таблицу потом форматируют).

Вы правы - проблема образовалась раньше. Интересным образом, поскольку эти строчки и преобразование в text давно уже никто не трогал. Всё решилось заменой:

    t.columns.emplace_back("Шаги");
    t.columns.emplace_back("Длина строки");
    t.columns.emplace_back("Время разбора");
    t.columns.emplace_back("Результат разбора");

По смыслу так даже точнее, но конечно, нужно найти, почему ь вдруг расщепился посередине в текстовом режиме.

alien-agent commented 6 months ago

@TonitaN Исправил ошибку. Почему-то я решил добавить в поиск "проблемных" переходов странное условие, которого не было в лекциях (на тот момент мне такой действие показалось логичным). И еще одно ненужная (даже вредная) проверка при простановке переходов из ловушки проблемных переходов.

TonitaN commented 6 months ago

C отдельным эпсилон-переходом теперь работает. С эпсилон-замыканиями нет: rendered_report.pdf И главное, я забыла в ТЗ для двоечников это написать, с них и не требовалось таких тонкостей) Вам же желательно подредактировать критерий проблемности: если продолжение эпсилон-перехода по эпсилон-замыканиям может быть проблемным, то эпсилон-переход проблемный.

alien-agent commented 6 months ago

@TonitaN Добавил учет эпсилон замыканий

TonitaN commented 6 months ago

В равенстве неаккуратно проверяются символы перехода. См. тест, внимание на самый правый переход rendered_report.pdf .

alien-agent commented 6 months ago

@TonitaN Согласен. Совершенно глупая ошибка - забыл при переписывании алгоритма вернуть проверку на совпадение символов афлавита. Исправил.

TonitaN commented 6 months ago

@alien-agent , нужно всё-таки внести фиксы по ревью @xendalm . Иначе в последующие годы без полного фикса курсовых никого не будем допускать к аттестации, и назовём это "Правило Пашкевича".

alien-agent commented 6 months ago

@alien-agent , нужно всё-таки внести фиксы по ревью @xendalm . Иначе в последующие годы без полного фикса курсовых никого не будем допускать к аттестации, и назовём это "Правило Пашкевича".

Не переживайте, исправлю на след неделе - жалко чтобы такой труд пропадал. (просто ушел в небольшой отпуск, поэтому чуть позже исправления будут)

TonitaN commented 5 months ago

След недели давно стёрся, правило имени Пашкевича маячит на горизонте будущих четверокурсников... @alien-agent