Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- namespace MacAuto1_CTest
- {
- internal class Program
- {
- static StringBuilder ReplaceChar(StringBuilder S, int num)
- {
- switch (num)
- {
- case 1: S.Replace("0", "aSSa"); break;
- case 2: S.Replace("0", "bSb"); break;
- case 3: S.Replace("0", "cAb"); break;
- case 4: S.Replace("0", "Aa"); break;
- case 5: S.Replace("0", "Ba"); break;
- case 6: S.Replace("0", "e"); break;
- case 7: S.Replace("0", "bB"); break;
- case 8: S.Replace("0", "aA"); break;
- default: Console.WriteLine("error"); return S;
- }
- return S;
- }
- static StringBuilder grammar_outL(StringBuilder S, StringBuilder sequence)
- {
- //Random rnd = new Random();
- byte input_var = 0;
- //int random_num = rnd.Next(1, 4);
- //Console.Write(" -> " + S);
- for (int i = 0; i < S.Length; i++)
- {
- switch (S[i])
- {
- case 'S':
- //random_num = rnd.Next(1, 4);
- Console.WriteLine("Choose a rule: ");
- Console.WriteLine("1. S -> aSSa\n2. S -> bSb\n3. S -> cAb");
- do
- {
- input_var = Convert.ToByte(Console.ReadLine());
- }
- while (input_var < 1 || input_var > 3);
- sequence.Append(input_var);
- S[i] = '0';
- ReplaceChar(S, input_var);
- i = 0;
- Console.WriteLine(S);
- break;
- case 'A':
- //random_num = rnd.Next(4, 7);
- Console.WriteLine("4. A -> Aa\n5. A -> Ba\n6. A -> epsilon");
- Console.WriteLine("Choose a rule: ");
- do
- {
- input_var = Convert.ToByte(Console.ReadLine());
- }
- while (input_var < 4 || input_var > 7);
- sequence.Append(input_var);
- S[i] = '0';
- ReplaceChar(S, input_var);
- i = 0;
- Console.WriteLine(S);
- break;
- case 'B':
- //random_num = rnd.Next(7, 9);
- Console.WriteLine("7. B -> bB\n8. B -> aA");
- Console.WriteLine("Choose a rule: ");
- do
- {
- input_var = Convert.ToByte(Console.ReadLine());
- }
- while (input_var < 7 || input_var > 8);
- sequence.Append(input_var);
- S[i] = '0';
- ReplaceChar(S, input_var);
- i = 0;
- Console.WriteLine(S);
- break;
- default: break;
- }
- }
- S.Replace("e", "");
- return S;
- }
- static StringBuilder grammar_outR(StringBuilder S, StringBuilder sequence)
- {
- //Random rnd = new Random();
- byte input_var = 0;
- //int random_num = rnd.Next(1, 4);
- //Console.Write(" -> " + S);
- Console.WriteLine("\nS");
- for (int i = S.Length - 1; i >= 0; i--)
- {
- switch (S[i])
- {
- case 'S':
- //random_num = rnd.Next(1, 4);
- Console.WriteLine("Choose a rule: ");
- Console.WriteLine("1. S -> aSSa\n2. S -> bSb\n3. S -> cAb");
- do
- {
- input_var = Convert.ToByte(Console.ReadLine());
- }
- while (input_var < 1 || input_var > 3);
- sequence.Append(input_var);
- S[i] = '0';
- ReplaceChar(S, input_var);
- i = S.Length - 1;
- Console.WriteLine(S);
- break;
- case 'A':
- //random_num = rnd.Next(4, 7);
- Console.WriteLine("4. A -> Aa\n5. A -> Ba\n6. A -> epsilon");
- Console.WriteLine("Choose a rule: ");
- do
- {
- input_var = Convert.ToByte(Console.ReadLine());
- }
- while (input_var < 4 || input_var > 6);
- sequence.Append(input_var);
- S[i] = '0';
- if (input_var == 6)
- {
- S.Remove(i, 1);
- }
- else
- ReplaceChar(S, input_var);
- i = S.Length - 1;
- Console.WriteLine(S);
- break;
- case 'B':
- //random_num = rnd.Next(7, 9);
- Console.WriteLine("7. B -> bB\n8. B -> aA");
- Console.WriteLine("Choose a rule: ");
- do
- {
- input_var = Convert.ToByte(Console.ReadLine());
- }
- while (input_var < 7 || input_var > 8);
- sequence.Append(input_var);
- S[i] = '0';
- ReplaceChar(S, input_var);
- i = S.Length - 1;
- Console.WriteLine(S);
- break;
- default: break;
- }
- }
- S.Replace("e", "");
- return S;
- }
- static string Linear_Tree(StringBuilder sequence)
- {
- string _Linear_Tree = "S()";
- var for_replacing = new StringBuilder("");
- for (int i = 0; i < sequence.Length; i++)
- {
- for_replacing.Clear();
- for_replacing.Append(0);
- for (int j = 0; j < _Linear_Tree.Length; j++)
- {
- if (j != _Linear_Tree.Length - 1 && _Linear_Tree[j + 1] == ')' && _Linear_Tree[j] == '(')
- {
- _Linear_Tree = _Linear_Tree.Insert(j + 1, Convert.ToString(ReplaceChar(for_replacing, Convert.ToInt32(sequence[i]) - 48)));
- }
- if ((_Linear_Tree[j] == 'S' || _Linear_Tree[j] == 'A' || _Linear_Tree[j] == 'B') && _Linear_Tree[j + 1] != '(')
- {
- _Linear_Tree = _Linear_Tree.Insert(j + 1, "()");
- break;
- }
- }
- }
- _Linear_Tree = _Linear_Tree.Replace("e","");
- return _Linear_Tree;
- }
- static bool output_possible(string sequence, StringBuilder S)
- {
- int F = 0;
- for (int i = 0; i < S.Length; i++)
- {
- switch (S[i])
- {
- case 'S':
- if (F < sequence.Length && (sequence[F] == '1' || sequence[F] == '2' || sequence[F] == '3'))
- {
- S[i] = '0';
- ReplaceChar(S, Convert.ToInt32(sequence[F]) - 48);
- F++;
- i = 0;
- break;
- }
- else
- return false;
- case 'A':
- if (F < sequence.Length && (sequence[F] == '4' || sequence[F] == '5' || sequence[F] == '6'))
- {
- S[i] = '0';
- ReplaceChar(S, Convert.ToInt32(sequence[F]) - 48);
- F++;
- i = 0;
- break;
- }
- else
- return false;
- case 'B':
- if (F < sequence.Length && (sequence[F] == '7' || sequence[F] == '8'))
- {
- S[i] = '0';
- ReplaceChar(S, Convert.ToInt32(sequence[F]) - 48);
- F++;
- i = 0;
- break;
- }
- else
- return false;
- }
- }
- return true;
- }
- static void Main(string[] args)
- {
- Console.WriteLine("Enter 1 for manual mode\nEnter 2 for sequence mode");
- var S = new StringBuilder("S");
- char mode = Console.ReadKey().KeyChar;
- if (mode == '1')
- {
- var sequence = new StringBuilder("");
- Console.WriteLine("\nChoose Left (l) or Right (r): ");
- char direction = Console.ReadKey().KeyChar;
- switch (direction)
- {
- case 'l':
- Console.WriteLine("\nLeft output");
- S = grammar_outL(S, sequence);
- break;
- case 'r':
- Console.WriteLine("\nRight output");
- S = grammar_outR(S, sequence);
- break;
- default:
- Console.WriteLine("\nerror");
- break;
- }
- Console.WriteLine("Final word: " + S);
- Console.Write("Sequence: ");
- for (int i = 0; i < sequence.Length; i++)
- {
- Console.Write(sequence[i] + " ");
- }
- Console.WriteLine("\n\n" + Linear_Tree(sequence));
- }
- else if (mode == '2')
- {
- Console.WriteLine("\nInput sequence: ");
- string sequence;
- sequence = Console.ReadLine();
- switch(output_possible(sequence, S))
- {
- case true: Console.WriteLine("Yes"); break;
- case false: Console.WriteLine("No"); break;
- }
- }
- else
- Console.WriteLine("error");
- Console.WriteLine("\nPress any key to exit");
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement