Скачиваний:
54
Добавлен:
01.05.2014
Размер:
263.68 Кб
Скачать

4.2.1.Определение lr(к)-грамматики

S

u A w

v

Рис. 4.4

Рассмотрим наиболее широкий класс КС-грамматик, для кото­рых можно построить детерминированный восходящий анализатор. Такие грамматики получили название LR(k)-грамматик (входная цепочка читается слева (Left) направо, выходом анализатора является правый (Right) разбор, k число символов входной цепочки, на которое можно "заглянуть" вперед для выделения основы).

Наиболее наглядно LR(k)-грамматику можно определить в терминах деревьев вывода. Грамматика G = < T, N, S, R > яв­ляется LR(k)-грамматикой, если просмотрев только часть кроны дерева вывода в этой грамматике, расположенную слева от дан­ной внутренней вершины, часть кроны, выведенную из нее, и следующие k символов входной цепочки, можно установить пра­вило вывода, которое было применено к этой вершине при порождении входной це­почки. Например, рассмотрев цепочку uv и первые k символов цепочки w (рис. 4.4), можно определить, какое пра­вило было применено к вершине А.

В определении LR(k)-грамматики используется множество ПЕРВk(), состоящее из префиксов длины k терминальных цепо­чек, выводимых из . Если из выводятся терминальные це­почки, длина которых меньше k, то эти цепочки также включают­ся в множество ПЕРВk(). Формально

ПЕРВk() = { x l * xw и x = k или

 l * x и x < k }.

Очевидно, что определение множества ПЕРВ(), приведенное при определении LL(k)-грамматики, полностью согласуется с данным определением для k = 1.

Введем еще одно понятие, которое понадобится для определе­ния LR(к)-грамматики.

Определение. Пополненной грамматикой G, полученной из КС-грамматики G = < T, N, S, R >, называется грамматика

G = < T, N {S}, SR { S S } >.

Если правила грамматики Gзанумерованы числами 1, 2, …, p, то будем считать, что S S нулевое правило грамматики G, а нумерация остальных правил та же, что и в грамматике G. Начальное правило S S вводится для того, чтобы свертка, в которой используется нулевое правило, можно было интерпретировать как признак того, что входная цепочка допустима. Дадим теперь точное определение LR(k)-грамматики.

Определение.

Пусть G = < T, N, S, R > – КС-грамматика и G= < T, N, S, R> –полученная из нее пополненная грамматика. G называется LR(k)-грамматикой для k0, если из условий:

  1. S r* Aw r w ,

  2. S r* Bx r y ,

  3. ПЕРВk(w) = ПЕРВk(y)

следует, что Ay = Bx.

Это определение говорит о том, что если w и y – правовыводимые цепочки пополненной грамматики G, у которых ПЕРВk(w) = ПЕРВk(y) и A

последнее правило, исполь­зованное в правом выводе цепочки w, то правило A должно использоваться также в правом разборе при свертке y к Ay.

Поскольку A независимо от w, то из определения LR (k)-грамматики следует, что в множестве ПЕРВk(w) содер­жится информация, достаточная для определения основы.

Соседние файлы в папке ВОСХОДЯЩИЕ МЕТОДЫ ОБРАБОТКИ ЯЗЫКОВ
  • #
    01.05.2014263.68 Кб54LR_K_GR.DOC
  • #
    01.05.2014222 б8Методы _восходящие методы обработки языков_ .log