Курсовая работа на тему: Лексический анализатор программ на языке Visual Basic

Заказ 373

Цена полной версии: 1500 рублей

Курсовая работа на тему: Лексический анализатор программ на языке Visual Basic

Оглавление

Введение. 3

1.Анализ технического задания. 5

1.1.Лексический анализ в программировании. 5

1.2.Лексический анализатор. 6

1.3.Описание языка. 7

1.4. Лексемы.. 8

1.4.1. Что такое лексемы.. 8

1.4.2.Типичные классы лексем.. 8

1.4.2.Таблица лексем.. 9

1.5.Регулярные выражения. 9

1.6.Инструменты для создания лексических анализаторов. 13

1.6.1. Генератор лексических анализаторов Lex. 13

1.6.2. Структура Lex-программы.. 14

1.6.3.Способы записи регулярных выражений в Lex-программе. 15

1.6.4.Пример Lex-программы.. 16

  1. Описание исходных данных, порядок лексического анализа. 17

2.1 Исходные данные. 17

2.2.Общая схема работы лексического анализатора. 21

2.2.1. Как работают регулярные выражения. 23

2.2.Обзор методов решения поставленной задачи. 23

2.2.1.Построение расширяемого лексического анализатора, на базе регулярных выражений. 23

2.2.2.Альтернативный способ построения расширяемого лексического анализатора. 26

2.2.3.Работа анализатора по регулярным выражениям.. 27

2.2.4.Использование   регулярных выражений при программировании на языке Visual Basic. 28

2.3.Использование регулярных выражений и масок для проверки ввода данных пользователем   31

  1. Программная реализация разработанной структуры и алгоритмов. 33

3.1 Проектирование структуры программы и базовых алгоритмов. 33

3.2 Выполнение действий, связанных с лексемами. 34

3.3 Работа с регулярными выражениями. 34

3.4 Генератор лексических анализаторов. 35

3.5 Конечный автомат. 36

3.5 Принцип работы.. 37

3.5 Преобразование регулярного выражения в недетерминированный автомат. 37

4.Руководство программиста. 43

  1. Руководство пользователя. 44
  2. Результататы тестирования. 44

Заключение. 46

Литература. 46

Введение

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

Одними их важнейших программ являются лексические анализаторы.

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

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

Visual Basic for Applications (VBA) – является базовым языком программирования в приложениях Microsoft Office (Word, Excel, Access, PowerPoint, и др.). С помощью VBA можно создавать макросы, которые позволяют автоматизировать рутинную повторяющуюся работу с документами, электронными таблицами, презентациями и т.д.. Знание принципов и основ подобного программирования позволит решать любые задачи: от простых, но эффективных макросов «на каждый день», помогающих рядовым пользователям в их работе, до серьезных проектов корпоративного уровня.

Поэтому обучение работе с этим языком крайне важно.

Цель работы: составить лексический анализатор для языка Visual Basic.

Тема: Обнаружение ошибки при вводе данных пользователем и с выдачей сообщения об ошибке.

1.Анализ технического задания

1.1.Лексический анализ в программировании

Лексический анализ — это процесс сканирования потока входных символов и разделения его на строки, называемые лексемами.

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

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

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

 

…………………………

………………………….

…………………………

1.6.3.Способы записи регулярных выражений в Lex-программе

Рассмотрим способы записи регулярных выражений во входном языке Lex’а. Символ из входного алфавита, естественно, представляет регулярное выражение из одного символа. Специальные символы (в том числе +-*?()[]{}|/\^$.<>) записываются после префикса \. Символы и цепочки можно брать в кавычки, например допустимы следующие три способа кодирования символа а: а, «а» и .

Имеется возможность задания класса символов:

[0-9] или [0123456789] – любая цифра

[A-Za-z] – любая буква

[^0-7] – любая литера, кроме цифр от 0 до 7

. – любая литера, кроме \n

Грамматика для записи регулярных выражений (в порядке убывания

приоритета):

<р>* – повторение 0 или более раз

<р>+ – повторение 1 или более раз

<р>? – необязательный фрагмент

<р><р> – конкатенация

<р>{m,n} – повторение от m до n раз

<р>{m} – повторение m раз

<р>{m,} – повторение m или более раз

^<р> – фрагмент в начале строки

<р>$ – фрагмент в конце строки

<р>|<р> – любое из выражений

<р>/<р> – первое выражение, если за ним следует второе

(р) – скобки, используются для группировки

Пример. Регулярное выражение ^[^aeiou]*$ означает любую строку, не содержащую букв a, e, i, o.

……………………..

……………………..

……………………….

2.2.2.Альтернативный способ построения расширяемого лексического анализатора

