コード例 #1
0
ファイル: LexerTests.cs プロジェクト: jasonholloway/parser
        public void OptionsLexing2() 
        {
            var spans = Lexer.Lex("$top=2&$orderby=Name&$filter=(Score gt 1000)").ToArray();

            Assert.Equal(spans,
                        new[] {
                            TokenSpan.Of(Token.Start, 0, 0),
                            TokenSpan.Of(Token.ReservedWord, 0, 4),
                            TokenSpan.Of(Token.Equals, 4, 5),
                            TokenSpan.Of(Token.Number, 5, 6),
                            TokenSpan.Of(Token.Ampersand, 6, 7),
                            TokenSpan.Of(Token.ReservedWord, 7, 15),
                            TokenSpan.Of(Token.Equals, 15, 16),
                            TokenSpan.Of(Token.Word, 16, 20),

                            TokenSpan.Of(Token.Ampersand, 20, 21),
                            TokenSpan.Of(Token.ReservedWord, 21, 28),
                            TokenSpan.Of(Token.Equals, 28, 29),
                            TokenSpan.Of(Token.Open, 29, 30),
                            TokenSpan.Of(Token.Word, 30, 35),
                            TokenSpan.Of(Token.Space, 35, 36),
                            TokenSpan.Of(Token.Word, 36, 38),
                            TokenSpan.Of(Token.Space, 38, 39),
                            TokenSpan.Of(Token.Number, 39, 43),
                            TokenSpan.Of(Token.Close, 43, 44),

                            TokenSpan.Of(Token.End, 44, 44)
                        });
        }
コード例 #2
0
 public Match(TokenSpan span, IExpression value, IReadOnlyList <Case> cases, Else? @else)
 {
     Span  = span;
     Value = value;
     Cases = cases;
     Else  = @else;
 }
コード例 #3
0
 public Unit(TokenSpan span, String?packageDoc, MemberList items)
 {
     Span       = span;
     PackageDoc = packageDoc;
     Items      = items;
     Members    = new DistinctList <INamed, Class>();
 }
コード例 #4
0
 public Call(TokenSpan span, IExpression expression, ArgumentList arguments, Throws?throws)
 {
     Span       = span;
     Expression = expression;
     Arguments  = arguments;
     Throws     = throws;
 }
コード例 #5
0
 public LambdaParameter(TokenSpan span, Identifier name, IType?type, IExpression?value)
 {
     Span  = span;
     Name  = name;
     Type  = type;
     Value = value;
 }
コード例 #6
0
 public TypeParameter(TokenSpan span, Identifier name, IType?type, IType? @default)
 {
     Span    = span;
     Name    = name;
     Type    = type;
     Default = @default;
 }
コード例 #7
0
 public NameCapture(TokenSpan span, Identifier name, IType?type, IExpression?value)
 {
     Span  = span;
     Name  = name;
     Type  = type;
     Value = value;
 }
コード例 #8
0
 public Case(TokenSpan span, IExpression?pattern, When?when, Body?body)
 {
     Span    = span;
     Pattern = pattern;
     When    = when;
     Body    = body;
 }
コード例 #9
0
 public While(TokenSpan span, IExpression condition, IExpression body, Else? @else)
 {
     Span      = span;
     Condition = condition;
     Body      = body;
     Else      = @else;
 }
コード例 #10
0
 public If(TokenSpan span, IfKind kind, IReadOnlyList <Conditional> conditionals, Else?elseBody)
 {
     Span         = span;
     Kind         = kind;
     Conditionals = conditionals;
     ElseBody     = elseBody;
 }
コード例 #11
0
 public Try(TokenSpan span, IExpression body, Else? @else, Then?then)
 {
     Span = span;
     Body = body;
     Else = @else;
     Then = then;
 }
コード例 #12
0
 public Repeat(TokenSpan span, IExpression body, IExpression condition, Else? @else)
 {
     Span      = span;
     Body      = body;
     Condition = condition;
     Else      = @else;
 }
コード例 #13
0
 public ValueParameter(TokenSpan span, Identifier name, IType type, IExpression?value)
 {
     Span    = span;
     Name    = name;
     Type    = type;
     Default = value;
 }
