close

Вход

Забыли?

вход по аккаунту

?

lab3Отчет (2)

код для вставкиСкачать
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
Ульяновский государственный Технический университет
Дисциплина "Теория автоматов"
Лабораторная работа №3
"Элементы языка сценариев. Арифметические выражения"
Выполнил: студент группы ИВТбд-21
Ефимов Дмитрий
Проверил:
Лапшов Ю.А.
Ульяновск 2013
Содержание
1. Постановка задачи.
2. Текстовое описание.
3. Отображение автомата в виде графа.
4. Таблица обозначений.
5. Пример входных данных.
1. Постановка задачи.
Требуется выполнить программную реализацию автомата, вычисляющего значения арифметических выражений. Автомат выполняется в виде класса, содержащего метод, принимающий на вход выражение, а на выходе выдающий булевское значение, показывающее, является ли выражение корректным. Другим методом реализуемого класса является метод получения результата вычисления.
Выражение в класс передается как строка. Строка может содержать пробелы между операндами, операциями и скобками.
Тип автомата - Мура.
Вариант - №5; тип операндов - целые, от 0 до 65535.
2. Текстовое описание.
Данный автомат реализуется на языке C#. Для обозначения состояний и переходов по ним используется оператор выбора switch-case.
Рассматриваем поочередно каждый символ:
1. Если этот символ - число (или переменная), то просто помещаем его в выходную строку.
2. Если символ - знак операции (+, -, *, / ), то проверяем приоритет данной операции. Операции умножения и деления имеют наивысший приоритет (допустим он равен 3). Операции сложения и вычитания имеют меньший приоритет (равен 2). Наименьший приоритет (равен 1) имеет открывающая скобка.
Получив один из этих символов, мы должны проверить стек: а) Если стек все еще пуст, или находящиеся в нем символы (а находится в нем могут только знаки операций и открывающая скобка) имеют меньший приоритет, чем приоритет текущего символа, то помещаем текущий символ в стек.
б) Если символ, находящийся на вершине стека имеет приоритет, больший или равный приоритету текущего символа, то извлекаем символы из стека в выходную строку до тех пор, пока выполняется это условие; затем переходим к пункту а).
3. Если текущий символ - открывающая скобка, то помещаем ее в стек.
4. Если текущий символ - закрывающая скобка, то извлекаем символы из стека в выходную строку до тех пор, пока не встретим в стеке открывающую скобку (т.е. символ с приоритетом, равным 1), которую следует просто уничтожить. Закрывающая скобка также уничтожается.
Если вся входная строка разобрана, а в стеке еще остаются знаки операций, извлекаем их из стека в выходную строку.
static bool x0()
{
if (k >= 2)
{
return true;
}
return false;
}
static bool x1()
{
if (str[i] == '1' || str[i] == '2' || str[i] == '3' || str[i] == '4' || str[i] == '5' || str[i] == '6' || str[i] == '7' || str[i] == '8' || str[i] == '9' || str[i] == '0') {
return true;
}
return false;
}
static bool x2()
{
if (str[i] == '*' || str[i] == '/') {
return true;
}
return false;
}
static bool x3()
{
if (str[i] == '+' || str[i] == '-') {
return true;
}
return false;
}
static bool x4()
{
if (str[i] == '(') {
return true;
}
return false;
}
static bool x5()
{
if (str[i] == ')' && brackets > 0)
{
return true;
}
return false;
}
static bool x6()
{
if (str[i] == ')' && brackets == 0)
{
return true;
}
return false;
}
static bool x7()
{
if (i == str.Length) {
return true;
}
return false;
}
static bool x8()
{
if (brackets != 0)
{
return true;
}
return false;
}
static bool x9()
{
if (i == outStr.Length)
{
return true;
}
return false;
}
static bool x10()
{
if (outStr[i] == '1' || outStr[i] == '2' || outStr[i] == '3' || outStr[i] == '4' || outStr[i] == '5' || outStr[i] == '6' || outStr[i] == '7' || outStr[i] == '8' || outStr[i] == '9' || outStr[i] == '0')
{
return true;
}
return false;
}
static bool x11()
{
if (outStr[i] == '*' || outStr[i] == '/' || outStr[i] == '+' || outStr[i] == '-')
{
return true;
}
return false;
}
static bool x12()
{
if (outStr[i] == '*')
{
return true;
}
return false;
}
static bool x13()
{
if (outStr[i] == '/')
{
return true;
}
return false;
}
static bool x14()
{
if (outStr[i] == '+')
{
return true;
}
return false;
}
static bool x15()
{
if (outStr[i] == '-')
{
return true;
}
return false;
}
Документ
Категория
Рефераты
Просмотров
12
Размер файла
24 Кб
Теги
lab3отчет
1/--страниц
Пожаловаться на содержимое документа