29379

Основные функции и построение семантического анализатора программ

Доклад

Информатика, кибернетика и программирование

При работе семантических программ широко используется набор данных с организацией в виде стека. Операнды переписываются в выходную строку а операторы заносятся в стек. В зависимости от приоритета операторов при записи в стек оператор может вытолкнуть из стека другой оператор который последовательно записывается в выходную строку. Работа со стеком организуется так:1.

Английский

2013-08-21

43 KB

1 чел.

19)Основные функции и построение семантического анализатора программ.

Семантический анализ является центральной фазой трансляции, связывающей 2 ее логические части: анализ исходной программы и синтез объектной программы. На этапе семантического анализа обрабатываются программные конструкции, распознанные синтаксическим анализаторомОсновные функции семантического анализатора:
1. Заполнение таблиц имен. Таблица формируется на этапе лексического анализа, где в нее помещаются все уникальные имена, распознанные сканером. Во время семантического анализа для каждого имени заносятся все данные, полученные из текста программы (тип идентификатора, тип значений и т.д.).
2. Выделение неявно заданной информации. В представлении программ некоторые данные об элементах программы не указаны явно.
3. Обнаружение ошибок. Синтаксический анализ определяет корректность отдельных конструкций и программы в целом с точки зрения формальных правил используемого языка, но и здесь могут быть ошибки (не согласованы типы правой и левой частей оператора присваивания, несколько одинаковых меток и т.д.).
4. Выполнение некоторых операций программы: присваивание начальных значений; действия с константами; обработка директив компилятора.
5. Формирование внутренней формы программы. Часто используются такие формы, как семантическое дерево, польская запись, список тетрад.
Формирование внутренней формы исходной программы семантический анализатор (СА) осуществляет не для всей программы в целом, а по частям, последовательно для каждой распознанной синтаксической конструкции. Поэтому СА обычно состоит из ряда процедур, каждая из которых предназначена для обработки конструкций конкретного типа, и называемых семантическими программами. Взаимодействие семантических программ производится путем обмена данными через информационную таблицу (таблицу имен). Например, семантическая программа, обрабатывающая описания переменных и массивов, вносит их типы в таблицу имен, далее эта информация используется при работе семантических программ, анализирующих выражения и операторы присваивания.
При работе семантических программ широко используется набор данных с организацией в виде стека. Рассмотрим алгоритм преобразования выражения в польскую запись и список тетрад: алгоритм Дейкстра.

Входная строка считывается поэлементно слева направо. Операнды переписываются в выходную строку, а операторы заносятся в стек. В зависимости от приоритета операторов, при записи в стек оператор может вытолкнуть из стека другой оператор, который последовательно записывается в выходную строку. 
Работа со стеком организуется так:
1. Если анализируемый оператор имеет больший приоритет, чем оператор в вершине стека, то он записывается в стек, не выталкивая другого оператора. В противном случае из стека последовательно выбираются и записываются в выходную строку все операторы, имеющие больший или равный приоритет, а только затем анализируемый оператор записывается в стек.
2. Левая скобка любого типа всегда записывается в стек, не выталкивая ни одного оператора; правая скобка в стек не заносится, но выталкивает из стека все операторы до ближайшей левой скобки того же типа(пара левой и правой скобок “уничтожают” друг друга и в выходную строку не записываются).
3. После чтения входной строки в стеке могут остаться операторы, которые последовательно должны быть переписаны в выходную строку.
Выражение, представленное в польской записи, можно вычислить за 1 просмотр слева направо. В алгоритме вычисления выражений в польской записи стек используется для хранения операндов.
 Алгоритм включает следующие шаги:
1. Если считываемый символ является операндом, то его значение записывается в стек.
2. Если считываемый символ является бинарным оператором, то из стека извлекаются 2 верхних элемента, над ними выполняется соответствующая операция, и результат записывается в стек.
3. Если считываемый символ является унарным оператором, то из стека извлекается 1 верхний элемент, над ним выполняется соответствующая операция, и результат записывается в стек. 
4. Шаги 1─3 повторяются, пока не будут считаны все символы входной строки. Результат вычислений остается в стеке.
Это алгоритм применяется для формирования тетрадной формы программы. В нем в стек записываются не значения операндов, а их символьные обозначения.


 