コード例 #14
0
        private IEnumerable <TToken> TransformBuilders(TToken[] tokens, TokenSpan span, List <MatchInfo> builders, Scope scope)
        {
            int current = span.Start;

            foreach (var builder in builders)
            {
                if (builder.Span.Start > current)
                {
                    for (int i = current; i < builder.Span.Start; i++)
                    {
                        yield return(tokens[i]); //literal
                    }
                    current = builder.Span.Start;
                }

                int consumed;
                var matchedTokens = buildMatchResult(tokens, builder, scope, out consumed);
                var transformer   = builder.Match.Transform;

                current += consumed;
                Debug.Assert(transformer != null);
                var matchTokens = transformer.transform(matchedTokens, builder.Match, scope);
                foreach (var matchToken in matchTokens)
                {
                    yield return(matchToken);
                }
            }

            for (int i = current; i < span.Start + span.Length; i++)
            {
                yield return(tokens[i]); //finish
            }
        }
コード例 #15
0
 public For(TokenSpan span, INamePattern names, IExpression values, IExpression body, Else? @else)
 {
     Span   = span;
     Names  = names;
     Values = values;
     Body   = body;
     Else   = @else;
 }
コード例 #16
0
            public TokenSpan Consume(int count)
            {
                var result = new TokenSpan(_current, count);

                _current += count;
                _tokens   = _tokens.Skip(count);
                return(result);
            }
コード例 #17
0
 public Local(TokenSpan span, LocalKind kind, Identifier name, IType?type, String?doc)
 {
     Span = span;
     Kind = kind;
     Name = name;
     Type = type;
     Doc  = doc;
 }
コード例 #18
0
 public LambdaType(TokenSpan span, Identifier?name, TypeParameterList?typeParameters, TypeList parameters, IType?result, Throws?throws)
 {
     Span           = span;
     Name           = name;
     TypeParameters = typeParameters;
     Parameters     = parameters;
     Result         = result;
     Throws         = throws;
 }
コード例 #19
0
ファイル: LexerTests.cs プロジェクト: jasonholloway/parser
        public void Lexes_String_WithPercents() {
            var spans = Lexer.Lex($"%27Blah%27").ToArray();

            spans.ShouldBe(new[] {
                TokenSpan.Of(Token.Start, 0, 0),
                TokenSpan.Of(Token.String, 0, 10),
                TokenSpan.Of(Token.End, 10, 10)
            });
        }
コード例 #20
0
ファイル: LexerTests.cs プロジェクト: jasonholloway/parser
        public void Lexes_GUID() {
            var spans = Lexer.Lex($"Aa1234ea-4321-1234-bbBB-AAAA1111cccc").ToArray();

            spans.ShouldBe(new[] {
                TokenSpan.Of(Token.Start, 0, 0),
                TokenSpan.Of(Token.Guid, 0, 36),
                TokenSpan.Of(Token.End, 36, 36)
            });
        }
コード例 #21
0
 public Field(TokenSpan span, FieldKind kind, Identifier name, IType type, IExpression?init, String?doc)
 {
     Span = span;
     Kind = kind;
     Name = name;
     Type = type;
     Init = init;
     Doc  = doc;
 }
コード例 #22
0
ファイル: LexerTests.cs プロジェクト: jasonholloway/parser
        public void Lexes_DateTime() {
            var spans = Lexer.Lex($"2012-05-29T09:13:28ZHello").ToArray();

            spans.ShouldBe(new[] {
                TokenSpan.Of(Token.Start, 0, 0),
                TokenSpan.Of(Token.Date, 0, 20),
                TokenSpan.Of(Token.Word, 20, 25),
                TokenSpan.Of(Token.End, 25, 25)
            });
        }
コード例 #23
0
ファイル: LexerTests.cs プロジェクト: jasonholloway/parser
        public void Lexes_Date() {
            var spans = Lexer.Lex($"2017-03-01Boo").ToArray();

            spans.ShouldBe(new[] {
                TokenSpan.Of(Token.Start, 0, 0),
                TokenSpan.Of(Token.Date, 0, 10),
                TokenSpan.Of(Token.Word, 10, 13),
                TokenSpan.Of(Token.End, 13, 13)
            });
        }
