Формальные языки


Неоднозначные и эквивалентные грамматики


    Существуют грамматики, в которых одна и та же цепочка может быть получена с помощью различных выводов. Например, в грамматике Г1. 10 цепочка abc

    может быть получена с помощью двух различных выводов, и ей соответствуют два различных синтаксических дерева.

        Г1. 10:

          Vт = {a, b, c, d}, Va = {<I>, <A>, <B>},

            R =  { <I> ® <A><B>,

              <A> ® a,


              <A> ® ac,


              <B> ® b,


              <B> ® cb}.

            Первый вывод этой цепочки имеет вид :
             

                1) <I> Ю <A><B>

                Ю <A>b Ю acb,

              а второй можно получить так :
               

                  2) <I> Ю <A><B>

                  Ю <A>cb Ю acb.

                Этим выводам соответствуют разные синтаксические деревья и разборы :

                Неоднозначные и эквивалентные грамматики


                 
                 

                Следующая грамматика также допускает построение одной и той же цепочки с помощью двух выводов, имеющих разные синтаксические деревья.

                    Г1. 11:

                      Vт = {0, +}, Va = {<I>},

                        R = { <I> ® 0,

                          <I> ® <I>

                          + 0,


                          <I> ® 0 +<I>

                          }.

                        Два вывода этой грамматики, порождающие одинаковые цепочки, имеют вид:

                            1) <I> Ю <I>

                            + 0 Ю <I> + 0 + 0 Ю 0 + 0 + 0,

                            2) <I> Ю 0 + <I> Ю 0 + 0 +<I> Ю 0 + 0 + 0,

                          а синтаксические деревья, соответствующие этим выводам, можно изобразить так:

                          Неоднозначные и эквивалентные грамматики


                           
                           

                          Рассмотренное свойство грамматик называется неоднозначностью. Оно может быть определено следующим образом.

                         

                        Определение.   Цепочка языка L(Г) называется неоднозначной, если для её вывода существует более чем одно синтаксическое дерево. Если грамматика Г порождает неоднозначную цепочку, то она называется неоднозначной.

                         

                          Неоднозначность может существовать не только в искусственных языках. Хорошо известно, что в естественных языках могут быть предложения, допускающие неоднозначное написание. Например, "Пальто испачкало окно". В этой фразе не ясно, что является подлежащим, а что дополнением. Другим примером служит английская фраза: "They are flying planes", которая может быть понята двояко: "Они пилотируют самолет" или : Это летящие самолеты".


                          Свойство неоднозначности является крайне нежелательным для искусственных языков, поскольку оно не позволяет однозначным образом восстановить дерево вывода по заданной цепочке языка.
                          В общем случае можно сделать следующий вывод:
                          1) каждой цепочке, выводимой в грамматике, может соответствовать одно или несколько синтаксических деревьев,
                          2) каждому синтаксическому дереву могут соответствовать несколько выводов,
                          3) каждому синтаксическому дереву соответствует единственный правый и единственный левый выводы.
                          Кроме того, следует подчеркнуть, что один и тот же язык может быть получен с помощью различных грамматик.


                         
                        Определение.   Две грамматики Г1 и

                        Г2
                        называются эквивалентными, ecли они порождают один и тот же язык, т.е. 


                            L(Г1) = L(Г2).


                        Пред.Страница  След.Страница   Раздел   Содержание

                         
                         
                         


                        Содержание раздела