Beispiel #1
0
        private T AssertExpression <T>(string text, SyntaxNodeKind expectedKind) where T : Expression
        {
            var result = Assert.IsType <T>(Parsing.ParseExpression(text).Root);

            Assert.Equal(expectedKind, result.Kind);
            return(result);
        }
        private static T AssertStatement <T>(string text, SyntaxNodeKind expectedKind) where T : Statement
        {
            var result = Assert.IsType <T>(Parsing.ParseStatement(text).Root);

            Assert.Equal(expectedKind, result.Kind);
            return(result);
        }
 public void AssertNode(SyntaxNodeKind kind)
 {
     try
     {
         Assert.True(enumerator.MoveNext());
         Assert.Equal(kind, enumerator.Current.Kind);
     }
     catch when(MarkFailed())
     {
         throw;
     }
 }
Beispiel #4
0
 public SyntaxNode(SyntaxNodeKind kind)
 {
     Kind = kind;
 }
Beispiel #5
0
        public static bool IsStatementExpression(Expression expression)
        {
            SyntaxNodeKind kind = expression.Kind;

            return(kind == SyntaxNodeKind.AssignmentExpression || kind == SyntaxNodeKind.FunctionCallExpression);
        }
Beispiel #6
0
 private bool AcceptAny(SyntaxNodeKind nodeKind, params string[] acceptedStrings)
 {
     return acceptedStrings.Any(s => Accept(nodeKind, s));
 }
Beispiel #7
0
        private bool Accept(SyntaxNodeKind nodeKind, string acceptedString)
        {
            if (scanner.Peek(acceptedString))
            {
                return Emit(nodeKind, () => scanner.Skip(acceptedString.Length));
            }

            return false;
        }
Beispiel #8
0
 private void EmitTerminal(SyntaxNodeKind nodeKind, TextSpan span)
 {
     handler.EndNode(new ParserContext(nodeKind, span));
 }
Beispiel #9
0
        private bool Emit(SyntaxNodeKind nodeKind, Func<bool> consumeAction)
        {
            CallHandler(new ParserContext(nodeKind, scanner.PositionToSpan()), (h, c) => h.StartNode(c));

            scanner.StartSpan();
            if (consumeAction != null && !consumeAction())
            {
                return false;
            }

            var span = scanner.EndSpan();

            CallHandler(new ParserContext(nodeKind, span), (h, c) => h.EndNode(c));

            return true;
        }
Beispiel #10
0
        private bool AcceptTerminal(SyntaxNodeKind syntaxKind, params Token[] acceptableTokens)
        {
            var span = scanner.AcceptAny(acceptableTokens);

            if (span.HasValue)
            {
                EmitTerminal(syntaxKind, span.Value);
                return true;
            }

            return false;
        }
Beispiel #11
0
 public void AssertNode(SyntaxNodeKind kind)
 {
     Assert.True(_enumerator.MoveNext());
     Assert.Equal(kind, _enumerator.Current.Kind);
     _enumerator.MoveNext();
 }
Beispiel #12
0
 public ParserContext(SyntaxNodeKind nodeKind, TextSpan span) : this()
 {
     NodeKind = nodeKind;
     Span = span;
 }