Upsilon/Upsilon/Parser/ExpressionSyntax/IndexExpressionSyntax.cs

55 lines
1.8 KiB
C#

using System.Collections.Generic;
using Upsilon.Text;
namespace Upsilon.Parser
{
public class IndexExpressionSyntax : ExpressionSyntax
{
public ExpressionSyntax Expression { get; }
public SyntaxToken OpenBracket { get; }
public ExpressionSyntax Index { get; }
public SyntaxToken CloseBracket { get; }
public IndexExpressionSyntax(ExpressionSyntax expression, SyntaxToken openBracket, ExpressionSyntax index,
SyntaxToken closeBracket)
{
Expression = expression;
OpenBracket = openBracket;
Index = index;
CloseBracket = closeBracket;
Span = TextSpan.Between(expression.Span, closeBracket.Span);
}
public override SyntaxKind Kind => SyntaxKind.IndexExpression;
public override IEnumerable<SyntaxNode> ChildNodes()
{
yield return Expression;
yield return OpenBracket;
yield return Index;
yield return CloseBracket;
}
}
public class FullStopIndexExpressionSyntax : ExpressionSyntax
{
public ExpressionSyntax Expression { get; }
public SyntaxToken FullStop { get; }
public IdentifierToken Index { get; }
public FullStopIndexExpressionSyntax(ExpressionSyntax expression, SyntaxToken fullStop, IdentifierToken index)
{
Expression = expression;
FullStop = fullStop;
Index = index;
Span = TextSpan.Between(expression.Span, Index.Span);
}
public override SyntaxKind Kind => SyntaxKind.FullStopIndexExpression;
public override IEnumerable<SyntaxNode> ChildNodes()
{
yield return Expression;
yield return FullStop;
yield return Index;
}
}
}