![]()  | 
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
| 
 | 
Атрибутные грамматики, впервые предложенные Д. Кнутом, в идеале призваны контролировать смысловую корректность формальных грамматик. Смысл обычно задается операционно или декларативно.
Атрибутные грамматики позволяют работать с атрибутами - (дополнительными) характеристиками, которые приписываются операторам и операндам.
В примерах грамматики с синтезируемыми атрибутами (восходящие грамматики) и наследуемыми атрибутами (нисходящие грамматики).
Пусть дан фрагмент грамматики:
S ® T | T * T | (T)
T ® T + T | T * T | a | b | c | d
Тогда дерево вывода и пример атрибутной грамматики с синтезируемыми атрибутами (здесь с числовыми типами) будет:
r
     * i ® r
 
 
 
 
 r r i i i - integer r - real  |  
S
![]()  |  ![]()  |  ![]()  |  
 T * T
![]()  |  ![]()  |  ![]()  |  
T + T T - T
Пример наследуемых атрибутов приведен на следующем рисунке:
 x:= if A then b else C
 
 
:=
 
 
 i
 
 
 
 x if i r®i
![]()  |  ![]()  |  ![]()  |  
A B C
b r i
YACC
yacc - программа синтаксического анализа (y et a nother c ompile of c ompiles).
Также как и lex – ‘она начально была написана, как команда для ОС UNIX.
Часто эти команды используются совместно.
Дата публикования: 2014-11-03; Прочитано: 372 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!
