Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Атрибутные грамматики
Способ описания грамматик с помощью порождающих правил не единственный. Порождающие грамматики, рассмотренные ранее, не учитывают в формальной записи грамматик семантические правила. Семантические действия в таких грамматиках вводятся в виде процедур при построении анализаторов. Примерами грамматик, учитывающих семантику в правилах вывода, являются: двухуровневые грамматики W-грамматики(с их помощью описан язык ALGOL-68), венский метаязык (описан PL/1), атрибутные. Атрибуты могут быть двух видов - синтезированные и унаследованные. Синтезированные атрибуты вычисляются с учетом значений атрибутов узлов потомков. Унаследованные атрибуты - это атрибуты, значение которых вычисляется с учетом значений атрибутов его предков. Формально атрибутная грамматика – это пятёрка объектов: , где - множество терминальных символов; - множество нетерминальных символов; - начальный выделенный символ; - это правила вывода. , где - это множество атрибутов = где - множество унаследованных атрибутов; - множество синтезированных атрибутов. È =Æ =Æ =Æ " Î Унаследованные атрибуты левой части КС-правила и синтезированные атрибуты правой части получают значения, переданные от окружающих ветвлений дерева вывода. Правила вычисления значений атрибутов, связанные с каким-либо КС-правилом, определяют метод вычисления значений других атрибутов, а именно – унаследованных атрибутов правой части и синтезированных атрибутов левой части. Значения этих атрибутов передаются окружающим узлам. Или иначе можно сказать, что синтезированные атрибуты некоторого узла содержат информацию, которая синтезируется из поддерева данного узла и передаётся вверх к корню дерева вывода, а в унаследованных атрибутах хранится информация, передаваемая вниз, от корня дерева к его листьям. Унаследованные атрибуты характеризуют контекст, в котором находится его узел и его поддерево. Правила вычисления значений атрибутов записываются разными способами. Аппарат атрибутных грамматик не является законченным методом формального описания языка. Для того, чтобы им можно было воспользоваться, его необходимо дополнить методом записи правил вычисления значений атрибутов. Один из возможных методов записи правил вычисления значений атрибутов рассмотрим на примере атрибутной грамматики чисел в двоичной системе записи. , , 0 Здесь нетерминал S используется для вывода числа в двоичной системе записи, нетерминал L – для вывода списка бит (0 и 1), нетерминал B – позволяет вывести один бит (0 или 1). В эту грамматику включим атрибуты (семантические правила), позволяющие в процессе анализа правильной цепочки получить значение двоичного числа в десятичной системе счисления. Для этого каждому нетерминалу припишем атрибуты следующим образом: . Каждое число (нетерминал ) имеет один атрибут , равный значению числа в десятичной системе счисления. В общем случае каждому нетерминалу можно приписывать любое число атрибутов. Описанные выше семантические правила относятся к синтезированным атрибутам, така как значения атрибутов всех нетерминалов определяются через значения атрибутов потомков. С учетом этих правил построим атрибутную грамматику:
; L B , B 0 B 1 Здесь индексы у нетерминалов L1 и L2 использованы для того, чтобы различить вхождения одноименных нетерминалов в правой и левой частях правил вывода. Ниже построено дерево вывода для числа 101.01, а в скобках получено значение числа в десятичной системе счисления.
101.01 (5.25)
Рисунок 7.6. Дерево вывода для числа 101.01
|