Beispiel #1
0
        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);
     }
 }