КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Интерпретатор
После лексической обработки и расстановки ссылок последовательность лексем, массивы идентификаторов и констант поступают на обработку интерпретатору. Задача интерпретатора - распознать конструкции языка и выполнить действия, предписанные входной программой. Учитывая, что синтаксический разбор будет производиться над массивом лексем, уточним грамматику языка МИЛАН, которая будет использована для синтаксического анализа последовательности лексем. Множество терминалов в уточненной грамматике - это множество лексем. Уточненная грамматика языка МИЛАН: 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) Здесь и - число идентификаторов и констант; нетерминалы обозначают конструкции языка: - <программа>; -<последовательность операторов>; - <оператор>; - <условие>; - <выражение>; - <терм>; - <множитель>; - <константа>; O - <знак отношения>; M - <операция типа умножения>; N - <операция типа сложения>; I - <идентификатор>. Построим синтаксические диаграммы интерпретатора языка МИЛАН (рис. 9-10). Из диаграммы видно, чтограмматика языка МИЛАН является - грамматикой. Для описания семантических функций синтаксической диаграммы интерпретатора введем следующие обозначения: $Number_Lexem - номер очередной рассматриваемой лексемы в массиве лексем; $Stek Res - стек результатов вычислений; $StekIdent - стек идентификаторов; $StekMul - стек для операций типа умножения; $StekSum - стек для операций типа сложения; $StekRel - стек для операции отношения; $Arrident – стек текущих значений идентификаторов.
Рис. 9. R-схема интерпретатора: нетерминальные символы , , . Рис. 10. R-схема интерпретатора: нетерминальные символы , , , . Семантические функции к R-схеме интерпретатора: y0: инициализация стеков и переменных; y1: занесение в стек $StekRes идентификатора $Tab_Lexems[$Number_Lexem]->Value; y2: занесение в стек $StekRes константы $Tab_Lexems[$Number_Lexem]->Value; y3: прочитать целое число с терминала в переменную $Cifra и положить его в $StekRes ($Cifra→$StekRes); y4: чтение следующей лексемы ($Number_Lexem++); y5: занесение в стек $StekMul значение операции типа умножения ($Tab_Lexems[$Number_Lexem]->Value→$StekMul); y6: в переменную $Bi снять элемент со стека $StekRes ($Bi←$StekRes), в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), в переменную $kmul снять элемент со стека $StekMul ($kmul←$StekMul), выполнить операцию типа умножение $Ai otu($kmul) $Bi и результат занести в стек $StekRes; y7: занесение в стек $StekSum кода операции типа сложения; y8: в переменную $ksum снять со стека $StekSum значение лексемы ots ($ksum←$StekS um), если $ksum=1, то снять в переменную $Ai элемент со стека $StekRes ($Ai←$StekRes), сменить знак этого числа и занести его в стек $StekRes (-$Ai→$StekRes); y9: занесение в стек $StekSum кода операции типа сложения; y10: в переменную $Bi снять элемент со стека $StekRes ($Bi←$StekRes), в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), в переменную $ksu m снять элемент со стека $StekSum ($ksum←$StekSum), вы полнить операцию типа сложение $Ai ots($ksum) $Bi и результат занести в стек $StekRes; y11: добавление в стек $StekRel значения операции типа отношение ($Tab_Lexems[$Number_Lexem]->Value→$StekRel); y12: в переменную $Bi снять элемент со стека $StekRes ($Bi←$StekRes), в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), в переменную $krel снять элемент со стека $StekRel ($krel←$StekRel), выполнить операцию сравнения $Ai otn($krel) $Bi и результат занести в стек $StekRes ([0, 1] →$StekRes); y13: добавить значение лексемы с номером Number_Lexem в стек StekIdent ($Tab_Lexems[$Number_Lexem]->Value→$StekIdent); y14: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), в переменную $Bi снять со стека $StekIdent значение лексемы ident ($Bi←$StekIdent), идентификатору с номером $Bi, присвоить значение $Ai ($ArrIdent[$Bi]=$Ai); y15: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), на печатать переменную $Ai; y16: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), если $Ai=1, то это истина, иначе - ложь; y17: перейти на лексему номер $Tab_Lexems[$Number_Lexem]->Value; y18: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), если $Ai=1, то это истина, иначе - ложь; y19: перейти на лексему номер $Tab_Lexems[$Number_Lexem]->Value-1; y20: завершение работы; Пример №3: Рассмотрим пример обработки программы на языке МИЛАН.
Результаты работы лексического анализатора: 1) Таблица лексем
2) Таблица идентификаторов 3) Таблица констант
Дата добавления: 2014-10-15; Просмотров: 478; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |