Closed simonvar closed 6 years ago
Надо оперативно поправить (до выходных, в ближайший вторник уже конференция, к которой готовят презентацию)
@darthorimar Взгляните на 1 и 3. Про 3: дефолтное поведение для графа --- искать из всех вершин. Ну и нужно разрешить задавать множество вершин, если нужно. Про 1 там просто впринципе не предусмотрено, что в SPPF могу быть циклы. Надо это аккуратно обрабатывать.
@ilya-nozhkin Я так понимаю, второй пункт сейчас в работе? Вот, есть тест, на котором можно проверить.
start
. Если из каждой вершины, то для этого есть метод org.meerkat.graph.parseGraphFromAllPositions
1 -- Надо потетстить
А если из набора вершин? Есть метод, который принимает, кроме всего прочего, список стартовых вершин?
Для более точного контроля над входными вершинами можно использовать парсер вершин V
, принимающий либо предикат, либо метку вершины. В него можно запихнуть стартовые условия
А ведь да. Кстати, так ведь и для всех вершин можно. У нас же есть предикаты. Написать предикат, который всегда истина и всё.
V
будет работать только из функции parseGraphFromAllPositions
В качестве фильтра стартовых вершин, то есть
Гм. Выглядит несколько дико. У нас же теперь сть комбинаторы для вершин. Нужен один метод типа "parse" и дальше пусть уже в грамматике указывают, откуда начинать. Но тут надо аккуратно над набором комбинаторов подумать и их семантикой. Это как раз к разговору о том, что иногда надо уметь опускать спецификации вершин.
Пока миркат -- это всё же некий набор функциональностей, а не конечный продукт :)
Хмм, а в каком смысле не работает SPPFToTrees? Приведенный пример, вроде, пытается распечатать потенциально бесконечное число деревьев, поэтому выполнение может просто не завершаться. Сейчас попробую у себя запустить.
@darthorimar Всё же надо стремиться к тому, чтобы эти фцекции были понятны сторонним людям) Ну а в перспективе и к нормальной либе.
@ilya-nozhkin А, кстати, может быть. Попробуйте заодно туда воткнуть ```parseGraphFromAllPositions''', так как там все деревья интересны из всех вершин.
Запустил, у меня все работает, дерево оказалось одно. Прикрепляю его изображение, это соответствует ожидаемому результату? tree.pdf
@simonvar по поводу 1: Нужно миксануть трейт Memoization
:
val toDot = new SPPFToDot with Memoization
А вообще для визуализации SPPF уже есть метод org.meerkat.util.visualization.visualize
Похоже на дерево из вершины 0. Попробуйте явно для 6 запустить. Там точно цикл есть. На всякий случай можно явно руками start переопределить.
Запустил из 6, текущая реализация основательно так подвисла из-за большого потребления памяти. В локальном репозитории у меня есть еще одна версия, она идет сразу из всех возможных начальных узлов SPPF-а и потребляет меньше памяти. Она, как и ожидалось, выдает бесконечную (наверное :) ) последовательность деревьев. Текущая тоже должна работать, просто дольше.
(Понимаю, странно звучит, просто там копирований очень много)
@darthorimar @ilya-nozhkin Сейчас работает? Можете добавить этот кейс к тесты?
Добавил и сделал пулл-реквест. Не знаю, как проверить корректность результата, но извлечение деревьев как минимум работает и что-то извлекает за разумное время при парсинге из всех вершин исходного графа.
При использовании Meerkat были обнаружены несколько ошибок:
Нельзя выбрать стартовую вершину в графе (всегда с 0 должен начинаться)
...