В этих грамматиках присутствует элемент аттракциона - транслирующая грамматика не только анализирует входное слово: но и транслирует его. В большинстве практических случаев эти процессы разделяют, поэтому-то такие грамматики можно рассматривать как некий казус.
Если выделить символы, заключенные в фигурные скобки, то получится исходное выражение, оттранслированное в постфиксную запись.
ab + c *
s-грамматикой будем называть такую контекстно-свободную грамматику, правые части правил, которой начинаются с терминальных символов, причем для одного и того же левого символа правые части начинаются с разных символов.
Не s-грамматика :
S ® aT - начинается с нетерминального. T ® bT.
S ® TbS
T ® bT
Aналогичная s-грамматика (распознает тоже)
:
S ® abR
S ® bRbS
R ® a
R ® bR
q-грамматикаотличается от s-грамматики наличием аннулирующего правила (в правой части есть пустой символ) a Þ e.
1. S ® aAS
2. S ® b
3. A ® cAS
4. A ® e
Из-за аннулирующих правил для q-грамматики вводится понятие следующего символа. N(A) - множество терминальных следующих (Next) за А символов.
В данном случае за А могут следовать a или b - {a,b}.
S Þ aAS Þ aAaAS Þ aAaAb
E(1) = {a} - множество выбора для первого правила.
E(2) = {b}
E(3) = {c}
E(4) = N(A) = {a,b}
Данная грамматика может быть распознана МП-автоматом, в который добавлена операция замены a. В этом случае автомат начинает работать с непустым стеком.
S
A
Ñ
a
1 AS
®
4
> <
¾
b
2 ®
4
> <
¾
c
¾
3 AS
®
¾
┤
¾
¾
+
(left - leftmost)
LL(1) - грамматики относятся к нисходящим грамматикам (сверху - вниз).
Они отличаются от q-грамматик тем, что правые части могут начинаться с нетерминальных символов, но таких, которые после подстановок терминальных символов обеспечивают однозначность выбора грамматических правил.
В LL(1) - грамматиках разворачиваются самые левые нетерминальные символы сентенциальной формы и анализируется очередной самый левый терминальный входной строки. Возможен анализ k самых левых символов входной строки, Тогда грамматику называют LL(k) - грамматикой. Но, поскольку грамматики LL(k) и LL(1) эквивалентны в плане порождаемых языков, остановимся на рассмотрении только последней.
F(a) - множество терминальных символов, стоящих первыми (First)) в цепочках, выводимых из строки a.
N(А) - множество терминальных символов, следующих (Next) в цепочках за данным нетерминальным символом А.
Множество выбора для каждого правила формируется с учетом множества первых и множества следующих символов.
LL(1) - это такая грамматика, у которой для правил с одинаковыми левыми частями множества выбора не пересекаются.