Частина тексту файла (без зображень, графіків і формул):
Умова задачі:
Побудувати грамматику арифметичних виразів, що можуть мати лише ідентифікатори А В С та знаки операції додавання.
Документація:
Граматика – це сукупність правил, що формують слова та вирази мови
Граматика має настуну структуру G = < ∑, N, P, S>
Де ∑ - алфавіт, N – множина нетермінальних символів, P – правила виводу, S – аксіома.
Наприклад:
При запуску наша програма виводить нам на екран
/
Ввівши текст, вона виводить результат
/
Нехай ми продовжимо роботу і введем новий текст, після чого вона виводить нам результат
/
Наша програма завершена.
Код програми:
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lab_5
{
class Program
{
private static string temp;
private static string temp1;
static void Main(string[] args)
{
do
{
Grammar grammar = new Grammar();
int count;
bool main_pr = true;
Console.WriteLine("Vvedid text:");
string str;
str = Console.ReadLine();
count = str.Count();
if (grammar.First_Last_Character(str, 0))
{ }
else main_pr = false;
for (int i = 0; i < count - 1; i++)
{
if (grammar.Main_Character(str, i, i + 1))
{ }
else main_pr = false;
}
if (grammar.First_Last_Character(str, count - 1))
{ }
else main_pr = false;
if (main_pr)
Console.WriteLine("Vidpovidaje hramatyci aryfmetythnych vyraziv");
else Console.WriteLine("Ne vidpovidahe hramatyci aryfmetythnych vyraziv");
Console.WriteLine("Povtorennja vvedennja ? (vvedit tak dlja povtorennja)");
temp = Console.ReadLine();
temp1 = "tak";
}
while (String.Compare(temp, temp1) == 0);
}
}
}
Gramar.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lab_5
{
class Grammar
{
public bool First_Last_Character(string obj, int j)
{
if (obj[j] != 'A' && obj[j] != 'B' && obj[j] != 'C')
{
return false;
}
else return true;
}
public bool Main_Character(string obj, int rob, int next)
{
if (obj[rob] == 'A' || obj[rob] == 'B' || obj[rob] == 'C')
if (obj[next] != '+')
return false;
else { };
if (obj[rob] == '+' && obj[next] != 'A' && obj[next] != 'B' && obj[next] != 'C')
return false;
else { };
return true;
}
}
}