Я хочу написать gen (G, S) в Prolog, чтобы сгенерировать действительную последовательность S для данной грамматики G, где G имеет грамматику формата ([список нетерминалов], [список терминалов], [список правил], [начальная последовательность]). Правила находятся в правиле формата (nt, [x]), где x может быть любым списком нетерминалов и/или терминалов.Последовательный генератор для бесконтекстной грамматики (CFG) в Prolog, возможно, с использованием DCG
например. gen (грамматика ([a, b], [t, q, y, z], [правило (a, [t]), правило (a, [z]), правило (b, [y]), правило (b, [a, q])], [a, b]), X).
Возврат: X = [t, y]. X = [t, t, q]. X = [t, z, q]. X = [z, y]. X = [z, t, q]. X = [z, z, q].
Со всей информацией на CFG для Prolog (пробовал в течение 2 дней), я с/б умею выяснить хотя бы один способ сделать это, используя встроенные -> и фразы/2 или с нуля, но не повезло. (Никогда не размещался на SO b4 & Я новичок, поэтому извиняюсь, если этот Q неуместен.)
У вас есть какой-либо код, который вы пробовали, что можете показать? – lurker
Кажется, я не могу написать 1 loc. Я никогда не был в тупике, как этот b4. Я могу сгенерировать последовательность, используя -> и фразу/2 для образца грамматики, но ничего общего, поэтому она не помогает вообще. : '( – hkm