Разработка синтаксического анализатора средствами C#
Алгоритм для реализации синтаксического анализатора. Анализ формулы на ошибки. Целесообразность выбора языка программирования. Использование программы "Числовые ряды". Особенности языка С#. Визуальный и автоматизированный способ ввода, генерирование.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 13.05.2014 |
Размер файла | 611,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
[Введите текст]
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«БРАТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
ЕСТЕСТВЕННОНАУЧНЫЙ ФАКУЛЬТЕТ
КАФЕДРА ДИСКРЕТНОЙ МАТЕМАТИКИ
КУРСОВАЯ РАБОТА
ТЕМА: РАЗРАБОТКА СИНТАКСИЧЕСКОГО АНАЛИЗАТОРА СРЕДСТВАМИ C#
Братск 2010
Содержание
ВВЕДЕНИЕ
ГЛАВА 1. АНАЛИЗ И ВЫЧИСЛЕНИЕ
1.1 Алгоритм для реализации синтаксического анализатора
1.2 Анализ формулы на ошибки
1.3 Целесообразность выбора языка программирования
ГЛАВА 2. ИСПОЛЬЗОВАНИЕ ПРОГРАММЫ «ЧИСЛОВЫЕ РЯДЫ»
2.1 Способы ввода
2.2 Ручной способ
2.3 Визуальный способ
2.4 Автоматизированный способ
ЗАКЛЮЧЕНИЕ
ЛИТЕРАТУРА
ПРИЛОЖЕНИЕ
ВВЕДЕНИЕ
Целью данной курсовой работы является разработка программы для учеников, а также преподавателей общеобразовательной средней школы.
В ходе работы были реализованы следующие цели и задачи:
Создание синтаксического анализатора;
Распознавание выражения;
Вычисление числового ряда;
Вывод сообщения, при некорректном вводе выражения;
Настоящая курсовая работа состоит из введения, 2 глав, заключения, списка литературы и 10 рисунков.
В первой главе приведено описание алгоритмов, анализ и вычисления выражения, анализ ошибок. А так же изложено обоснование выбора языка программирования и перечень используемых компонентов.
Во второй главе приводится подробное описание работы программы, приводятся её графические примеры. Также подробно описываются: свойства окна, технические характеристики.
В заключении подведены итоги курсовой работы.
ГЛАВА 1. АНАЛИЗ И ВЫЧИСЛЕНИЕ
1.1 Алгоритм для реализации синтаксического анализатора
В рамках курсовой работы была поставлена задача - вычисление точной суммы ряда.
В соответствии с заданием, разрабатываемая программа должна, в зависимости от способа, запрашивать ввод формулы либо генерировать её, анализировать формулу на ошибки, выводить результат либо запрашивать ввод результата для его проверки. Значение каждой переменной вводится лишь однажды.
Для выполнения перечисленных заданий необходимо провести синтаксический разбор исходного выражения, в результате которого будет извлечена информация о количестве введённых переменных.
1.2 Анализ формулы на ошибки
Так как в поле ввода может быть допущена ошибка, возможен ввод недопустимого выражения, прежде всего программа анализирует формулу на отсутствие ошибок и сообщать пользователю в случае их обнаружения.
Вывод ошибки осуществляется в следующих случаях:
В поле ввода ничего не введено;
Напечатан знак «-»;
Первое слагаемое не равно 1;
Введено больше четырех дробей;
После знака деления введено не число;
После знака «+» должна идти 1;
Лишний знак
Анализатор действует поэтапно и после каждого этапа, в котором может присутствовать ошибка, проверяет её наличие. В случае обнаружения ошибки, последующий анализ формулы прекращается и происходит уведомление пользователя об ошибке. В противном случае, анализатор переходит к следующему этапу.
1.3 Целесообразность выбора языка программирования
программирование анализатор генерирование
Программа "Стереометрия" была написана на языке C# в среде Visual Studio 2008.
Язык С# - один из современных и широко используемых языков объектно-ориентированного программирования.
В курсовом проекте была поставлена задача, реализация которой может быть произведена с помощью различных языков программирования. Был выбран язык C# в среде Microsoft Visual C# 2008, так как он имеет ряд преимуществ, которые упрощают процесс создания приложений.
C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.
Переняв многое от своих предшественников -- языков C++, Java, Delphi, Модула и Smalltalk -- С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).
Microsoft спроектировала C# таким образом, что бы С, С++ и Java-программисты смогли легко перейти на него. C# имеет корни в языках С, С++ и Java, поэтому такой переход не должен вызвать затруднений.
Синтаксис у C# не такой сложный как у С++, поэтому его изучение намного легче. Большинство операций, которые вы можете делать на С++, можно сделать и на C#, за исключением операций доступа к низкоуровневым функциям (это все-таки можно сделать с помощью неуправляемого кода).
Программист, привыкший к платформе Microsoft, может представить себе C# как промежуточный вариант между C++ и Visual Basic, если рассматривать сложность языковых конструкций и возможности языка.
C# имеет C стиль синтаксиса (для управляющих конструкций, блоков кода, описания сигнатуры методов и др.), много общего с Java (отсутствие множественного наследования и шаблонов, наличие сборщика мусора) и Делфи (ориентированность на создание компонент), в то же время имеет и свой колорит.
При создании языка в основу дизайна легла легкость использования, доминирующая над мощностью языка и скоростью выполнения. Отсюда и сборщик мусора с управляемыми объектными ссылками, который автоматически освобождает за Вас память, отбирая при этом процессорное время. Вы также получаете безопасность работы с типами, а это, по мнению многих, является вторым важнейшим фактором избегания ошибок. C# объектно-ориентированный язык.
При создании языка рассматривалась не только простота написания приложений, но и их поддержки - в связи, с чем в язык включили поддержку XML комментариев и контроля версий. Настоящий подарок для программистов.
В C# представлена концепция пространств имен, аналогичная пакетам в Java. Это позволяет иерархически структурировать Вашу систему типов, делая код намного более понятным и позволяя избежать проблем с именованием. Вы можете рассматривать пространства имен как директории, а языковые типы как файлы в этих директориях.
Реализация структур как типов, работа с которыми идет по значению, вместе с возможностью использовать не только вложенные массивы (как в Java), но и многомерные позволяет оптимизировать производительность приложений.
Ввиду очень удобного объектно-ориентированного дизайна, C# является хорошим выбором для быстрого конструирования различных компонентов - от высокоуровневой бизнес логики до системных приложений, использующих низкоуровневый код.
Таким образом, выбранный язык программирования наиболее удобен для выполнения поставленной задачи.
ГЛАВА 2. ИСПОЛЬЗОВАНИЕ ПРОГРАММЫ «ЧИСЛОВЫЕ РЯДЫ»
2.1 Способы ввода
На первой форме присутствуют кнопки перехода на «ручной», «визуальный» и «автоматизированный» способы , а также значок закрытия программы (рис 1).
Рис. 1
Далее рассмотрим каждый способ в отдельности.
2.2 Ручной способ
При нажатии кнопки «ручной» открывается ручной способ (рис 2). Окно содержит поле для ввода выражения, кнопки «проверить», «вычислить», «назад». Еще имеется поле, где выведении знаменатели введенных дробей, а также поле вывода ответа.
Рисунок 2 - Ручной ввод
После ввода выражения и нажатии кнопки «проверить» появляется сообщение о правильности ввода примера (рис 3).
Рисунок 3 - Проверка введенного выражения
После проверки введенного выражения программа считает и выдает ответ (рис 4).
Рисунок 4 - Вычисление формулы
2.3 Визуальный способ
При нажатии кнопки «Визуальный» открывается «Визуальный» способ. На форме присутствуют кнопки для ввода 1, +, / , список возможных знаменателей, кнопку «вычислить» и «назад» (рис 5).
Рисунок 5 - Ручной способ
Далее по приведенному образцу, пользователю необходимо ввести выражение, генерируя пример в определенной последовательности (рис 6).
Рисунок 6 - Получение выражения
Нажимаем «вычислить» и получаем результат (рис 7).
Рисунок 7 - Получение ответа
2.4 Автоматизированный способ
При нажатии кнопки «Автоматизированный» открывается «Автоматизированный» способ, при нажатии кнопки «сгенерировать» срабатывает генератор и выдает готовое выражение. В текстовое поле необходимо ввести ответ. При нажатии кнопки «проверка», пользователь будет оповещен о правильности введенного ответа.
Рисунок 8 - Автоматизированный способ
Рисунок 9 - Генерирование
Рисунок 10 - Проверка решения
ЗАКЛЮЧЕНИЕ
В ходе курсовой работы была разработана алгебраическая программа, которая состоит из трех режимов (ручной - позволяет пользователю ввести с клавиатуры выражение со своими константами, визуальный - позволяет пользователю составить выражение с помощью кнопок самой программы, автоматический - генерирует ряд случайным образом, при нажатии кнопки ) с помощью которых можно вычислить сумму числового ряда, вводить необходимые данные . Это позволяет облегчить задачу и дать пользователю верный ответ.
Данная программа разработана на основе решения задач на тему «Числовые ряды». Её основными пользователями будут являться школьники.
Программа проста в использовании, не требует от пользователя каких-либо специальных навыков работы с электронно-вычислительными машинами.
СПИСОК ЛИТЕРАТУРЫ
1. Ахо, А. В. Компиляторы: принципы, технологии и инструментарий, 2_е изд./ А. В. Ахо, М. С. Лам, Р. Сети, Д. Д. Ульман. - М.: Издательский дом "Вильямс", 2008.
2. Харт, Д.М. Системное программирование в среде Windows, 3-е издание: Пер. с англ./ Д.М. Харт. - М.: Издательский дом "Вильямс", 2005. - 592 с.
3. Баженова, И.Ю. Введение в программирование: Учебное пособие / И.Ю. Баженова, В.А. Сухомлин. - М.: Интернет-университет информационных технологий; БИНОМ. Лаборатория знаний, 2007. - 326 с.
4. Черемушкин, А.В. Лекции по арифметическим алгоритмам в криптографии. - М.: МЦНМО, 2002. - 104 с.
5. Хантер, Р. Основные концепции компиляторов / Р. Хантер. - М.: Издательский дом "Вильямс" , 2002. - 256 с.
ПРИЛОЖЕНИЕ
Program.cs
sing System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public static class gl
{
public static Form fr1, fr2, fr3,fr4;
public static int ierror, pos;
public static char ch, del, ed, pl;
public static string p;
public static Random r=new Random();
public static int ind1=0, ind2=0, ind3=0, ind4=0, ind5;
}
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
gl.fr1 = new Form1();
Application.EnableVisualStyles();
// Application.SetCompatibleTextRenderingDefault(false);
Application.Run(gl.fr1);
}
}
}
Form1.cs
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 WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
if (gl.fr2 == null)
{
gl.fr2 = new Form2();
gl.fr2.Show();
//gl.fr1.Hide();
}
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
gl.fr1 = null;
}
private void button2_Click(object sender, EventArgs e)
{
if (gl.fr3 == null)
{
gl.fr3 = new Form3();
gl.fr3.Show();
//gl.fr1.Hide();
}
}
private void button3_Click(object sender, EventArgs e)
{
if (gl.fr4 == null)
{
gl.fr4 = new Form4();
gl.fr4.Show();
//gl.fr1.Hide();
}
}
}
}
Form2.cs
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 WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Nextch(object sender, EventArgs e)
{
if (gl.pos < gl.p.Length - 1)
do
{
//сдвиг курсора на 1 позицию
gl.pos++;
// в новой позиции считывает символ
gl.ch = gl.p[gl.pos];
}
while ((gl.ch == ' ') && (gl.pos < gl.p.Length - 1));
}
private void polinom(object sender, EventArgs e)
{
gl.ind5++;
edinica(sender, e);
if (gl.ierror == 0)
{
label5.Text = gl.ch.ToString();
Nextch(sender, e);
plus(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
edinica(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
delenie(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
chislo(sender, e);
if (gl.ierror == 0)
{
label3.Text = gl.ch.ToString();
Nextch(sender, e);
plus(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
edinica(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
delenie(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
chislo(sender, e);
if (gl.ierror == 0)
{
label4.Text = gl.ch.ToString();
Nextch(sender, e);
plus(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
edinica(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
delenie(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
chislo(sender, e);
if (gl.ierror == 0)
{
label6.Text = gl.ch.ToString();
Nextch(sender, e);
plus(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
edinica(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
delenie(sender, e);
if (gl.ierror == 0)
{
Nextch(sender, e);
chislo(sender, e);
if (gl.ierror == 0)
{
label7.Text = gl.ch.ToString();
if (gl.pos != gl.p.Length - 1)
{
gl.ierror = 2;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
private void edinica(object sender, EventArgs e)
{
if (gl.ch == '1')
{
gl.ierror = 0;
}
else gl.ierror = 1;
}
private void chislo(object sender, EventArgs e)
{
if ( (gl.ch == '1') || (gl.ch == '2') || (gl.ch == '3') || (gl.ch == '4') || (gl.ch == '5') || (gl.ch == '6') || (gl.ch == '7') || (gl.ch == '8') || (gl.ch == '9'))
{
gl.ierror = 0;
}
else gl.ierror = 1;
}
private void delenie(object sender, EventArgs e)
{
if (gl.ch == '/')
{
gl.ierror = 0;
}
else gl.ierror = 1;
}
private void plus(object sender, EventArgs e)
{
if (gl.ch == '+')
{
gl.ierror = 0;
}
else gl.ierror = 1;
}
private void Resettext(object sender, EventArgs e)
{
gl.p = textBox1.Text;
gl.pos =-1;
// gl.ierror = 0; // ошибки нет
Nextch(sender, e); // берет 1-й символ
}
private void button1_Click(object sender, EventArgs e)
{
gl.ind5 = 0;
gl.ierror = 0;
Resettext(sender, e);
polinom(sender, e);
if (gl.ierror == 2)
{
label5.Text = "дробей должно быть 4";
}
else
{
if (gl.ierror == 1)
{
label5.Text = "неверно";
}
else label5.Text = "верно";
}
}
private void button4_Click(object sender, EventArgs e)
{
if (gl.fr1 == null)
{
gl.fr1 = new Form1();
gl.fr1.Show();
}
gl.fr2.Hide();
gl.fr2 = null;
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
gl.fr1 = null;
gl.fr2 = null;
}
private void Form2_Load(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
double a, b, c, d;
double summa;
a=Convert.ToInt16(label3.Text);
b=Convert.ToInt16(label4.Text);
c=Convert.ToInt16(label6.Text);
d=Convert.ToInt16(label7.Text);
summa = 1 +1/a+1/b+1/c+1/d;
summa = Math.Round(summa, 2);
label9.Text = summa.ToString();
}
private void oshibka(object sender, EventArgs e)
{
if (gl.ierror == 1)
{
label5.Text = "неверно";
}
}
}
}
Form3.cs
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 WindowsFormsApplication1
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (gl.fr1 == null)
{
gl.fr1 = new Form1();
gl.fr1.Show();
} gl.fr3.Hide();
gl.fr3 = null;
}
private void Form3_Load(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
gl.ind1++;
if (gl.ind1 == 1)
{
button2.Enabled = true;
button3.Enabled = false;
label1.Text = button3.Text;
}
if (gl.ind1 == 2)
{
button3.Enabled = false;
button4.Enabled = true;
label3.Text = button3.Text;
}
if (gl.ind1 == 3)
{
button3.Enabled = false;
button4.Enabled = true;
label7.Text = button3.Text;
}
if (gl.ind1 == 4)
{
button3.Enabled = false;
button4.Enabled = true;
label11.Text = button3.Text;
}
}
private void button2_Click(object sender, EventArgs e)
{
gl.ind2++;
if (gl.ind2 == 1)
{
button2.Enabled = false;
button3.Enabled = true;
label2.Text = button2.Text;
}
if (gl.ind2 == 2)
{
button2.Enabled = false;
button3.Enabled = true;
label6.Text = button2.Text;
}
if (gl.ind2 == 3)
{
button2.Enabled = false;
button3.Enabled = true;
label10.Text = button2.Text;
}
}
private void button4_Click(object sender, EventArgs e)
{
gl.ind3++;
if (gl.ind3 == 1)
{
button4.Enabled = false;
comboBox1.Enabled = true;
label4.Text = button4.Text;
}
if (gl.ind3 == 2)
{
button4.Enabled = false;
comboBox1.Enabled = true;
label8.Text = button4.Text;
}
if (gl.ind3 == 3)
{
button4.Enabled = false;
comboBox1.Enabled = true;
label12.Text = button4.Text;
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
gl.ind4++;
if (gl.ind4 == 1)
{
comboBox1.Enabled = false;
button2.Enabled = true;
label5.Text = comboBox1.Text;
}
if (gl.ind4 == 2)
{
comboBox1.Enabled = false;
button2.Enabled = true;
label9.Text = comboBox1.Text;
}
if (gl.ind4 == 3)
{
comboBox1.Enabled = false;
button2.Enabled = true;
label13.Text = comboBox1.Text;
}
}
private void button5_Click(object sender, EventArgs e)
{
double a, b, c;
double summa;
a = Convert.ToInt16(label5.Text);
b = Convert.ToInt16(label9.Text);
c = Convert.ToInt16(label13.Text);
summa = 1 + 1 / a + 1 / b + 1 / c;
summa = Math.Round(summa, 2);
label14.Text = summa.ToString();
}
}
}
Form4.cs
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 WindowsFormsApplication1
{
public partial class Form4 : Form
{
public Form4()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
if (gl.fr1 == null)
{
gl.fr1 = new Form1();
gl.fr1.Show();
} gl.fr4.Hide();
gl.fr4 = null;
}
private void Form4_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
label5.Text = gl.r.Next(1, 5).ToString();
label6.Text = gl.r.Next(1, 5).ToString();
label7.Text = gl.r.Next(1, 5).ToString();
label8.Text = gl.r.Next(1, 5).ToString();
double a,b,c,d;
a=Convert.ToInt32(label5.Text);
b=Convert.ToInt32(label6.Text);
c=Convert.ToInt32(label7.Text);
d=Convert.ToInt32(label8.Text);
double summa;
summa = 1+1/a+1/b+1/c+1/d;
summa = Math.Round(summa, 3);
label10.Text = summa.ToString();
}
private void button2_Click_1(object sender, EventArgs e)
{
if (label10.Text == textBox1.Text)
{
label11.Text = "правильно";
}
else label11.Text = "неправильно";
}
}
Размещено на Allbest.ru
...Подобные документы
Структура, классификация и требования к реализации компилятора. Проектирование и реализация анализирующей части компилятора языка С++. Способы реализации лексического анализа. Алгоритм работы синтаксического анализатора. Принципы программной реализации.
курсовая работа [774,2 K], добавлен 26.01.2013Содержательная часть языка программирования С++. Правила автоматной грамматики, классификация Хомского. Принцип построения графов, разработка проекта средствами среды программирования Builder C++. Алгоритм синтаксического анализа оператора вывода.
контрольная работа [228,4 K], добавлен 22.05.2012Проектирование программы-анализатора, состоящей из двух частей: лексического анализатора, разбивающего исходный текст программы на лексемы и заполняющего таблицу имен; синтаксического анализатора, проверяющего соответствие текста заданной грамматике.
курсовая работа [2,0 M], добавлен 14.06.2010Общая характеристика и оценка возможностей языка программирования си-шарп, его сходные и отличительные черты от С++ и Java. Разработка с помощью данного языка программирования лексического и синтаксического анализатора. Составление таблиц разбора.
курсовая работа [111,6 K], добавлен 11.06.2010Понятие синтаксического анализа. Программный продукт для обработки данных строкового типа. Построение сканера текстов с использованием утилиты flex, синтаксического анализатора с помощью утилиты bison. Грамматика языка программирования обработки строк.
курсовая работа [261,7 K], добавлен 29.10.2012Написание программы, которая выполняет лексический и синтаксический анализ входного языка программирования, порождает таблицу лексем с указанием их типов и значений, а также строит синтаксическое дерево; текст входного языка вводится с клавиатуры.
курсовая работа [761,5 K], добавлен 23.02.2012Методы грамматического разбора при разработке учебного транслятора. Проектирование лексического анализатора и магазинного автомата. Программная реализация синтаксического анализатора текстового языка высокого уровня. Разработка модуля интерпретации.
курсовая работа [697,2 K], добавлен 06.01.2013Детерминированная автоматная модель синтаксического анализатора. Исследование структуры разработанной программы, требования к функциональности, Основные элементы и принципы реализации. Листинг спроектированной программы и анализ полученных результатов.
курсовая работа [69,1 K], добавлен 11.12.2015Разработка технического задания на проектирование, определение требований к программе. Предварительный выбор метода решения синтаксического анализатора, проектирование программного приложения, конфигурация технических средств программы и её тестирование.
курсовая работа [28,5 K], добавлен 28.06.2011Разработка программного приложения, производящего проверку синтаксиса простой программы: выбор метода создания синтаксического анализатора, описание требований к программному обеспечению, написание алгоритмов решения и тестирование конечного продукта.
курсовая работа [579,7 K], добавлен 03.07.2011Программная реализация синтаксического анализатора произвольного текста. Матрица и дерево переходов для программы. Код программы с построчным комментарием. Порядок запуска среды разработки Visual Studio. Интерфейс и номера Лихтенштейна, скриншот.
контрольная работа [855,1 K], добавлен 13.02.2014Проектирование лексического и синтаксического анализаторов учебного языка. Правила преобразования логических выражений в ПОЛИЗ. Формирование триад, оптимизация их списка. Логическая структура программы. Тестирование модулей транслятора-интерпретатора.
курсовая работа [1,3 M], добавлен 28.05.2013Целесообразность выбора языка программирования. Основные структуры языка программирования. Кодирование по методу четности/нечетности, по методу Хэмминга. Машина Поста. Инструкция программиста и пользователя. Использование программы StudyProgram.
курсовая работа [294,7 K], добавлен 27.02.2009Создание алгоритма для построения синтаксического анализатора полиномов и его реализация в среде Visual Studio 2005 на языке программирования C#. Программное решение задачи поиска максимального числа единиц в бинарном представлении простых чисел.
курсовая работа [723,5 K], добавлен 04.10.2010Конструкции условных операторов if-else и простые типы языка Си. Общая схема работы компилятора. Алгоритм построения дерева разбора, строки вывода синтаксического разбора. Построение обратной польской записи как формы внутреннего представления программы.
курсовая работа [1,3 M], добавлен 01.06.2013Ознакомление с возможностями языка Си как средой программирования высокого уровня. Циклы программирования параметрического оператора for и функции форматированного ввода. Разработка программы средствами Си: блок-схема, текст и тестирование программы.
контрольная работа [204,4 K], добавлен 26.01.2013Синтаксически ориентированная трансляция: общие понятия; транслятор, интерпретатор, препроцессор. Программная реализация трансляции, основанной на структуре текста; идея Н. Хомского; языковые процессоры. Заголовочные файлы, алгоритмы и функции программы.
курсовая работа [734,3 K], добавлен 04.06.2013Разработка анализирующей части компилятора для выполнения проверки исходной программы на соответствие грамматике языка, правилам семантики и построения внутреннего представления. Описание анализаторов: лексического, синтаксического и семантического.
контрольная работа [704,9 K], добавлен 01.02.2013Изучение алгоритма рекурсивного спуска и системы построения грамматики с помощью лексического анализатора Lex. Написание программы интерпретатора языка разметки HTML. Проверка входной последовательности на корректность входа как общая функция программы.
контрольная работа [226,7 K], добавлен 25.12.2012Место компилятора в программном обеспечении. Принципы работы и автоматизация построения синтаксического анализатора. Дерево разбора и его преобразование в дерево операций. Назначение и этапы семантического анализа. Идентификация языков программирования.
реферат [265,1 K], добавлен 20.12.2007