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(); } } }
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; } }