Написать алгоритм проверки корректности регулярного выражения - C#
Формулировка задачи:
Следующая задача. Есессно на шарпе)
написать алгоритм проверки корректности регулярного выражения, которое включает [,],(,)
т.е, например ([][[]()]) - правильно, ([][]()]) - неправильно
Решение задачи: «Написать алгоритм проверки корректности регулярного выражения»
textual
Листинг программы
using System;
using System.Collections.Generic;
namespace JustForFun
{
class MainClass
{
static void Main ()
{
// Просто прогон тестов
Console.WriteLine ("Результат: " + TryParse ("([]([()]))"));
Console.WriteLine ("Результат: " + TryParse (")("));
Console.WriteLine ("Результат: " + TryParse ("[(])"));
Console.WriteLine ("Результат: " + TryParse ("[()]([])"));
Console.ReadLine ();
}
const string openBrackets = "([";
const string closeBrackets = ")]";
static bool TryParse (string expression)
{
// Инициализация стека
Stack<char> stack = new Stack<char> ();
int index;
foreach (var symbol in expression)
{
// Если очередной символ - открывающая скобка
// Дословно если удается найти символ в строке "openBrackets"
if (openBrackets.IndexOf (symbol) != -1)
{
// Добавляем открывающуюся скобку в стек
stack.Push (symbol);
}
// Если очередной символ - закрывающая скобка
else if ((index = closeBrackets.IndexOf (symbol)) != -1)
{
// Если стек не пуст и последнее добавленная в него открывающаяся скобка
// соответствует текущей закрывающейся скобке
if (stack.Count != 0 && stack.Peek () == openBrackets[index])
{
// Удалить последнюю открывающуюся скобку из стека.
stack.Pop ();
}
}
// Если какой - то левый символ
else
{
return false;
}
}
return stack.Count == 0;
}
}
}