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; } }
public SyntaxNode(SyntaxNodeKind kind) { Kind = kind; }
public static bool IsStatementExpression(Expression expression) { SyntaxNodeKind kind = expression.Kind; return(kind == SyntaxNodeKind.AssignmentExpression || kind == SyntaxNodeKind.FunctionCallExpression); }
private bool AcceptAny(SyntaxNodeKind nodeKind, params string[] acceptedStrings) { return acceptedStrings.Any(s => Accept(nodeKind, s)); }
private bool Accept(SyntaxNodeKind nodeKind, string acceptedString) { if (scanner.Peek(acceptedString)) { return Emit(nodeKind, () => scanner.Skip(acceptedString.Length)); } return false; }
private void EmitTerminal(SyntaxNodeKind nodeKind, TextSpan span) { handler.EndNode(new ParserContext(nodeKind, span)); }
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; }
private bool AcceptTerminal(SyntaxNodeKind syntaxKind, params Token[] acceptableTokens) { var span = scanner.AcceptAny(acceptableTokens); if (span.HasValue) { EmitTerminal(syntaxKind, span.Value); return true; } return false; }
public void AssertNode(SyntaxNodeKind kind) { Assert.True(_enumerator.MoveNext()); Assert.Equal(kind, _enumerator.Current.Kind); _enumerator.MoveNext(); }
public ParserContext(SyntaxNodeKind nodeKind, TextSpan span) : this() { NodeKind = nodeKind; Span = span; }