add: Array declaration and variable indexer.

This commit is contained in:
2024-08-17 17:50:28 +08:00
parent c7077bd0fd
commit 97f9fb9ec3
12 changed files with 200 additions and 30 deletions

View File

@@ -2,9 +2,23 @@
namespace CanonSharp.Pascal.SyntaxTree;
public sealed class TypeNode(LexicalToken typeToken) : SyntaxNodeBase
public record struct ArrayRange(int Left, int Right);
public sealed class TypeNode : SyntaxNodeBase
{
public override SyntaxNodeType NodeType => SyntaxNodeType.Type;
public LexicalToken TypeToken => typeToken;
public LexicalToken TypeToken { get; }
public List<ArrayRange> ArrayRanges { get; } = [];
public TypeNode(LexicalToken typeToken)
{
TypeToken = typeToken;
}
public TypeNode(LexicalToken typeToken, IEnumerable<ArrayRange> arrayRanges) : this(typeToken)
{
ArrayRanges.AddRange(arrayRanges);
}
}

View File

@@ -1,8 +1,23 @@
namespace CanonSharp.Pascal.SyntaxTree;
using CanonSharp.Pascal.Scanner;
public sealed class VariableNode(string name) : SyntaxNodeBase
namespace CanonSharp.Pascal.SyntaxTree;
public sealed class VariableNode : SyntaxNodeBase
{
public override SyntaxNodeType NodeType => SyntaxNodeType.Variable;
public string IdentifierName => name;
public LexicalToken Identifier { get; }
public List<SyntaxNodeBase> Indexers { get; } = [];
public VariableNode(LexicalToken identifier)
{
Identifier = identifier;
}
public VariableNode(LexicalToken identifier, IEnumerable<SyntaxNodeBase> expressions)
{
Identifier = identifier;
Indexers.AddRange(expressions);
}
}