А также другие работы, которые могут Вас заинтересовать

40951. Работа со звуком в Flash 939 KB
  Работа со звуком во Flsh Введение Где взять звуки Добавление звука во Flsh Импорт звуков Различные виды синхронизации Применение компрессии к выбранным звукам Применение компрессии ко всем звукам Общие рекомендации по экспорту звука
40952. Создание Flash презентации 807.5 KB
  Создание Flshпрезентации Основные принципы создания презентации Способы создания презентации во Flsh Создание презентации Основные принципы создания презентации Способы создания презентации во Flsh Создание презентации Введение Презентация грамотно разработанная с помощью Flsh будет выгодно выделяться среди шаблонных продуктов рожденных в инкубаторе Microsoft Power Point. Основные принципы создания презентации Очень важно чтобы ваша презентация имела цельный законченный вид. После создания структуры...
40953. Программирование в Flash 785.5 KB
  Программирование во Flsh План Введение Знакомство с панелью Действия ctions Работа с действиями объектов Использование действий Возможности управления сценами с помощью сценариев ctionScript События мыши
40954. Объявление и инициализация переменной типа bool. Вывод данных на консоль 97 KB
  Консолью называется окно операционной системы, в котором пользователи взаимодействуют с операционной системой. Приложение может считывать пользовательский ввод из стандартного входного потока, записывать обычные данные в стандартный выходной поток и записывать данные об ошибках в стандартный поток сообщений об ошибках.
40955. Оператор выбора switch 358 KB
  Пример using System; nmespce Consoleppliction5 { clss Progrm { sttic void Minstring[] rgs { int cseSwitch = 5; switch cseSwitch { cse 1: Console. Если за меткой cse нет списка операторов то операторы brek goto cse или goto defult необязательны В примере управление передается списку операторов следующему за меткой cse 2 using System; nmespce Consoleppliction5 {...
40956. Политические идеи современности 75 KB
  В наши дни наблюдается усиление прикладного характера современных политических идей их использования для решения конкретных социальных и экономических проблем. Для него характерно пристальное внимание к вопросам социальных гарантий политической демократии. С одной стороны социальная драма модели государственного социализма догматического марксизма и в то же время – успех социалдемократии в решении социальных программ превращение в авторитетную политическую силу современности. Политическая дифференциация России выдвигает проблему...
40957. Пример использования делегата 112 KB
  Сортируемый класс Employee описывает данные о сотрудниках: код фамилия имя дата приема на работу заработная плата. Это реализуется определением в коде программы делегата: delegte bool CompreOpobject lhs object rhs; Сигнатуру метода сортировки Sort определим следующим образом: sttic public void Sortobject[] sortrry CompreOp gtMethod Параметр sortrry задает массив сортируемых объектов в рассматриваемом примере массив экземпляров класса Employee а параметр gtMethod – метод принимающий два параметра и возвращающий true если...
40958. Концепция типов данных 121.5 KB
  C поддерживают концепцию соглашение типов данных которая включает следующие договорённости: каждая переменная константа выражение функция относятся к некоторому типу; тип объекта либо определяется по внешнему виду либо задаётся специальным описанием; тип Т определяет множество значений допустимых для данных этого типа множество допустимых операций множество функций определённых для данных этого типа Т. Тип Т = {DomT OPT FunT} { некоторая область памяти её размер способ представления...
40959. Использование двоичного кода 357.5 KB
  Т подходящее имя для обобщенного типа: public clss List T { } public clss LinkedList T { } если к обобщенному типу предъявляются специальные требования например что тип должен реализовывать интерфейс либо наследоваться от определенного класса или же используется два или более обобщенных типа в качестве параметров то следует применять осмысленные имена типов: public delegte void EventHndler TEventrgs object sender TEventrgs e; public delegte TOutput Converter TInput T0utput TInput from; public clss SortedList TKey...