add: constant parser and variable parser.
This commit is contained in:
8
CanonSharp.Pascal/SyntaxTree/CharValueNode.cs
Normal file
8
CanonSharp.Pascal/SyntaxTree/CharValueNode.cs
Normal 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;
|
||||
}
|
12
CanonSharp.Pascal/SyntaxTree/ConstantNode.cs
Normal file
12
CanonSharp.Pascal/SyntaxTree/ConstantNode.cs
Normal 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;
|
||||
}
|
@@ -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;
|
||||
}
|
||||
|
@@ -7,9 +7,13 @@ public enum SyntaxNodeType
|
||||
IntegerValue,
|
||||
FloatValue,
|
||||
BooleanValue,
|
||||
CharValue,
|
||||
Variable,
|
||||
Type,
|
||||
Assign,
|
||||
Block,
|
||||
Constant,
|
||||
VariableDeclaration,
|
||||
ProgramBody,
|
||||
ProgramHead,
|
||||
Program
|
||||
|
10
CanonSharp.Pascal/SyntaxTree/TypeNode.cs
Normal file
10
CanonSharp.Pascal/SyntaxTree/TypeNode.cs
Normal 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;
|
||||
}
|
12
CanonSharp.Pascal/SyntaxTree/VariableDeclarationNode.cs
Normal file
12
CanonSharp.Pascal/SyntaxTree/VariableDeclarationNode.cs
Normal 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;
|
||||
}
|
Reference in New Issue
Block a user