4. ВЬ1БОР(<А>®a) = ПЕРВ(а) U СЛЕД(<А>), где а аннулирующая.
Определение 8.5: КС-грамматика называется LL(1)-грамматикой тогда и только тогда, когда множества выбора правил с одинаковой левой частью не пересекаются.
Первым шагом при построении синтаксического блока является определение множеств выбора для каждого правила грамматики.
Для грамматики (см. рис. 8.6) множества выбора для каждого правила показаны на рис.8.7.
ВЫБОР(1) = ВЬ1БОР(<P>®...) - { BEGIN }
ВЫБОР(2) = ВЫБОР(<L>®...) = ПEPB(<S>;<L>) = { ИДЕНТ, IF, WHILE }
ВЫБОР(З) = ВЫБОР(<L>®...) = СЛЕД( <L> ) = { END, ENDIF, ENDWHILE )
ВЫБОР(4) = BЫБOP(<S>®...) - ( ИДЕНТ }
ВЫБОР(5) = ВЫБОР(<S>®...) - { IF }
ВЫБОР(б) = BЫБOP(<S>®...) - { WHILE }
ВЫБОР(7) = ВЫБОР(<E>®...) = ПЕРВ(<Т>;<E-list>)={ИДЕНТ, КОНСТ, ( }
ВЬ1БОР(8) = BЫБOP(<E-list>®...) = { + }
ВЫБОР(9) = BЫБОP(<E-list>®...) = СЛЕД(<E-list>) =
= { ОТНОШЕНИЕ, ;, THEN, ENDIF, DO, ENDWHILE, END }
ВЫБОР(10) = ВЫБОР(<Т>®...) = ПEPB(<F>;<T-list>) - {ИДЕНТ, КОНСТ, ( }
ВЬ1БОР(11) = BЫБOP(<T-list>®...) = { * }
ВЫБОР(12) = BЫБOP(<T-list>®...) = СЛЕД(<T-list>) =
= { ОТНОШЕНИЕ, ; , THEN, ENDIF, DO, ENDWHILE, END, + ( }
ВЫБОР(13) = ВЬ1БОР(<F>®...) = { ( }
ВЫБОР(14) = BЫБOP(<F>®…) = { ИДЕНТ }
ВЫБОР(15) = ВЫБОР(<F>®...) = { КОНСТ }
ВЫБОР(16) = BЫБOP(<R>®...) = ( ОТНОШЕНИЕ }
Рис.8.7.Множества выбора для грамматики (рис.8.6).
Из рис.8.7 видно, что множества выбора правил с одинаковой левой частью не пересекаются, т.е. данная грамматика является Ц-(1)-грамматикой. Так как некоторые нетерминалы снабжены атрибутами, то эта грамматика является атрибутной.
Атрибутная транслирующая грамматика - это транслирующая грамматика, к которой добавляются следующие определения:
1. Каждый входной символ, символ действия или нетерминальный символ имеет конечное множество атрибутов.
2. Все атрибуты нетерминальных символов и символов действия делятся на синтезируемые и наследуемые.
3. Правила вычисления наследуемых атрибутов определяются следующим образом:
а) каждому вхождению наследуемого атрибута в правую часть данной продукции сопоставляется правило вычисления этого атрибута как функции некоторых других атрибутов символов, входящих в правую или левую часть данной продукции;
б) задается начальное значение каждого наследуемого атрибута начального символа.
4. Правила вычисления синтезируемых атрибутов определяются так:
а) каждому вхождению синтезируемого нетерминального атрибута в левую часть данной продукции сопоставляется правило вычисления этого атрибута как функции некоторых других атрибутов символов, входящих в правую или левую часть данной продукции;
б) каждому синтезируемому атрибуту символа действия сопоставляется правило вычисления этого атрибута как функции некоторых других атрибутов этого символа действия.
В нашей грамматике (см. рис. 8.7) все атрибуты нетерминалов СИНТЕЗИРУЕМЫЕ, кроме следующих:
<E-list>pl, t2
<T-list>p1, t2 p1 - наследуемый t2 - синтезируемый
Все атрибуты символов действия НАСЛЕДУЕМЫЕ.
1. Карпов Ю.Г. Основы построения компиляторов (уч.пособие). - Ленинград, 1982.
2. Серебряков В.А. Лекции по конструированию компиляторов.-ВЦ РАН Москва, 1994.
3. ЛьюисФ., Розенкранц Д., Стирнз Р. Теоретические основы проектирования компиляторов.-М Мир, 1979.
4. Рейуорд- Смит В.Дж. Теория формальных языков. Вводный курс.-М., 1988.
5. Хантер Р. Проектирование и конструирование компиляторов.-М.; финансы и статистика, 1984.
В данном разделе рассматривается один из важных вопросов, связанных с защитой информации - обнаружение несанкционированных записей и искажений в памяти ЭВМ. Своевременное обнаружение таких записей и искажений в программах управления техническими системами позволит избежать аварийных ситуаций, которые могут иметь катастрофические последствия не только для обслуживающего персонала, но и для окружающей среды.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.