コード例 #24
0
ファイル: LexerTests.cs プロジェクト: jasonholloway/parser
        public void Lexes_Decimal() {
            var spans = Lexer.Lex($"2.89Hello").ToArray();

            spans.ShouldBe(new[] {
                TokenSpan.Of(Token.Start, 0, 0),
                TokenSpan.Of(Token.Decimal, 0, 4),
                TokenSpan.Of(Token.Word, 4, 9),
                TokenSpan.Of(Token.End, 9, 9)
            });
        }
コード例 #25
0
 public Lambda(TokenSpan span, Identifier?name, TypeParameterList?typeParameters, ParameterList parameters, CaptureList?captures, IType?result, Throws?throws, IExpression body)
 {
     Span           = span;
     Name           = name;
     TypeParameters = typeParameters;
     Parameters     = parameters;
     Captures       = captures;
     Result         = result;
     Throws         = throws;
     Body           = body;
 }
コード例 #26
0
 public Method(TokenSpan span, MethodKind kind, Identifier name, TypeParameterList?typeParameters, ParameterList valueParameters, IType? @return, Throws?throws, String?doc, IExpression?body)
 {
     Span            = span;
     Kind            = kind;
     Doc             = doc;
     Name            = name;
     TypeParameters  = typeParameters;
     ValueParameters = valueParameters;
     Return          = @return;
     Throws          = throws;
     Body            = body;
 }
コード例 #27
0
ファイル: LexerTests.cs プロジェクト: jasonholloway/parser
        public void OptionsLexing_Handles_PercentEncodings1() 
        {
            var spans = Lexer.Lex("(%27Hello%27)").ToArray();

            Assert.Equal(spans,
                        new[] {
                            TokenSpan.Of(Token.Start, 0, 0),
                            TokenSpan.Of(Token.Open, 0, 1),
                            TokenSpan.Of(Token.String, 1, 12),
                            TokenSpan.Of(Token.Close, 12, 13),
                            TokenSpan.Of(Token.End, 13, 13)
                        });
        }
コード例 #28
0
        public Class(TokenSpan span, ClassKind kind, Identifier name, TypeParameterList?typeParameters, IType?provides, String?doc, MemberList items)
        {
            Span           = span;
            Kind           = kind;
            Name           = name;
            TypeParameters = typeParameters;
            Provides       = provides;
            Doc            = doc;
            Items          = items;

            Members = new NamedList <INamedMember>();
            Fields  = new NamedList <Field>();
            Methods = new NamedList <Method>();
        }
コード例 #29
0
ファイル: LexerTests.cs プロジェクト: jasonholloway/parser
        public void ResourcePath_Lexing1() 
        {
            var spans = Lexer.Lex("Dogs/Chihuahuas('Boris')").ToArray();

            spans.ShouldBe(new[] {
                TokenSpan.Of(Token.Start, 0, 0),
                TokenSpan.Of(Token.Word, 0, 4),
                TokenSpan.Of(Token.Slash, 4, 5),
                TokenSpan.Of(Token.Word, 5, 15),
                TokenSpan.Of(Token.Open, 15, 16),
                TokenSpan.Of(Token.String, 16, 23),
                TokenSpan.Of(Token.Close, 23, 24),
                TokenSpan.Of(Token.End, 24, 24)
            });
        }
コード例 #30
0
ファイル: LexerTests.cs プロジェクト: jasonholloway/parser
        public void OptionsLexing1() 
        {
            var spans = Lexer.Lex("$filter=name eq 'Boris'").ToArray();

            spans.ShouldBe(new[] {
                TokenSpan.Of(Token.Start, 0, 0),
                TokenSpan.Of(Token.ReservedWord, 0, 7),
                TokenSpan.Of(Token.Equals, 7, 8),
                TokenSpan.Of(Token.Word, 8, 12),
                TokenSpan.Of(Token.Space, 12, 13),
                TokenSpan.Of(Token.Word, 13, 15),
                TokenSpan.Of(Token.Space, 15, 16),
                TokenSpan.Of(Token.String, 16, 23),
                TokenSpan.Of(Token.End, 23, 23)
            });
        }