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

Автор работы: Пользователь скрыл имя, 17 Декабря 2013 в 23:25, лабораторная работа

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

Задание:
Написать программу синтаксического анализа автоматного языка вызова процедур языка Fortran - 77; цепочки языка имеют вид:
CALL <идентификатор><список фактических параметров>
<список фактических параметров> :: = <параметр>[,<список фактических параметров>]
<константа любая>
<параметр> :: = <константа целая>
<идентификатор>
<идентификатор>
<идентификатор> - идентификатор, начинается с буквы, включает последовательность букв, цифр, не допускает пробелы и специальные символы, ввести ограничение на длину (не более 8 символов) и не может быть зарезервированным словом (CALL, FORMAT, FOR, TO);
<константа целая> - целое число в диапазоне 1 +32767;
<константа любая> - целое число в диапазоне -32768 +32767, число с фиксированной точкой, число с плавающей точкой. Число цифр порядка 2.

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

1 ПОСТАНОВКА ЗАДАЧИ 3
2 ГРАФ СОСТОЯНИЙ АНАЛИЗАТОРА 4
3 ОПИСАНИЕ ПРОГРАММЫ 6
3.1 Описание пользовательского интерфейса 6
3.2 Примеры правильных и неправильных цепочек 7
4. ОСНОВНЫЕ ЛИСТИНГИ ПРОГРАММЫ………………………………………….

Файлы: 1 файл

Теория автоматов отчет.doc

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

                                        richTextBox1.Focus();

                                        richTextBox1.SelectionStart = pos[k];

                                        return;

                                    }

                                }

                                else if (str2[j] == "call" || str2[j] == "format" || str2[j] == "for" || str2[j] == "to")

                                {

                                    label1.Text = "идентификаторы не должны совпадать \n с зарезервированными словами: CALL,\n FORMAT, FOR, TO";

                                    richTextBox1.Focus();

                                    richTextBox1.SelectionStart = pos[j];

                                    return;

                                }

                            }

                        }

                    }

                    label1.Text = "строка принадлежит языку"; b = true;

                }

              }

        }

        private void семантикаToolStripMenuItem_Click(object sender, EventArgs e)

        {

            if (b == false) { label1.Text = "невозможно вывести семантику. \nСтрока не принадлежит языку"; }

            else

            {

                this.Width = 900;

                label9.Text = "таблица идентификаторов";    label10.Text = "таблица констант";   label2.Text = "номер\n";                label3.Text = "имя\n";  label4.Text = "вид\n";    label5.Text = "номер\n";    label6.Text = "имя\n";  label7.Text = "вид\n";                label8.Text = "тип\n";

                string[] str1 = s.Split(new Char[] { ' ', ')', '(', ',' });

                str2 = new string[str1.Length];

                j = 0;

                for (int k = 0; k < str1.Length; k++)

                {

                    if (str1[k] != "" && k!=str1.Length)

                    {

                        str2[j] = str1[k];

                        j++;

                    }

                }

                richTextBox1.Enabled = false;

                button1.Enabled = false;

                j = 1;

                for (int k = 1; k < znach.Length; k++)

                {

                    if (str2[k]!=null)

                    {

                        if (Char.IsDigit(str2[k][0]) || str2[k][0] == '+' || str2[k][0] == '-')

                        {

                            if (znach[k]=="константа")

                            {

                                label5.Text += j +"\n";

                                label6.Text += str2[k] + "\n";

                                label7.Text += znach[k] + "\n";

                                label8.Text+=tip[k]+"\n";

                                j++;

                            }

                            else if (znach[k] == "индекс")

                            {

                                label5.Text += "--\n";

                                label6.Text += str2[k] + "\n";

                                label7.Text += znach[k] + "\n";

                                label8.Text += tip[k] + "\n";

                            }

                        }

                        else if (Char.IsLetter(str2[k][0])==true)

                        {

                            if (znach[k] == "идентификатор" || znach[k] == "массив")

                            {

                                label2.Text += j + "\n";

                                label3.Text += str2[k] + "\n";

                                label4.Text+=znach[k]+"\n";

                                j++;

                            }

                            else if (znach[k] == "индекс" || znach[k] == "имя процедуры")

                            {

                                label2.Text += "--\n";

                                label3.Text += str2[k] + "\n";

                                label4.Text += znach[k] + "\n";

                            }

                        }

                     }

                    else break;

                }

            }

        }

    }

}

 


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