Скажем, у меня есть хорошая неоднозначная грамматика Марпа и хорошая неоднозначная входная строка.
Я могу разобрать строку с помощью Marpa и в итоге получить синтаксический лес. Я даже могу перебирать каждое дерево синтаксического анализа в лесу.
Но как я могу перебирать «вдоль» леса синтаксического анализа?
Чтобы описать, что я имею в виду:
Лес синтаксического анализа — это своего рода граф, который может иметь узлы, в которых альтернативы отделяются, и узлы, в которых альтернативы снова объединяются в «основной поток».
Скажем, это альтернативные деревья синтаксического анализа одного леса синтаксического анализа:
A B1 C
A B2 C
A B3 B4 C
Есть основной поток A
... C
, но неоднозначный участок B
.
Конечно, в реальных синтаксических анализах может быть много уровней ветвления за разветвлением, и могут быть потоки, которые не воссоединяются с одним основным потоком. Но в целом будет много общих частей для двух или многих интерпретаций.
Какие подходы можно использовать для итерации по цепочке однозначных и неоднозначных узлов?
На самом деле я могу вывести весь график?