Можно ли распечатать все возможности выражения, такие как (x AND (y OR z)) с помощью yacc? - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь распечатать все возможности сложного логического выражения вида ((a И (b ИЛИ c ИЛИ d)) И e И (f ИЛИ g)).Например, вывод должен быть

a, b, e, f
a, c, e, f
a, d, e, f
a, b, e, g
a, c, e, g
a, d, e, g

и т. Д.,

Я использую парсер (PLY для python), он использует алгоритм LARL, но я не знаю, если этоэто правильный способ решить эту проблему.

Я не могу найти способ правильно распечатать все возможности, поэтому подумал, что, может быть, PLY - это не тот инструмент для этой задачи.

Вы рекомендуете мне написать собственный синтаксический анализатор для решения этой проблемы?

1 Ответ

0 голосов
/ 27 декабря 2018

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

Вам все еще нужно выполнить кодирование: вам нужно пересечь результирующую структуру данных (под вашим контролем) и предоставить либо все дочерние возможности (узел AND), либо любое положительное количествовозможностей (узел OR) для выражения, которое вы проанализировали.

...