Как выполнить итерацию "вдоль" леса разбора Marpa, а не "через" его деревья разбора?

Скажем, у меня хорошая двусмысленная грамматика Марпы и хорошая двусмысленная входная строка.

Я могу разобрать строку с Марпой и в итоге разобрать лес. Я даже могу перебирать каждое дерево разбора в лесу.

Но как я могу выполнить итерацию "вдоль" леса разбора?

Чтобы описать, что я имею в виду:

Лес синтаксического анализа - это вид графа, в котором могут быть узлы, где альтернативы разделены, и узлы, где альтернативы объединяются в "основной поток".

Скажем, это альтернативные деревья разбора одного леса разбора:

  • A B1 C
  • A B2 C
  • A B3 B4 C

Есть основной поток A... C но неоднозначный B раздел.

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

Какие подходы можно использовать для итерации по цепочке однозначных и неоднозначных узлов?

На самом деле я могу вывести весь график?

2 ответа

В этом разделе приведены 2 примера (базовый и расширенный) итерации по узлам ASF для получения списка сериализованных AST.

Оба основаны на коде из набора тестов Marpa::R2 (cpan/t/sl_panda(1).t).

Надеюсь, поможет.

PS Эта суть, вероятно, будет служить вам лучше - она ​​печатает все узлы ASF в порядке посещения - вы можете использовать

$spans->{ $literal }->{ $start }

хэш, чтобы увидеть, является ли узел неоднозначным или нет, и построить график оттуда на основе интервалов промежутка ($start, $start + $length) для построения дочерних / родительских ссылок.

Интерфейс для этого только что перешел из альфы в константу в Marpa::R2, так что вопрос уместен. Посмотрите https://metacpan.org/pod/distribution/Marpa-R2/pod/ASF.pod и https://metacpan.org/pod/distribution/Marpa-R2/pod/Glade.pod.

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

Кстати, другой эксперт Marpa, может быть, тут кто-то другой, у кого больше опыта работы с моим интерфейсом, чем у меня. Возможно, вы хотели бы немного подождать его ответа, который вам может понравиться больше, чем мой.:-)

Другие вопросы по тегам