public override ILexer <IPvFuture> Create() { // "v" var v = Terminal.Create(@"v", StringComparer.OrdinalIgnoreCase); // "." var dot = Terminal.Create(@".", StringComparer.Ordinal); // ":" var colon = Terminal.Create(@":", StringComparer.Ordinal); // 1*HEXDIG var hexadecimalDigitLexer = HexadecimalDigitLexerFactory.Create(); var r = Repetition.Create(hexadecimalDigitLexer, 1, int.MaxValue); // unreserved / sub-delims / ":" var unreservedLexer = UnreservedLexerFactory.Create(); var subcomponentsDelimiterLexer = SubcomponentsDelimiterLexerFactory.Create(); var a = Alternation.Create(unreservedLexer, subcomponentsDelimiterLexer, colon); // 1*( unreserved / sub-delims / ":" ) var s = Repetition.Create(a, 1, int.MaxValue); // "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" ) var innerLexer = Concatenation.Create(v, r, dot, s); // IPvFuture return(new IPvFutureLexer(innerLexer)); }
public void ReadSuccess(string input) { var valueRangeLexerFactory = new ValueRangeLexerFactory(); var digitLexerFactory = new DigitLexerFactory(valueRangeLexerFactory); var terminalLexerFactory = new TerminalLexerFactory(); var alternativeLexerFactory = new AlternativeLexerFactory(); var factory = new HexadecimalDigitLexerFactory(digitLexerFactory, terminalLexerFactory, alternativeLexerFactory); var lexer = factory.Create(); using (var scanner = new TextScanner(new StringTextSource(input))) { var result = lexer.Read(scanner); Assert.NotNull(result); Assert.True(result.Success); Assert.NotNull(result.Element); Assert.Equal(input, result.Element.Text); } }