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

Автор работы: Пользователь скрыл имя, 21 Июля 2015 в 12:25, курсовая работа

Описание работы

Спроектировать и программно реализовать транслятор с естественного языка на язык программирования - Limbo. Транслятор написан на языке программирования – С#.
Разработанная программа должна считывать определенные конструкции естественного языка, распознавать их и преобразовывать в аналогичные конструкции языка Limbo с учетом особенностей построения этих конструкции в языке программирования. После преобразования всех конструкций, программа должна вывести на экран полученный код на языке Limbo.

Содержание работы

1 ПОСТАНОВКА ЗАДАЧИ 3
2 АНАЛИЗ ТЕКСТА НА ЕСТЕСТВЕННОМ ЯЗЫКЕ 4
2.1 Пример текста на естественном языке………………………………………4
2.2 Пошаговый разбор текста на естественном языке………………………….4
3 ОПИСАНИЕ ВЫБРАННОГО ЯЗЫКА ПРОГРАММИРОВАНИЯ………….6
3.1 История выбранного языка…………………………………………………..6
3.2 Особенности выбранного языка……………………………………………..6
3.3 Основные конструкции выбранного языка…………………………………7
4 ПРИМЕР ТРАНСЛЯЦИИ ИСХОДНОГО ТЕКСТА………………….……....8
4.1 Исходный текст……………………………………………………………….8
4.2 Транслированный текст………………………………………………………8
5 АЛГОРИТМ РАЗРАБОТАННОЙ ПРОГРАММЫ 10
5.1 Блок-схема……………………………………………………………………10
5.2 Словесный алгоритм…………………………………………………….…..11
6 КОД ПРОГРАММЫ…………………………………………………………...12
7 ПРИМЕР РАБОТЫ РАЗРАБОТАННОЙ ПРОГРАММЫ…...……………...25
СПИСОК ЛИТЕРАТУРЫ 28

Файлы: 1 файл

Пример ПЗ по ЛПОС 2 часть.doc

— 352.00 Кб (Скачать файл)

4 ПРИМЕР ТРАНСЛЯЦИИ ИСХОДНОГО  ТЕКСТА

 

 

Приведем пример построчной трансляции исходного текста на код языка программирования VBA.

 

4.1 Исходный  текст

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

начало программы

 

ввод целой X

ввод вещественной Y

ввод вещественной Z

 

X присвоить 1

Y присвоить 0

Z присвоить 3,5

 

цикл  по X от 1 до 3 шаг 1

начало цикла

  инкремент Z

Y равно Y плюс Z

конец цикла

 

если Y меньше 10

начало если

X присвоить 1

конец если

если Y больше 10

начало если

X присвоить 2

конец если

 

вывод X

вывод Y

 

конец программы

 

4.2 Транслированный  текст

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

X: int;

Y: real;

Z: real;

X=1;

Y=0;

Z=3,5;

 

for (X=1; X < 3; X+1)

{

Z++

Y=Y+Z;

}

 

If (Y<10 )

{

X=1;

}

 

If (Y>10 )

{

X=2;

}

sys->print( X)

sys->print( Y)

 

 

 

 

5 АЛГОРИТМ РАЗРАБОТАННОЙ ПРОГРАММЫ

 

5.1 Блок-схема

Блок-схема алгоритма разработанной программы представлена на рисунке 1.

              Рисунок 1 – Блок-схема алгоритма разработанной программы

 

5.2  Словесный алгоритм

Рассмотрим словесный алгоритм разработанной программы:

Шаг 1: Начало программы

Шаг 2: Ввод текста для анализа

Шаг 3: Нажатие кнопки запуска

Шаг 4: Проверка входной строки на пустоту

Шаг 5: Добавление маркера конца строки

Шаг 6: Считывание символа входной строки

Шаг 7: Если входной символ – не символ конца строки: повторять шаг 7.1-7.4

            Шаг 7.1: Если лексическая строка пуста и не соответствует конструкции: перейти на шаг 6

  Шаг 7.2: Анализ конструкции

  Шаг 7.3: Сброс лексической строки

  Шаг 7.4: Занесение данных в результирующую переменную

  Шаг 7.5: Переход на следующий символ входной строки

Шаг 8: Возврат строки с результатом

Шаг 9: Вывод результата

Шаг 10: Конец

 

6 КОД ПРОГРАММЫ

 

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace Курсовая

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

       

 

        private void button1_Click(object sender, EventArgs e)

        {

            // проверка входной строки на пустоту

            if (textBox1.Text.Length == 0)

            {

                textBox2.Text = "";

                return; //входная строка пуста

            }

 

            string input_KA = textBox1.Text; //входная строка символов

            if (input_KA[input_KA.Length - 1] != '☺')

                input_KA = input_KA + '☺';  //добавить маркер конца строки если его нет

 

            string result = LexicalAnalys(input_KA); //выполнение

 

            textBox2.Text = result; //вывод результата

        }

 

        string LexicalAnalys(string input)

        {

            //информации о результатах анализа входной цепочки

            string result = "";

            int h=0;

            string cikl = "";

            string cikl2 = "";

            string cikl3 = "";

            string cikl4 = "";

            string [] ch= new string[20];

            int i = 0;        // позиция

            string Lexical = ""; // переменная

            bool breaking = false; //признак окончания анализа

            while (!breaking)

            {

                char c = input[i];     // текущий символ

                if (c == ' ' && Lexical == "")

                {

                    i++;

                }

               

                else if (c == '☺')

                {

                    breaking = true;

                }

                else if (c == '\r' || c == '\n' || c == '\t')

                {

                    i++;

                    Lexical = "";

                }

                else

                {

                    Lexical = Lexical + c;

                   

                    if (Lexical == "ввод")// ***********************************************************ввод

                    {

                        //result += "Local" + " ";

                        Lexical = "";

                        i = i + 2;

                        int j;

                        int u=0;

                        string Lex = "";

                        for (j = i; j < (i + 12); j++)

                        {

                            char c2 = input[j];

                            if(c2 == '☺')

                            {

                                breaking = true;

                                j = i + 50;

                            }

                            else if (c2 == '\r' || c2 == '\n')

                            {

                                j = i + 50;

                            }

                            Lex = Lex + c2;

                            if (Lex == "целой")

                            {

                                u = 1;

                                Lex = "";

                                i = j;

                                i = i + 2;

                                j = i + 50;

                            }

                            else if (Lex == "вещественной")

                            {

                                u = 2;

                                Lex = "";

                                i = j;

                                i = i + 2;

                                j = i + 50;

                            }

                            else

                            {

                            }

                        }

 

                        for (j = i; j > i-1; j++)

                        {

                            char c2 = input[j];

                            if (c2 == '☺')

                            {

                                breaking = true;

                                j = j - 500;

                            }

                            else if (c2 == '\r' || c2 == '\n' || c2 == ' ')

                            {

                                j = j - 500;

                            }

                            else

                            {

                                i = j;

                                ch[h] = ch[h] + c2;

                            }

                        }

                        if (u == 1)

                        {

                            result += ch[h] + ": int;" ;

                            result += "\r\n";

                        }

                        if (u == 2)

                        {

                            result += ch[h] + ": real;" ;

                            result += "\r\n";

                        }

                        h++;

                    }

                    // *********************************************************************************Присвоение

                    if (Lexical == ch[0] || Lexical == ch[1] || Lexical == ch[2] || Lexical == ch[3] || Lexical == ch[4] || Lexical == ch[5] || Lexical == ch[6] || Lexical == ch[7] || Lexical == ch[8] || Lexical == ch[9] || Lexical == ch[10] || Lexical == ch[11] || Lexical == ch[12] || Lexical == ch[13] || Lexical == ch[14] || Lexical == ch[15] || Lexical == ch[16] || Lexical == ch[17] || Lexical == ch[18] || Lexical == ch[19])

                    {

                        i = i + 2;

                        int j;

                        string Lex = "";

                        for (j = i; j > i - 1; j++)

                        {

                            char c2 = input[j];

                            Lex = Lex + c2;

                            if (c2 == '☺')

                            {

                                breaking = true;

                                j = j - 500;

                            }

                            else if (c2 == '\r' || c2 == '\n')

                            {

                                j = j - 500;

                            }

                            else if (c2 == ' ')

                            {

                                Lex = "";

                            }

                            if (Lex == "присвоить")

                            {

                                Lex = "";

                                j = j + 2;

                                int y;

                                for (y = j; y > j - 1; y++)

                                {

                                    char c3 = input[y];

                                    if (c3 == '☺')

                                    {

                                        breaking = true;

                                        y = y - 500;

                                    }

                                    else if (c3 == '\r' || c3 == '\n' || c3 == ' ')

                                    {

                                        y = y - 500;

                                    }

                                    else

                                    {

                                        Lex = Lex + c3;

                                        j = y+1;

                                    }

                                }

                                result += Lexical + "=" + Lex + ";";

                                Lex = "";

                            }

                            if (Lex == "равно")

                            {

                                Lex = "";

                                j = j + 2;

                                int y;

                                for (y = j; y > j - 1; y++)

                                {

                                    char c3 = input[y];

                                    if (c3 == '☺')

                                    {

                                        breaking = true;

                                        y = y - 500;

                                    }

                                    else if (c3 == '\r' || c3 == '\n' || c3 == ' ')

                                    {

                                        y = y - 500;

                                    }

                                    else

                                    {

                                        Lex = Lex + c3;

                                        j = y+1;

                                    }

                                }

 

                                result += Lexical + "=" + Lex;

                                Lex = "";

                            }

                            if (Lex == "плюс")

                            {

                                Lex = "";

                                j = j + 2;

                                int y;

                                for (y = j; y > j - 1; y++)

                                {

                                    char c3 = input[y];

                                    if (c3 == '☺')

                                    {

                                        breaking = true;

                                        y = y - 500;

                                    }

                                    else if (c3 == '\r' || c3 == '\n' || c3 == ' ')

                                    {

                                        y = y - 500;

                                    }

                                    else

                                    {

                                        Lex = Lex + c3;

                                        j = y+1;

                                    }

                                }

 

                                result += "+" + Lex + ";";

                                Lex = "";

                            }

                            if (Lex == "минус")

                            {

                               

                                Lex = "";

                                j = j + 2;

                                int y;

                                for (y = j; y > j - 1; y++)

                                {

                                    char c3 = input[y];

                                    if (c3 == '☺')

                                    {

                                        breaking = true;

                                        y = y - 500;

                                    }

                                    else if (c3 == '\r' || c3 == '\n' || c3 == ' ')

                                    {

                                        y = y - 500;

Информация о работе Разработка программного обеспечения для реализации переводчика с естественного языка на язык программирования