public static IRunner CompileExpression(this PatternCompiler patternCompiler, string expression) { return(patternCompiler.Compile(new Pattern("Expression") { Data = grammar.ParseExpression(expression) })); }
private static IRunner BuildRunnerFromExpression(PatternCompiler patternCompiler, Operator expression) { return(patternCompiler.Compile(new Pattern { Data = new ZeroOrMore(new PrioritizedChoice(new CaptureGroup(0, expression), new Any())) })); }
public RegexGrammar(PatternCompiler patternCompiler) { var RE = new Pattern("RE"); var simpleRE = new Pattern("SimpleRE"); var metaCharacter = new Pattern("metaCharacter") { Data = new PrioritizedChoice( new CharacterClass('*', '+', '^', '$', '|', '(', ')', '[', ']'), new Sequence(new CharacterClass('\\'), new CharacterClass('t', 'n', 'r', 'f', 'b', 'B', 'd', 'D', 's', 'S', 'w', 'W', 'Q', 'U', 'L')), CharacterClass.String(@"*?"), CharacterClass.String(@"+?"), CharacterClass.String(@"$`"), CharacterClass.String(@"$'"), CharacterClass.String(@"$&"), CharacterClass.String(@"\cX"), new Sequence(new CharacterClass('\\', '$'), CharacterClass.Range('0', '9')), new Sequence(new CharacterClass('\\'), CharacterClass.Range('0', '7'), CharacterClass.Range('0', '7'), CharacterClass.Range('0', '7')) ) }; var allowedMetaCharacters = new Pattern("allowedMetaCharacter") { Data = new CaptureGroup((int)CaptureType.MetaCharacter, new PrioritizedChoice( new Sequence(new CharacterClass('\\'), new CharacterClass('t', 'n', 'r', 'f', 'b', 'B', 'd', 'D', 's', 'S', 'w', 'W', 'Q', 'U', 'L')), CharacterClass.String(@"*?"), CharacterClass.String(@"+?"), CharacterClass.String(@"$`"), CharacterClass.String(@"$'"), CharacterClass.String(@"$&"), CharacterClass.String(@"\cX"), new Sequence(new CharacterClass('\\', '$'), CharacterClass.Range('0', '9')), new Sequence(new CharacterClass('\\'), CharacterClass.Range('0', '7'), CharacterClass.Range('0', '7'), CharacterClass.Range('0', '7')) ) ) }; var character = new Pattern("character") { Data = new CaptureGroup((int)CaptureType.Char, new PrioritizedChoice( new Sequence( new CharacterClass('\\'), metaCharacter ), new Sequence( new Not(metaCharacter), new Any() ) ) ) }; var range = new CaptureGroup((int)CaptureType.Range, new Sequence(character, new CharacterClass('-'), character)); var setItem = new PrioritizedChoice(range, character); var setItems = new Pattern() { Data = Operator.OneOrMore(setItem) }; var positiveSet = new CaptureGroup((int)CaptureType.PositiveSet, new Sequence(new CharacterClass('['), setItems, new CharacterClass(']'))); var negativeSet = new CaptureGroup((int)CaptureType.NegativeSet, new Sequence(CharacterClass.String("[^"), setItems, new CharacterClass(']'))); var set = new Pattern("set") { Data = new PrioritizedChoice(negativeSet, positiveSet) }; var eos = new CaptureGroup((int)CaptureType.Eos, new CharacterClass('$')); var any = new CaptureGroup((int)CaptureType.Any, new CharacterClass('.')); var group = new Sequence(new CharacterClass('('), RE, new CharacterClass(')')); var elementaryRE = new Pattern("elementaryRE") { Data = new PrioritizedChoice(group, any, eos, set, character, allowedMetaCharacters) }; var number = Operator.OneOrMore(CharacterClass.Range('0', '9')); var repeatRange = new Sequence(new CharacterClass('{'), new CaptureGroup((int)CaptureType.RepeatRange, new Sequence(number, Operator.Optional(new Sequence(new CharacterClass(','), number)))), new CharacterClass('}')); var plus = new Pattern("plus") { Data = new CaptureGroup((int)CaptureType.Plus, new Sequence(elementaryRE, new CharacterClass('+'))) }; var star = new Pattern("star") { Data = new CaptureGroup((int)CaptureType.Star, new Sequence(elementaryRE, new CharacterClass('*'))) }; var repeat = new Pattern("repeat") { Data = new CaptureGroup((int)CaptureType.Repeat, new Sequence(elementaryRE, repeatRange)) }; var basicRE = new PrioritizedChoice(star, plus, repeat, elementaryRE); simpleRE.Data = new CaptureGroup((int)CaptureType.Concatenation, Operator.OneOrMore(basicRE)); RE.Data = new CaptureGroup((int)CaptureType.Union, new Sequence(simpleRE, new ZeroOrMore(new Sequence(new CharacterClass('|'), RE)))); Parser = patternCompiler.Compile(RE); }
public static IRunner CompileGrammar(this PatternCompiler patternCompiler, string grammarStr) { return(patternCompiler.Compile(grammar.ParseGrammar(grammarStr).Last())); }