Автор работы: Пользователь скрыл имя, 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
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.1 Блок-схема
Блок-схема алгоритма разработанной программы представлена на рисунке 1.
Рисунок 1 – Блок-схема алгоритма разработанной программы
Шаг 3: Нажатие кнопки запуска
Шаг 4: Проверка входной строки на пустоту
Шаг 5: Добавление маркера конца строки
Шаг 6: Считывание символа входной строки
Шаг 7: Если входной символ – не символ конца строки: повторять шаг 7.1-7.4
Шаг 7.2: Анализ конструкции
Шаг 7.3: Сброс лексической строки
Шаг 7.4: Занесение данных в результирующую переменную
Шаг 7.5: Переход на следующий символ входной строки
Шаг 8: Возврат строки с результатом
Шаг 9: Вывод результата
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 == '☺')
{
}
else if (c2 == '\r' || c2 == '\n')
{
j = i + 50;
}
Lex = Lex + c2;
if (Lex == "целой")
{
}
else if (Lex == "вещественной")
{
i = i + 2;
}
else
{
}
}
for (j = i; j > i-1; j++)
{
char c2 = input[j];
if (c2 == '☺')
{
}
else if (c2 == '\r' || c2 == '\n' || c2 == ' ')
{
}
else
{
}
}
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 == '☺')
{
}
else if (c2 == '\r' || c2 == '\n')
{
}
else if (c2 == ' ')
{
}
if (Lex == "присвоить")
{
{
result += Lexical + "=" + Lex + ";";
}
if (Lex == "равно")
{
if (c3 == '☺')
Lex = Lex + c3;
}
if (Lex == "плюс")
{
for (y = j; y > j - 1; y++)
y = y - 500;
}
}
if (Lex == "минус")
{
{