Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ContainsWord
- {
- class Grammar
- {
- public string[] Variables { get; private set; }
- public char[] Terminals { get; private set; }
- public Rule[] Rules { get; private set; }
- public string StartSymbol { get; private set; }
- public Grammar(string variables, string terminals, string rules, string start)
- {
- Variables = variables.Substring(1, variables.Length - 2).Split(',');
- Terminals = Array.ConvertAll(terminals.Substring(1, terminals.Length - 2).Split(','), s => s[0]);
- Rules = Rule.Create(rules.Substring(1, rules.Length - 2).Split(','));
- StartSymbol = start;
- }
- }
- class Rule
- {
- public static Rule[] Create(string[] rules)
- {
- var arr = new Rule[rules.Length];
- for (var i = 0; i < rules.Length; i++)
- {
- arr[i] = new Rule(rules[i]);
- }
- return arr;
- }
- public string Input { get; private set; }
- public string Output { get; private set; }
- private Rule(string rule)
- {
- var parts = rule.Split(new string[] { "->" }, StringSplitOptions.None);
- Input = parts[0];
- Output = parts[1];
- }
- public void Use(string form, List<string> set, string target)
- {
- var matches = System.Text.RegularExpressions.Regex.Matches(form, Input);
- foreach (System.Text.RegularExpressions.Match match in matches)
- {
- var result = match.Index + 1 < form.Length ? form.Substring(0, match.Index) + Output + form.Substring(match.Index + Input.Length) :
- form.Substring(0, match.Index) + Output;
- if (result.Length <= target.Length && !set.Contains(result))
- set.Add(result);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement