OnionGrief / Chipollino

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

Pump length #169 #220 #243

Open Robby-the-paladin opened 1 year ago

Robby-the-paladin commented 1 year ago

Исправлены баги:

xendalm commented 1 year ago

Все еще не могу дождаться результата https://github.com/StarikTenger/Chipollino/issues/169#issuecomment-1325129054

xendalm commented 1 year ago

При накачке (((a)|a)*)* выдает Regex::from_string() ERROR почему-то (a)*(|)(a|a)*((a|a)*)* эту регулярку не принял

xendalm commented 1 year ago

Для a*a цикл поиска заходит слишком далеко и не останавливается

Robby-the-paladin commented 1 year ago

a*a работает. (a)*(|)(a|a)*((a|a)*)* эту регулярку не принимает парсер, потому что парсер в принципе не принимает конструкции (|).

Robby-the-paladin commented 1 year ago

Теперь префиксы накачиваются по alphabet_symbol, а не по char.

TonitaN commented 1 year ago

Но почему-то всё ещё рефал-стиль падает.

Robby-the-paladin commented 1 year ago

https://github.com/StarikTenger/Chipollino/pull/243#pullrequestreview-1271979255 На этих 3 тестах выдаёт 3, 4, 4 соответственно. (((a)|a)*)* на этом тесте (|) конструкция возникает на этапе производной, после выделения a, поэтому падает

Robby-the-paladin commented 1 year ago

Теперь работает на тесте (((a)|a)*)*.

TonitaN commented 1 year ago

#243 (review) На этих 3 тестах выдаёт 3, 4, 4 соответственно. (((a)|a)*)* на этом тесте (|) конструкция возникает на этапе производной, после выделения a, поэтому падает

Почему же у меня было так, если у вас всё ок? rendered_report.pdf

TonitaN commented 1 year ago

И вот так:

Chipollino :-)
opening file test.txt
file opened
|  running "X = PumpLength {a*} !!"
|  |  scanning
|  |  |  building function sequence
|  |  |  |  PumpLength (type: {Regex} -> Int)
|  |  
|  |  Running declaration...
|  |  |  Evaluating expression "(PumpLength {a*})"
|  |  |  |  evaluating function sequence
|  |  |  |  |  Evaluating expression "{a*}"
|  |  |  |  |  running function "PumpLength"
|  |  |  |  function sequence evaluated
|  |  assigned to X
|  
|  running "X = PumpLength {aaa} !!"
|  |  scanning
|  |  |  building function sequence
|  |  |  |  PumpLength (type: {Regex} -> Int)
|  |  
|  |  Running declaration...
|  |  |  Evaluating expression "(PumpLength {aaa})"
|  |  |  |  evaluating function sequence
|  |  |  |  |  Evaluating expression "{aaa}"
|  |  |  |  |  running function "PumpLength"
Regex::from_string() ERROR

Regex.cpp за 26.01.23 , 22:09

Robby-the-paladin commented 1 year ago

https://github.com/StarikTenger/Chipollino/pull/243#issuecomment-1406003072 До merge с semdet log, была обработка по string префиксам и в конце мог добавляться eps символ в скобках, после merge обработка через alphabet symbol prefix и сейчас не падает.

TonitaN commented 1 year ago

Регулярка: (aa | bb)(ba)∗ | a∗b Куда-то делся накачиваемый префикс bba, хотя он не содержит других накачиваемых префиксов.

TonitaN commented 1 year ago

Регулярка

a(b |)(aa∗ |)∗(b | a)

Нашлись префиксы aaa и aba, но почему-то префикс abb проигнорирован в логах (длина накачки причём 4, т.е. вычислена с его учётом)

TonitaN commented 1 year ago

Рефал-стиль передаёт привет:

    Регулярное выражение:
    eps,2a|eps,1a%template_oldregex

    Длина накачки:
    5%template_pumplength1 % founded pump len

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

TonitaN commented 1 year ago

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

Robby-the-paladin commented 1 year ago

https://github.com/StarikTenger/Chipollino/pull/243#issuecomment-1407180890 Префикс abb, как и префикс aab не накачиваются, но любое слово длины 4 или больше на такие префиксы не начинаются, поэтому того что накачиваются префиксы aaa и aba достаточно.

Robby-the-paladin commented 1 year ago

https://github.com/StarikTenger/Chipollino/pull/243#issuecomment-1407167410 Регулярка (aa | bb)(ba)∗ | a∗b распознаётся интерпретатором как альтернатива (aa | bb)(ba)∗ и a∗b в таком случае префикса bba нет в языке. Для регулярки (aa|bb)((ba)*|a*b) накачиваемые префиксы aaa, aaba, bba, bbba