0

Мне нужен алгоритм, который проверяет, является ли язык G1 подмножеством языка G2 или нет. (Предположим, что G1 и G2 являются двумя LL (1) грамматиками с одинаковыми алфавитами, производственные правила которых имеют либо вид A -> aB, либо A -> a, а «a» - не-эпсилон. У меня есть алгоритмы синтаксического анализа что проверка грамматики против строки, но не проверка на другом языке. Есть ли у кого есть решение.Алгоритм проверки грамматики в отношении другой грамматики в ll (1)

+0

Это домашнее задание? Во всяком случае, есть cs.stackexchange.com, если ответы здесь разрежены. – Trilarion

+0

Как правило, мы проверяем грамматику на входную строку, но проблема заключается в том, что в этой части у нас есть 2 разных грамматики, которые могут иметь множество производственных правил. Поэтому я думаю, что должен быть метод или алгоритм, который я могу использовать, например, в Java-язык программирования. – saeedrobot

+0

Я знаю, что его можно решить, используя два стека, чтобы он проверял, является ли FIRST строки поверх стека подмножеством другого. Любой рекомендуемый Java-код? – saeedrobot

ответ

1

Ваши грамматики выглядят так, как будто они правильные, поэтому алгоритм состоит в том, чтобы преобразовать грамматики в NFA. тривиальное отображение 1-1, затем преобразуем NFA в DFA с построением подмножества. Назовите эти A и B. Их легко проанализировать, чтобы определить подмножество L (A) L (B). Например, поскольку существуют хорошо известные эффективные алгоритмы для определения L (A) ==? L (B) и построения новой машины I (A, B), которая принимает пересечение L (A) L (B), просто вычислить

(L(I(A,B)) ==? L(A)) or (L(I(A,B)) ==? L(B))