Автор работы: Пользователь скрыл имя, 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. ОСНОВНЫЕ ЛИСТИНГИ ПРОГРАММЫ………………………………………….
}
return;
}
}
}
label1.Text = "строка принадлежит языку"; b = true;
}
}
}
private void семантикаToolStripMenuItem_
{
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]=="константа")
{
}
else if (znach[k] == "индекс")
{
}
}
else if (Char.IsLetter(str2[k][0])==tr
{
if (znach[k] == "идентификатор" || znach[k] == "массив")
{
}
else if (znach[k] == "индекс" || znach[k] == "имя процедуры")
{
}
}
}
else break;
}
}
}
}
}