add: constant parser and variable parser.

This commit is contained in:
2024-08-16 17:07:53 +08:00
parent bdcc59a2ab
commit ed36546b30
10 changed files with 244 additions and 24 deletions

View File

@@ -0,0 +1,8 @@
namespace CanonSharp.Pascal.SyntaxTree;
public sealed class CharValueNode(char value) : SyntaxNodeBase
{
public override SyntaxNodeType NodeType => SyntaxNodeType.CharValue;
public char Value => value;
}

View File

@@ -0,0 +1,12 @@
using CanonSharp.Pascal.Scanner;
namespace CanonSharp.Pascal.SyntaxTree;
public sealed class ConstantNode(LexicalToken identifier, SyntaxNodeBase value) : SyntaxNodeBase
{
public override SyntaxNodeType NodeType => SyntaxNodeType.Constant;
public LexicalToken Identifier = identifier;
public SyntaxNodeBase Value = value;
}

View File

@@ -1,8 +1,12 @@
namespace CanonSharp.Pascal.SyntaxTree;
public sealed class ProgramBody(BlockNode block) : SyntaxNodeBase
public sealed class ProgramBody(BlockNode constantDeclarations, BlockNode variableDeclarations, BlockNode mainBlock) : SyntaxNodeBase
{
public override SyntaxNodeType NodeType => SyntaxNodeType.ProgramBody;
public BlockNode MainBlock => block;
public BlockNode ConstantDeclarations => constantDeclarations;
public BlockNode VariableDeclarations => variableDeclarations;
public BlockNode MainBlock => mainBlock;
}

View File

@@ -7,9 +7,13 @@ public enum SyntaxNodeType
IntegerValue,
FloatValue,
BooleanValue,
CharValue,
Variable,
Type,
Assign,
Block,
Constant,
VariableDeclaration,
ProgramBody,
ProgramHead,
Program

View File

@@ -0,0 +1,10 @@
using CanonSharp.Pascal.Scanner;
namespace CanonSharp.Pascal.SyntaxTree;
public sealed class TypeNode(LexicalToken typeToken) : SyntaxNodeBase
{
public override SyntaxNodeType NodeType => SyntaxNodeType.Type;
public LexicalToken TypeToken => typeToken;
}

View File

@@ -0,0 +1,12 @@
using CanonSharp.Pascal.Scanner;
namespace CanonSharp.Pascal.SyntaxTree;
public sealed class VariableDeclarationNode(IEnumerable<LexicalToken> identifiers, TypeNode typeNode) : SyntaxNodeBase
{
public override SyntaxNodeType NodeType => SyntaxNodeType.VariableDeclaration;
public IList<LexicalToken> Identifiers => identifiers.ToList();
public TypeNode TypeNode => typeNode;
}