® a<I>,
<I>
® a.
Эта грамматика не является LL(1) грамматикой, т.к. значения функций ПЕРВ(a<I>) и ПЕРВ(a) совпадают. Введем дополнительный нетерминал A и преобразуем грамматику так:
® a<A>,
<A> ®
<I>|$.
В этой грамматике отсутствуют правила с одинаковой левой частью, поэтому для нее выполняется первое условие определения LL(1) грамматики. В общем случае, если заданная грамматика содержит правила
® a
µ1 | a µ2 | ... | a
µn ,
то, вводя дополнительный нетерминал <A'>, их можно преобразовать к виду:
® a
<A'>
<A'>
® µ1
| µ2 | ... | µn.
Полученные правила могут быть использованы для построения LL(1) грамматики.
Покажем возможность применения этого вида преобразования на следующем примере. Пусть дана грамматика .
b<A><I><B>,
b<A>,
® d<I>ca,
<A>
® f,
<B>
®c<A>a,
<B>
® c }.
Эта грамматика не является LL(1) грамматикой, поскольку нарушено первое условие. Воспользуемся способом выделения общих частей: введем нетерминалы D, E и построим правила:
® <I><B>
| $
<E>
® <A>a | $ .
В результате включения этих правил в схему грамматики получаем:
® b<A><D>
<D> ®
<I><B>
<D> ®
$
<A> ®
d<I>ca
<A> ®
f
<B> ®
c<E>
<E> ®
<A>a
<E> ®
$
Для этой грамматики первое условие принадлежности грамматики к классу LL(1) выполняется.
Чтобы проверить второе условие, найдем функции ПЕРВ и СЛЕД для аннулирующих правил.