using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace TOATe
{
public static class TestGadget
{
public static Dictionary<string, List<string>> Productions;
static TestGadget()
{
Productions = new Dictionary<string, List<string>>();
}
public static void TestParse(string path, bool waitUserInput = false)
{
string[] files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
for (int i = 0; i < files.Length; i++)
{
ParseTextFile(ReadTextFile(files[i]));
}
Console.WriteLine("\"" + path + "\" Done!");
if(waitUserInput) Console.ReadLine();
}
public static void WriteProductions()
{
foreach (KeyValuePair<string, List<string>> kvp in TestGadget.Productions)
{
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine(kvp.Key + " -> ");
Console.WriteLine(" " + String.Join(",\n ", kvp.Value) + ";");
}
}
static string ReadTextFile(string filename)
{
string text = File.ReadAllText(filename);
return text;
}
static void ParseTextFile(string filetext)
{
string[] productions = filetext.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string prod in productions)
{
prod.Trim();
string[] sides = prod.Split(new string[] { "->" }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < sides.Length; i++) sides[i] = sides[i].Trim();
string title = sides[0];
if (string.IsNullOrEmpty(title) || string.IsNullOrWhiteSpace(title)) return;
List<string> list = new List<string>();
if (sides.Length > 1)
{
list = sides[1]
.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)
.ToList();
for (int i = 0; i < list.Count; i++) list[i] = list[i].Trim();
}
if (Productions.ContainsKey(title) == false)
{
Productions.Add(title, list);
}
else
{
int n = 0;
while (Productions.ContainsKey(title + " (" + n + ")"))
{
n++;
}
Productions.Add(title + " (" + n + ")", list);
}
}
}
}
}