Виведення ланцюжків у формальній граматиці
Математична модель формальної граматики та виведення ланцюжків. Розробка програми, що одержує на вході контекстно-вільну граматику, яка визначена правилами підстановки, та друкує в результаті роботи одне або більше виведення термінального ланцюжка.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 15.05.2011 |
Размер файла | 162,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Міністерство освіти та науки України
Житомирський державний технологічний університет
ФІКТ
Кафедра ПЗОТ
Група ПІ-39
Лабораторна робота №2
Тема: «Виведення ланцюжків»
м. Житомир,
2011р.
Мета роботи: вивчити математичну модель формальної граматики, одержати практичні навички виведення ланцюжків в формальній граматиці.
Завдання: потрібно написати програму, що одержує на вході контекстно-вільну граматику, яка визначена правилами підстановки, та друкує в результаті роботи одне або більше виведення термінального ланцюжка в граматиці.
Контекстно-вільну граматику вважати заданою у виді текстового файлу, кожен рядок якого вміщує єдине правило підстановки у вигляді -> ( -- ідентифікатор нетермінала, -- рядок ідентифікаторів терміналів і нетерміналів, розділених пробільними символами). Пустий ланцюжок ідентифікується відсутністю правою частиною правила підстановки. Довжина ідентифікаторів обмежена 32 символами. Ідентифікатори, які починаються з великої літери вважаються нетерміналами, з маленької -- терміналами, нетермінал в лівій частині першого правила підстановки вважається початковим символом.
Припустимо, що на вхід програми поступає граматика виду
S a = F ; |
|
F F + T | T T T * E | T / E | E E ( F ) | - ( F ) | a |
Тоді результатом роботи програми лабораторної роботи може бути рядок виведення
Sa = F ; a = T ; a = E ; a = a ;
Порядок виконання лабораторної роботи:
Написати програму на ЕОМ.
Здати працюючу програму викладачу.
Підготувати і захистити звіт.
Демонстрація роботи алгоритму на прикладі виведення речення в граматиці
Граматика, задана у вигляді текстового файлу:
S -> abr = aTest E Test;
Fu1 -> Fu1 + T | T
T -> T * E | E / E | E
E -> ( alma ) | - ( Fu1 ) | -ab-q(
Test -> Quite
Quite -> T | Quite
Результат роботи програми
Фрагменти коду програми
namespace KPZ__Lab2
{
public partial class Form1 : Form
{
Dictionary<string, string[]> list = new Dictionary<string, string[]>();
public Form1()
{
InitializeComponent( );
}
private void ReadFile(StreamReader files)
{
int indexBegin, indexEnd;
string strFile;
string strCheck;
string strKey;
while ((strFile = files.ReadLine()) != null)
{
List<string> strValue = new List<string>();
indexBegin = strFile.IndexOf(" -> ");
if (-1 != indexBegin)
{
if (strFile[strFile.Length - 1] != 32)
{
strFile += " ";
}
strCheck = strFile.Substring(0, indexBegin + 1);
if (strCheck[0] != 32)
{
strKey = "";
strKey += " ";
strKey += strFile.Substring(0, indexBegin + 1);
}
else
{
strKey = strFile.Substring(0, indexBegin + 1);
}
indexBegin = indexBegin + 3;
indexEnd = strFile.IndexOf(" | ", indexBegin);
while (indexEnd != -1)
{
strValue.Add(strFile.Substring(indexBegin, indexEnd + 1 - indexBegin));
indexBegin = indexEnd + 2;
indexEnd = strFile.IndexOf(" | ", indexBegin);
}
strValue.Add(strFile.Substring(indexBegin));
list.Add(strKey, strValue.ToArray());
}
}
}
private void button1_Click(object sender, EventArgs e)
{
string result = " S ";
int i = 0;
int j = 25;
int terminal = 1;
int random;
string[] strCutted;
list.Clear();
textBox2.Clear();
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "C:\\kpz2";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
using (StreamReader files = new StreamReader(openFileDialog1.FileName))
{
FileInfo infF = new FileInfo(openFileDialog1.FileName);
ReadFile(files);
}
}
Random rand = new Random();
while(1==1)
{
if (i > j)
{
i = j;
break;
}
terminal = 0;
foreach (string strKeys in list.Keys)
if (result.IndexOf(strKeys) != -1)
{
terminal = 1;
strCutted = result.Split(new string[] { strKeys }, 2, StringSplitOptions.None);
random = rand.Next(list[strKeys].Length);
result = strCutted[0] + list[strKeys][random] + strCutted[1];
textBox2.Text += "S ->" + result;
textBox2.Text += Environment.NewLine;
break;
}
i++;
}
button1.Enabled = true;
}
}
}
Висновок
математичний формальний граматика ланцюжок термінальний
Виконавши лабораторну роботу, я вивчила математичну модель формальної граматики, одержала практичні навички виведення ланцюжків в формальній граматиці.
Я написала програму, що одержує на вході контекстно-вільну граматику з (.txt) файлу, яка визначена правилами підстановки, та друкує в результаті роботи одне виведення термінального ланцюжка в граматиці.
Размещено на Allbest.ru
Подобные документы
Написання програми для виведення чисел Фібоначчі. Загальна характеристика мови Паскаль. Науковий доробок Леонардо Фібоначчі. Історія і властивості послідовності. Особливості програмування мовою Turbo Pascal. Відкалібрування та синхронізування програми.
курсовая работа [325,1 K], добавлен 09.10.2013Створення програми, яка друкує в вікно інформацію про натискання клавіш на клавіатурі в таблицю. Функція виведення назви отриманого програмою повідомлення від клавіатури та певних додаткових даних. Обробка інформації, неопрацьованої віконною процедурою.
лабораторная работа [17,9 K], добавлен 14.05.2011Визначення множини вхідних та вихідних лінгвістичних змінних нечіткої системи керування змішувачем. Аналіз побудови системи нечіткого виведення, розгляд його етапів, аналіз наукового та технічного застосування. Аналітичне рішення тестового прикладу.
курсовая работа [412,6 K], добавлен 17.05.2012Характеристика мов програмування. Історія виникнення мови C#, її особливості, версії та нові можливості. Приклад програм виведення на екран, виведення поточної дати та часу та програми музичного програвача. Програмний код та результат виконання програм.
контрольная работа [321,3 K], добавлен 13.06.2012Розробка структури програмного забезпечення, загальної схеми функціонування програми. Реалізація виведення графічних зображень, роботи з шлагбаумом, загальних елементів керування та музики. Інструкція з технічного обслуговування, системного програміста.
курсовая работа [3,1 M], добавлен 10.03.2009Розробка програми, що надає користувачу можливості керування додатками Microsoft PowerPoint: запуск вказаного додатку, переключення слайдів, виведення інформації про слайд , коректне завершення і вивантаження з пам’яті презентації, що переглядається.
курсовая работа [2,1 M], добавлен 21.04.2011Розробка програми-довідки про музеї Дрогобичини. Розгляд музею І. Франка в селі Нагуєвичі за допомогою середовища Eclipse. Виведення інформації про музей. Перехід між різними місцями в музеї. Супроводження текстового матеріалу графічними файлами.
курсовая работа [3,4 M], добавлен 24.02.2014Теоретичні відомості. Блок-схема. Текст програми. Результати роботи програми. Процедури і функції. Координати, вікна, сторінки. Багатокутники. Дуги, кола, еліпси. Фарби, палітри, заповнення. Збереження і видача зображень. Виведення тексту. Включення драйв
курсовая работа [345,2 K], добавлен 17.12.2005Аналіз сучасного стану технологій програмування. Порівняння відстані між центрами кіл з радіусами. Класи, які використовуються при розробці програми меню. Розробка та виконання тестового прикладу. Виведення кіл на екран та інструкція користувача.
курсовая работа [229,0 K], добавлен 14.03.2013Вивчення структури програми на Паскалі. Значення функції для будь-якого введеного значення аргументу. Введення-виведення за допомогою операторів Readln і Writeln, визначення їх відмінності від операторів Read і Write. Лістинг і результати роботи програми.
лабораторная работа [217,4 K], добавлен 04.11.2014