Смекни!
smekni.com

Факультет вычислительной математики и кибернетики (стр. 9 из 15)

и позволяющий эффективно определять новый объект ( экземляр

класса ), наследующий свойства класса .Предоставляя в распоряжение программиста библиотеку встроенных классов , Visual FoxPro позволяет вводить новые классы и создавать новые библиотеки классов .

Программы и приложения (CODE).В Visual FoxPro предоставлена возможность гибкого сочетания объектно - ориентированного стиля программирования с процедурно - ориентированными средствами ,

предусматривающая создание программных и процедурных файлов (PRG - файлов ) на языке FoxPro. Причем один из этих файлов выбирается в качестве главного ("запускающего") модуля , активизирующего соответствующие объекты , каждый из которых в свою очередь активизирует другие и т .п. .В результате компиляции проекта имеется возможность получения как EXE -файла, так и специального APP - файла , представляющего из себя промежуточный результат компиляции и выполняемого интерпретатором Visual FoxPro. Такие APP - - файлы , называемые приложениями , являются более компактными по сравнению с соответствующими EXE - файлами , однако могут выполняться только при наличии среды Visual FoxPro.

Другие объекты (OTHER) включают меню , текстовые и другие файлы , необходимые для разработки программ . Visual FoxPro представляет эффективные средства средства генерации меню - диалога .

Область применения СУБД Visual FoxPro охватывает достаточно широкий класс задач, однако наиболее очевидный эффект достигается

для информационно -расчетных задач , характерной особенностью которых является сочетание обработки больших информационных массивов с вычислительными задачами . Это - бухгалтерский учет , анализ финансово -хозяйственной деятельности предприятий , информационно - поисковые системы , системы автоматизации делопроизводства и т .п.

Для эффективной разработки и создания качественного программного продукта , ориентированного на решение перечисленных задач , очень важное значение имеет концептуальный подход к разработкам . Это -

- достаточно емкое понятие , предусматривающее в первую очередь строгую математическую формализацию модели разработки , с помощью которой можно было бы наиболее просто и компактно

описать и в дальнейшем эффективно реализовать сложные структурные связи между объектами и алгоритмами их обработки , четко отделяя второстепенные моменты от главных .

Например , разработка компьютерной бухгалтерии предусматривает создание комплекса подсистем : расчет заработной платы , касса , банк , материально складской учет , учет основных средств , работа с подотчетными лицами , поставщики -получатели и т .п. Каждая из подсистем должна включать в себя средства для получения огромного

числа различных отчетных документов с учетом различных бухгалтерских операций и специфики бухгалтерской отчетности для разных типов организаций . Кроме этого необходимо обеспечить возможности обмена данными между этими подсистемами и

экспорта результатов работы подсистем в автоматизированное рабочее место главного бухгалтера с целью получения конечных бухгалтерских документов (баланс , главная книга и т .п.). Все это представляет из себя достаточно сложную и трудоемкую задачу ,“лобовое” решение которой как правило не приносит ожидаемых результатов . С другой стороны концептуальный анализ этой проблемы показывает , что основная часть

перечисленных подсистем имеет одну и ту же общую основу , сводящуюся к расчету остатков на текущий период из оборотов и остатков предыдущего периода .Следовательно, разработку необходимо начинать с создания средств расчета остатков ,которые в последующем могут существенно облегчить задачу разработки и реализации упомянутых подсистем . Другим важным аспектом разработки

бухгалтерской системы является создание единых справочников , представляющих из себя источники первичной информации для всех соответствующих подсистем (план счетов , справочник финансовых операций с бухгалтерскими проводками , справочник источников финансирования , справочник подразделений предприятия и т .п.),

правильная организация которых обеспечивает универсальность и хорошую адаптируемость системы к изменениям .

Объектно - ориентированные средства , позволяя абстрагирование (обобщения) объектов разработки приложений с последующей их конкретизацией , представляют наиболее адекватный инструмент для создания различных информационно - расчетных приложений и удачно

“провоцируют” разработчиков этих приложений на выбор

концептуальных решений .

3.Теория и методы трансляции.

Трансляция - это процесс перевода текста исходной программы в эквивалентную объектную программу. Программное обеспечение ,

реализующее этот процесс называется транслятором . Если в результате трансляции генерируется объектная программа на ассемблере или некотором машинном языке, то вместо трансляции используется понятие компиляции , а сам транслятор называется компилятором.

