- •Теория автоматов и формальных языков
- •Введение
- •1 Нормативные ссылки
- •2 Требования к курсовой работе
- •3 Примерный перечень тем курсовых работ
- •4 Пример выполнения курсовой работы
- •5 Общие сведения о трансляции
- •6 Синтез транслятора
- •6.1 Лексический блок
- •6.2 Синтаксический блок
- •Список литературы
- •Приложение а
- •Приложение б
- •Приложение в
Приложение в
(обязательное)
Программа синтаксического анализатора арифметических выражений
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace R1
{
public class Ren
{
public static string A;
public static string E = "LT";
public static string L = "LT";
public static string T = "CF";
public static string C = "CF";
public static string F = ")E";
public static string X = "K";
public static int I;
public static int D;
public static Stack<object> S = new Stack<object>();
public static Stack<object> S1 = new Stack<object>();
}
}
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 R1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Ren.S.Push(Ren.X);
textBox4.Text = textBox4.Text + Ren.S.Peek().ToString();
dGV1.Rows.Add(Ren.X);
Ren.S.Push("E");
textBox4.Text = textBox4.Text + Ren.S.Peek().ToString();
dGV1.Rows.Add("E");
char[] c = Ren.E.ToCharArray();
textBox1.Text = Ren.S.Count().ToString();
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
private void button3_Click(object sender, EventArgs e)
{
Ren.A = textBox2.Text;
label1.Text = Ren.A.Length.ToString();
char[] c3 = Ren.A.ToCharArray();
textBox3.Text =c3[Ren.I].ToString();
switch (c3[Ren.I])
{
case '(':
{
if (Ren.S.Peek().ToString() == "E")
{
Ren.S.Pop();
char[] c1 = Ren.E.ToCharArray();
foreach (char ch in c1)
{
Ren.S.Push(ch);
}
textBox1.Text = Ren.S.Count().ToString();
Ren.D = 0;
}
else
if (Ren.S.Peek().ToString() == "T")
{
Ren.S.Pop();
char[] c1 = Ren.T.ToCharArray();
foreach (char ch in c1)
{
Ren.S.Push(ch);
}
textBox1.Text = Ren.S.Count().ToString();
Ren.D = 0;
}
else
if (Ren.S.Peek().ToString() == "F")
{
Ren.S.Pop();
char[] c1 = Ren.F.ToCharArray();
foreach (char ch in c1)
{
Ren.S.Push(ch);
}
textBox1.Text = Ren.S.Count().ToString();
Ren.D = 1;
}
else
{ textBox2.Text = "ОШИБКА"; return; }
}
break;
case 'i':
{
if (Ren.S.Peek().ToString() == "E")
{
Ren.S.Pop();
char[] c1 = Ren.E.ToCharArray();
foreach (char ch in c1)
{
Ren.S.Push(ch);
}
textBox1.Text = Ren.S.Count().ToString();
Ren.D = 0;
}
else
if (Ren.S.Peek().ToString() == "T")
{
Ren.S.Pop();
char[] c1 = Ren.T.ToCharArray();
foreach (char ch in c1)
{
Ren.S.Push(ch);
}
textBox1.Text = Ren.S.Count().ToString();
Ren.D = 0;
}
else
if (Ren.S.Peek().ToString() == "F")
{
Ren.S.Pop(); textBox1.Text = Ren.S.Count().ToString();
Ren.D = 1;
}
else
{ textBox2.Text = "ОШИБКА"; return; }
}
break;
case '+':
{
if (Ren.S.Peek().ToString() == "C")
{
Ren.S.Pop(); textBox1.Text = Ren.S.Count().ToString();
Ren.D = 0;
}
else
if (Ren.S.Peek().ToString() == "L")
{
Ren.S.Pop();
char[] c1 = Ren.L.ToCharArray();
foreach (char ch in c1)
{
Ren.S.Push(ch);
}
textBox1.Text = Ren.S.Count().ToString();
Ren.D = 1;
}
else
{ textBox2.Text = "ОШИБКА"; return; }
}
break;
case '*':
{
if (Ren.S.Peek().ToString() == "C")
{
{
Ren.S.Pop();
char[] c1 = Ren.C.ToCharArray();
foreach (char ch in c1)
{
Ren.S.Push(ch);
}
textBox1.Text = Ren.S.Count().ToString();
Ren.D = 1;
}
}
else
{ textBox2.Text = "ОШИБКА"; return; }
}
break;
case ')':
{
if (Ren.S.Peek().ToString() == "C")
{ Ren.S.Pop(); textBox1.Text = Ren.S.Count().ToString();
Ren.D = 1;
}
if (Ren.S.Peek().ToString() == "L")
{ Ren.S.Pop(); textBox1.Text = Ren.S.Count().ToString();
Ren.D = 1;
}
if (Ren.S.Peek().ToString() == ")")
{ Ren.S.Pop(); textBox1.Text = Ren.S.Count().ToString();
Ren.D = 1;
}
else
{ textBox2.Text = "ОШИБКА"; return; }
}
break;
case ';':
{
if (Ren.S.Peek().ToString() == "C")
{ Ren.S.Pop();textBox1.Text = Ren.S.Count().ToString();
Ren.D = 1;
}
if (Ren.S.Peek().ToString() == "L")
{
Ren.S.Pop(); textBox1.Text = Ren.S.Count().ToString();
Ren.D = 1;
}
if (Ren.S.Peek().ToString() == "K")
{
textBox1.Text = Ren.S.Count().ToString();
textBox2.Text = "Правильно";
}
else
{ textBox2.Text = "ОШИБКА"; return; }
}
break;
}
{
textBox4.Text = ""; //перезагрузка стека с целью
dGV1.Rows.Clear(); //отображения его состояния
int k = Ren.S.Count();
for (int i = 1; i <= k; i++)
{
Ren.S1.Push(Ren.S.Peek());
textBox4.Text = textBox4.Text + Ren.S.Peek().ToString();
dGV1.Rows.Add(Ren.S.Peek());
Ren.S.Pop();
}
for (int i = 1; i <= k; i++)
{
Ren.S.Push(Ren.S1.Peek());
dGV1.Rows[i - 1].HeaderCell.Value = (k - i).ToString();
Ren.S1.Pop();
}
}
Ren.I = Ren.I + Ren.D;
}
}
}
ТЕОРИЯ АВТОМАТОВ И ФОРМАЛЬНЫХ ЯЗЫКОВ
Методические указания
Составители: Власенко Александра Владимировна;
Ключко Владимир Игнатьевич;
Кушнир Надежда Владимировна
Редактор С.С. Соколова
Компьютерная верстка Н. В. Кушнир
Подписано в печать . .2012 г. Формат 60 х 84/16
Бумага офсетная Офсетная печать
Печ. л. 1,5 Изд. № 184
Усл. печ. л. 1,4 Тираж 52 экз.
Уч - изд. л. 1,1 Заказ №
Цена руб.
Кубанский государственный технологический университет
350072, г. Краснодар, ул. Московская, 2, кор. А
Типография КубГТУ: 350058, г. Краснодар,
ул. Старокубанская, 88/4