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

Поддержка отрицания в to_glushkov и to_ilieyu #300

Open
xendalm opened this issue Nov 20, 2023 · 1 comment
Open

Поддержка отрицания в to_glushkov и to_ilieyu #300

xendalm opened this issue Nov 20, 2023 · 1 comment
Assignees
Labels
feature это надо сделать

Comments

@xendalm
Copy link
Collaborator

xendalm commented Nov 20, 2023

No description provided.

@xendalm xendalm added the feature это надо сделать label Nov 20, 2023
@xendalm xendalm changed the title Поддержка отрицания в to_glushkov Поддержка отрицания в to_glushkov и to_ilieyu Nov 20, 2023
@TonitaN
Copy link
Collaborator

TonitaN commented Dec 28, 2023

В Глушкове необходимо ограничить метод только для 1-однозначных регулярок.
Потому что иначе получится вот такая ерунда, как в примере ниже

(aa|ab)*a

Линеаризуем: (a1 a2 | a3 b4)* a5. Очевидно, NotFirst(r)={b}, и на этом этапе всё нормально. Но затем: NotFollow(a1)={b}, NotFollow(a3) = {a}, и вуаля, мы добавляем в дополнение те же переходы, которые есть в исходном автомате, и дальше якобы в автомате дополнении (по алгоритму из статьи Gelade&Neven) можно читать любой суффикс. Хотя тут очевидно, что нет.

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

При этом First(^r), где r --- 1-однозначная регулярка, будет определяться как объединение NotFirst(r) и First(r'), где r' определяется по конструкции Gelade&Neven. При этом возникнет мощное упрощение: если отрицание регулярки конкатенируется с чем-то ещё, то такое возможно с сохранением 1-однозначности только если NotFirst(r) и NotFollow(ri) (для всех ri) пусто. Иначе будет неоднозначный переход, и можно смело отказываться от построения автомата Глушкова по причине того, что регулярка не 1-однозначна.

@dak151449 dak151449 moved this to TODO in Чиполлино Jan 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature это надо сделать
Projects
Status: TODO
Development

No branches or pull requests

3 participants