Языки интерпретируемого типа предусматривают получение

в результате трансляции так называемого промежуточного кода

( традиционно - это линеаризованная структура со ссылками на программные модули) , выполнение которого осуществляется специальной программой , называемой интерпретатором. Для языков интерпретируемого типа происходит частичная компиляция , завершаемая генерацией промежуточного кода , который затем интерпретируется . Чаще всего интерпретатором называется программное обеспечение , реализующее весь этот процесс целиком ,

то есть частичная компиляция с генерацией промежуточного кода плюс интерпретация промежуточного кода . Поскольку и в том и другом случае выполняется процесс компиляции ( в случае интерпретации неполный ) , в последующем изложении материала будем в основном использовать термины "компиляция" и "компилятор" вместо "трансляция" и "транслятор" соответственно .

Большинство теоретических работ и методов для практической

реализации компиляторов появилось в 1970-х , а некоторые из них еще раньше. Первые разработки в этой области предусматривали создание нового компилятора для каждого нового появляющегося языка

программирования практически с самого начала . Однако существенная трудоемкость этого процесса и стремление к универсализации стимулировали появление инстументальных программных средств для автоматизации процесса создания компиляторов . В результате появился программный инструментарий , обеспечивающий генерацию готового компилятора на основе описания синтаксиса и семантики соответствующего языка программирования . Этот инструментарий , впоследствии названный " компилятором компиляторов " , получил большое распространение в процессе создания компиляторов . К числу самых известных разработок в этом плане можно отнести генераторы лексического и синтаксичес-кого анализаторов LEX и YACC , работающих в UNIX -среде .

К настоящему времени опубликовано достаточно большое количество работ , посвященных теории и практике компиляции , однако большинство из них либо содержат сложно воспринимаемый теоретический базис , либо представляют слишком прагматический материал . В этой связи рекомендуется использовать книгу [ 6 ] , которая достаточно прозрачно и компактно представляет теоретические и практические основы компиляции . Представляемый в пособии материал

никоим образом не претендует на полноту охвата всех существующих методов компиляции .Вместо этого предлагается материал , позволяющий акцентировать внимание на концептуальных основах процесса компиляции и принципиального понимания соответствующих методов .

3.1. Определение языка.

Определение языка программирования также , как и любого другого языка,основывается на двух главных понятиях :синтаксис и семантика.

Синтаксис определяет правила для описания правильных конструкций языка , а семантика - смысловую интерпретацию этих конструкций .

3.1.1.Синтаксис .

Существует множество различных способов описания синтаксиса языков программирования . Если язык состоит из конечного числа строк , то его определение может быть сделано перечислением всех его элементов . Так как все языки программирования содержат бесконечное число строк , то требуется найти способ представления бесконечного числа строк конечным образом .

Рассмотрим примеры описания бесконечного числа строк символов.

Пример1 . Язык который состоит из произвольного количества символа x

Может быть определен в виде выражения { x n | n>0 } , где n - целое , а

умножение здесь трактуется как конкатенация .

Пример2 . Язык который состоит из произвольного количества

символа x , после которого следует произвольное количество

символов y . Этот язык определяется в виде выражения

{ x m y n | m,n>0 } , где m,n - целые .

Пример 3. Если язык определить в виде выражения

{ x m y n | m,n ³ 0 } , то допустимыми являются строки вида

xxx ( при n=0 ) ,уууу (при m=0) , а также пустая строка (при m=0 , n=0), которую будем обозначать <> .

Пример 4 . Язык , определенный в примере 3 , можно переопределить

по другому : x * y * , где символ "* " (звездочка Клини) обозначает , что предшествующий ему элемент , используется нуль или большее число раз (представление с помощью языка регулярных выражений ).

Пример 5 . Выражение вида xx * yy * определяет язык , каждая строка которого содержит как минимум по одному элементу x и y .

Рассмотрим формальное определение регулярных выражений , которые были использованы в перечисленных выше примерах . Вводится понятие алфавита , представляющего конечный набор символов . Например ,

{ A..Z } , { 0..9 } , { А..Я } и т.п. .

Регулярными выражениями являются :

1) пустая строка (<>) ;

2) любой элемент из алфавита .

Далее , если P и Q - регулярные выражения , то регулярными являются

выражения :

3) PQ (Q следует за P ) ;

4) P | Q (P или Q) ;

5) P * ( нуль или большее число вхождений P) .