Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SemDet (#рефалстиль) #350

Open
TonitaN opened this issue Jun 6, 2024 · 10 comments
Open

SemDet (#рефалстиль) #350

TonitaN opened this issue Jun 6, 2024 · 10 comments
Assignees
Labels
bug АХТУНГ! это надо исправить

Comments

@TonitaN
Copy link
Collaborator

TonitaN commented Jun 6, 2024

Исправить доделывания в ветке Эдгара и залить нормальные логи.

@TonitaN TonitaN added the bug АХТУНГ! это надо исправить label Jun 6, 2024
@TonitaN
Copy link
Collaborator Author

TonitaN commented Jun 8, 2024

Я вспомнила, в чём там дело :( Рефал-стиль для производных по префиксу => ничего не работает для эпсилон-переходов.
Придётся глобально рефакторить.

@TonitaN
Copy link
Collaborator Author

TonitaN commented Jun 8, 2024

Всё хуже, чем казалось... Рефал-стиль в ключах хеш-таблиц и множества привёл к мозговыносящим ошибкам компиляции библиотеки xhash при попытке перейти от set к unordered_set для vector<Regex> вместо строки. Пока не удастся это починить, правки по SemDet и PumpLength откладываются.

@TonitaN
Copy link
Collaborator Author

TonitaN commented Jun 8, 2024

Ну кстати рефал-стиль изгнать пока не удалось (как минимум без визирования Главного), из-за того, что нет нормальных конструкторов для Regex, которые бы принимали Symbol, а не строку. И либо через указатели нужно делать, либо (что гораздо соблазнительнее) --- через Regex(строка, полученная методом string из Symbol).

По-хорошему, надо это исправить + добавить хэшеры и порядок для алгебраических выражений, чтобы можно было пользоваться не только векторными структурами данных. А так, почти удалось исправить рефал-стиль, продолжаю тестировать работоспособность.

@xendalm
Copy link
Collaborator

xendalm commented Jun 8, 2024

Ну Symbol приводится к строке неявно. В ардене так уже делали)
image

#почтинерефалстиль

@TonitaN
Copy link
Collaborator Author

TonitaN commented Jun 8, 2024

Ок, но Regex(Symbol::Epsilon) имеет тип не eps почему-то.

@xendalm
Copy link
Collaborator

xendalm commented Jun 8, 2024

Все-таки нужно делать конструктор) Скажите, куда коммитить

@TonitaN
Copy link
Collaborator Author

TonitaN commented Jun 8, 2024

Можно в ветку SemDet (тогда волью в свои неоттестированные изменения и уже по-человечески удастся избавиться от рефал-стиля), или в новую.

@TonitaN TonitaN changed the title SemDet SemDet (#рефалстиль) Jun 8, 2024
xendalm added a commit that referenced this issue Jun 8, 2024
xendalm added a commit that referenced this issue Jun 8, 2024
@TonitaN
Copy link
Collaborator Author

TonitaN commented Jun 8, 2024

Ещё один вопрос: имеется ли возможность брать производные по размеченным эпсилонам? Вроде бы они имеют легальный тип символ, но почему-то не обрабатываются как обычные размеченные символы (функция производной ругается на регулярку, состоящую из размеченного эпсилона).

@TonitaN
Copy link
Collaborator Author

TonitaN commented Jun 9, 2024

Пример теста, где видны коллизии типизации (специально взяла функционал без Эдгаровского, но эдгаровский тоже не может работать с эпсилонами по аналогичной причине):

A = Antimirov.Arden.Annote.Thompson {(a|b)*} !!

Возвращает автомат с единственным состоянием, потому что по размеченным эпсилонам не берётся производная.

TonitaN added a commit that referenced this issue Jun 9, 2024
Ещё есть повторные перепроверки из-за использования векторов вместо множеств;

не подогнано под линтер;

не нужно брать языки по всем вообще префиксам, достаточно по неоднозначным (Эдгар, на заметку олимпиадникам);

Есть подозрение, что на преобразованиях после Annote (типа Reverse) иногда будут сравниваться таки неразмеченные языки, но у меня пока сравниваются размеченные, так что тест найти не удалось.
TonitaN added a commit that referenced this issue Jun 9, 2024
@TonitaN
Copy link
Collaborator Author

TonitaN commented Jun 10, 2024

Тест на следующую проблему (deannote, который заменяет алфавит, но ничего не меняется в регулярке):

A = DeAnnote.Arden.Annote.Thompson {(a|b)*|a*|b*} !!

Причина: в регулярке, которая может получиться только арденами из размеченного автомата, появляются ноды с заглавными размеченными эпсилонами, имеющими тип символ. Эти ноды без изменений попадают в регулярку со стёртой разметкой, и таким образом эпсилоны проникают в структуру выражений в явном виде. Без траверса, правильно типизирующего результат снятия разметки, судя по всему, не обойтись.

TonitaN added a commit that referenced this issue Jun 10, 2024
Только для регулярок. Для автоматов ещё нужно пропустить символы на переходах через update_epsilons, чтобы убить линеаризованные эпсилоны.
TonitaN added a commit that referenced this issue Jun 10, 2024
TonitaN added a commit that referenced this issue Jun 10, 2024
TonitaN added a commit that referenced this issue Jun 10, 2024
TonitaN added a commit that referenced this issue Jun 10, 2024
TonitaN added a commit that referenced this issue Jun 10, 2024
TonitaN added a commit that referenced this issue Jun 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug АХТУНГ! это надо исправить
Projects
Status: No status
Development

No branches or pull requests

3 participants