Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач по ТАФЯ.doc
Скачиваний:
49
Добавлен:
22.05.2015
Размер:
243.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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]