При ручном программировании лексических анализаторов часто применяют другой алгоритм работы лексического анализатора:

  1. Начиная читать очередную лексему, лексический анализатор распознаёт её тип по первому символу или по нескольким первым символам. В последнем случае говорят, что лексический анализатор «заглядывает» на несколько символов вперёд.
  2. После определения типа лексемы, остаток дочитывается произвольным алгоритмом. В случае, если остаток не удаётся дочитать, лексический анализатор сигнализирует об ошибке.

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

При этом ограничение первого пункта кажется вполне разумным, поскольку подобное поведение очень похоже на поведение человека при чтении текста. Будем исходить из вполне правдоподобного предположения, что человек склонен к определённости. Тогда если прочитав достаточно большой префикс лексемы человек всё ещё не может с определённостью сказать какого типа лексема перед ним, это вызовет у человека дискомфорт. Таким образом, данный алгоритм работы лексического анализатора неспособен распознавать лишь некомфортные для человека системы лексем. Отчасти поэтому несмотря на свои ограничения подобный подход достаточно распространён.

……………………..

……………………

……………………

3.2 Выполнение действий, связанных с лексемами

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

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

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

Набор выполняемых действий определяется реализацией компилятора. Обычно эти действия выполняются сразу же при обнаружении конца распознаваемой лексемы.

В конечном автомате, лежащем в основе лексического анализатора, эти действия можно отобразить довольно просто — достаточно иметь возможность с каждым переходом на графе автомата (или в функции переходов автомата) связать выполнение некоторой произвольной функции f(q,a), где q — текущее состояние автомата, a — текущий входной символ.

Функция f(q,a) может выполнять любые действия, доступные лексическому анализатору:

…………………….

……………………

…………………..

5. Руководство пользователя.

В среде Lazarus запустить модуль VBScan;

6. Результататы тестирования.

Для тестирования использовалась программа на языке VBA;

using System.Drawing;

using System.Windows.Forms;

 

namespace WindowsFormsApplication5

{

public partial class Form1 : Form

{

TextBox textBoxA;

TextBox textBoxB;

TextBox textBoxC;

TextBox textBoxX;

 

public Form1()

{

InitializeComponent();

textBoxA = new TextBox();

textBoxA.Location = new Point(10, 10);

textBoxB = new TextBox();

textBoxB.Location = new Point(10, textBoxA.Bottom + 10);

textBoxC = new TextBox();

textBoxC.Location = new Point(10, textBoxB.Bottom + 10);

Button btn = new Button();

btn.Location = new Point(10, textBoxC.Bottom + 10);

btn.Text = «Вычислить»;

textBoxX = new TextBox();

textBoxX.Location = new Point(10, btn.Bottom + 10);

this.Controls.AddRange(new Control[] {textBoxA, textBoxB,

textBoxC, textBoxX, btn});

btn.Click += (sender, e) =>

{

if (textBoxA.Text != «» && textBoxB.Text != «» && textBoxC.Text != «»)

textBoxX.Text = (int.Parse(textBoxA.Text) + int.Parse(textBoxB.Text) + int.Parse(textBoxC.Text)).ToString();

else

textBoxX.Text = «Нету значений»;

};

}

}

………………………….

………………………..

…………………………

 

Заключение

В данной работе были изучены принципы работы лексического анализатора , программно реализована программа- анализатор VBScan.

Реализовано описанные в методических указаниях типы данных, процедуры и функции лексического анализатора в виде отдельного модуля (модуль назвать VBScan);

Создан в среде Lazarus отдельный проект и подключен к нему созданный модуль VBAScan;

Реализована в проекте возможность открытия файлов с программами на языке VB, с использованием компоненты TMemo;

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

 

 

Литература

 

  • Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений.
  • М.: Вильямс, 2002.
  • Поликарпова Н. И., Шалыто А. А. Автоматное программирование. СПб.: Питер, 2009.
  • Свердлов С.З.,Языки программирования и методы трансляции;Учебное пособие.-СПб.;Питер 2007,-638 с.;ил.
  • Ахо Ф.В.,Лам М.С.,Сети Р.,Ульман Д.Д., Компиляторы;принципы, технологии и инструментарий, 2-е изд..; пер. с фнгл.-М.;Издательский дом «Вильямс»,2008.=1184 с.;ил.
  • Мансуров К.Т., основы программирования в среде Lazaurus/2010/-772 с.;ил.
  • Алексеев Е.Р., Чеснокова О.В., Кучер Т.В., самоучитель по программированию на Free Pascal и Lazaurus.-Донецк.;ДонНТУ,
  • Технопарк ДонНТУ УНИТЕХ. 2009.-503 с.
  • Н.Н.Чернышова Основные понятия языка программирования VBA :Учебно – методическое пособие. — Нижний Новгород: Издательство Нижегородского государственного университета, 2005. – 29с.