Example #1
0
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("Enter regular expression to generate random sequence or leave empty to quit:");
                var param = Console.ReadLine();

                if (string.IsNullOrEmpty(param))
                {
                    return;
                }

                try
                {
                    var nodeBuilder = new NodeBuilder();
                    var rxrdg       = new RegularExpressionDataGenerator.RegExpDataGenerator(param);
                    var node        = new RegularExpressionDataGenerator.Parser(nodeBuilder).Parse(param);

                    //show tree
                    Console.WriteLine();
                    Console.WriteLine(RegularExpressionDataGenerator.XmlVisitor.Visit(node, nodeBuilder));
                    Console.WriteLine("-------");
                    Console.WriteLine();

                    //output 10 examples
                    for (var i = 0; i < 10; i++)
                    {
                        Console.WriteLine(rxrdg.Next());
                    }
                }
                catch (Exception)
                {
                    Console.WriteLine("Regular expression sequence not recognized.");
                    Console.WriteLine();
                }
            }
        }
Example #2
0
 public void Handle(Parser context)
 {
     var token = context.Current;
     switch (token.TokenType)
     {
         case TokenType.Literal:
             var literal = (LiteralToken)token;
             INode literalNode = new LiteralNode(literal);
             AddOperand(literalNode);
             break;
         case TokenType.Repetition:
             var repetition = (RepetitionToken)token;
             INode repetitionNode = new RepetitionNode(repetition);
             AddOperator(repetitionNode);
             break;
         case TokenType.ParenthesisLeft:
             context.ToState(new ParseState());
             break;
         case TokenType.ParenthesisRight:
             var paranthesis = (ParenthesisRightToken)token;
             INode paranthesisRightNode = new ParenthesisNode(paranthesis);
             AddOperator(paranthesisRightNode);
             context.EndState();
             break;
         case TokenType.Alternation:
             var alternation = (AlternationToken)token;
             INode alternationNode = new AlternationNode(alternation);
             AddOperator(alternationNode);
             break;
         case TokenType.Range:
             var range = (RangeToken)token;
             INode rangeNode = new RangeNode(range);
             AddOperator(rangeNode);
             break;
         case TokenType.BracketLeft:
             context.ToState(new ParseState());
             break;
         case TokenType.BracketRight:
             var set = (BracketRightToken)token;
             INode setNode = new BracketNode(set);
             AddOperator(setNode);
             context.EndState();
             break;
         case TokenType.Any:
             var anyNode = NodeBuilder.BuildAnyNode();
             AddOperand(anyNode);
             break;
         case TokenType.Not:
             var not = (NotToken)token;
             INode notNode = new NotNode(not);
             AddOperator(notNode);
             break;
         case TokenType.Numeric:
             var numeric = (NumericToken)token;
             INode numericNode = NodeBuilder.BuildNumericNode();
             AddOperand(numericNode);
             break;
         case TokenType.Word:
             var word = (WordToken)token;
             INode wordNode = NodeBuilder.BuildWordNode();
             AddOperand(wordNode);
             break;
         case TokenType.Whitespace:
             var whitespace = (WhitespaceToken)token;
             INode whitespaceNode = NodeBuilder.BuildWhitespaceNode();
             AddOperand(whitespaceNode);
             break;
         case TokenType.NonNumeric:
             var nonNumeric = (NonNumericToken)token;
             INode nonNumericNode = NodeBuilder.BuildNonNumericNode();
             AddOperand(nonNumericNode);
             break;
         case TokenType.NonWord:
             var nonWord = (NonWordToken)token;
             INode nonWordNode = NodeBuilder.BuildNonWordNode();
             AddOperand(nonWordNode);
             break;
         case TokenType.NonWhitespace:
             var nonWhitespace = (NonWhitespaceToken)token;
             INode nonWhitespaceNode = NodeBuilder.BuildNonWhitespaceNode();
             AddOperand(nonWhitespaceNode);
             break;
         default:
             break;
     }
 }