Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 4
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Обучающая и тестирующая программа по здаче экзамена ПДД на Turbo Pascal ...
Моделирование работы обрабатывающего участка цеха в GPSS
База данных междугородних телефонных разговоров на Delphi

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








Исходники:

Опубликовал Kest February 15 2010 11:47:38 · 0 Комментариев · 16926 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Delphi 2005 для .NET
Шифрование по алг...
Последние загруж...
Crypt32
Развивающийся фла...
PDJXPPack
База данных фильм...
Программа рисует ...
PolyFlow
BDEPack
Упорядоченный дин...
около 291 статьи ...
Delphi Быстрый Ст...
DateEdit
Сложный калькулятор
RbControls
PrevInst
Киллер окон
Учебник для продв...
Zoom [Исходник на...

Топ загрузок
Приложение Клие... 100800
Delphi 7 Enterp... 98064
Converter AMR<-... 20302
GPSS World Stud... 17068
Borland C++Buil... 14261
Borland Delphi ... 10388
Turbo Pascal fo... 7398
Калькулятор [Ис... 6093
Visual Studio 2... 5241
Microsoft SQL S... 3676
Случайные статьи
В примере использу...
Ремонт телефонов П...
Функция сохранени...
Файл main.срр — пр...
Введение в язык XSLT
Главная угроза веб...
Расширенные буферы...
Виртуальное казино...
Силовой модуль PW70
Выполнение функций...
расположены в разн...
Реализация вызова ...
Б-деревья
IP адрес, подсети,...
Глава 17. Страт...
Обход ферзем
Постоянно обновляй...
Видеокарта
ЦЕЛЬ: ХРАНЕНИЕ МНО...
Вход в SQL*PLUS. ...
Полудуплексные про...
«Умный» массив
PNG — это формат г...
Программа выбора н...
Виртуальный букмек...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?