Реферат по предмету "Информатика, программирование"


Виведення ланцюжків у формальній граматиці

Міністерствоосвіти та науки України
Житомирськийдержавний технологічний університет
ФІКТ
КафедраПЗОТ
ГрупаПІ-39
Лабораторнаробота №2
Тема:«Виведення ланцюжків»
м. Житомир,
2011р.

Мета роботи: вивчити математичну модельформальної граматики, одержати практичні навички виведення ланцюжків вформальній граматиці.
Завдання: потрібно написати програму, що одержує навході контекстно-вільну граматику, яка визначена правилами підстановки, тадрукує в результаті роботи одне або більше виведення термінального ланцюжка вграматиці.
Контекстно-вільну граматику вважати заданою у видітекстового файлу, кожен рядок якого вміщує єдине правило підстановки у вигляді a -> b (a —ідентифікатор нетермінала, b — рядокідентифікаторів терміналів і нетерміналів, розділених пробільними символами).Пустий ланцюжок ідентифікується відсутністю правою частиною правилапідстановки. Довжина ідентифікаторів обмежена 32 символами. Ідентифікатори, якіпочинаються з великої літери вважаються нетерміналами, з маленької —терміналами, нетермінал в лівій частині першого правила підстановки вважаєтьсяпочатковим символом.
Припустимо, що на вхід програми поступає граматика видуS ® a = F ;
F ® F + T | T
T ® T * E | T / E | E
E ® ( F ) | – ( F ) | a
Тоді результатом роботи програми лабораторної роботиможе бути рядок виведення
SÞa = F; Þa = T; Þa = E; Þa = a ;
Порядок виконання лабораторної роботи:
1. Написати програму на ЕОМ.
2. Здати працюючу програму викладачу.
3. Підготувати і захистити звіт.
Демонстрація роботи алгоритму на прикладі виведення речення в граматиці
 
Граматика, задана у вигляді текстового файлу:
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 list = newDictionary();
          
        public Form1()
        {
            InitializeComponent(    );
        }
        private void ReadFile(StreamReader files)
        {
            int indexBegin, indexEnd;
            string strFile;
            string strCheck;
            string strKey;
        
            while ((strFile = files.ReadLine()) != null)
            {
                List strValue = new List();
                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 = newStreamReader(openFileDialog1.FileName))
                {                 
                    FileInfo infF = newFileInfo(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) файлу, яка визначена правиламипідстановки, та друкує в результаті роботи одне виведення термінальноголанцюжка в граматиці.


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Службы социальной помощи населению
Реферат Оценка параметрической надежности РЭС с использованием моделирования на ЭВМ постепенных отказов
Реферат Проблема счастья и долга в романе "Евгений Онегин"
Реферат Актуализация сниП 31-01-2003, 2010 г. Условные обозначения
Реферат Художественные особенности героической былины Добрыня и Змей
Реферат 2. Установить ограничение на продажу автомобильного топлива на автозаправочных станциях в объеме не более 200 литров на одно грузовое транспортное средство
Реферат Творческие задания и их роль в формировании познавательных интересов младших школьников на уроках русского языка и математики
Реферат Bath And Body Works Store Essay Research
Реферат Малая гидроэлектростанция в Беларусии
Реферат Клиника и диагностика артерий нижних конечностей
Реферат Физиологические механизмы закаливания организма
Реферат Формирование выразительной письменной речи как важнейшего компонента литературных способностей учащихся 6х классов
Реферат Учет труда, заработной платы и расчетов с персоналом по оплате труда
Реферат Уклад жизни школы как фактор духовно-нравственного развития его субъектов
Реферат Зависимость продуктивности душицы от способа получения посадочного материала