36 lines
639 B
C#
36 lines
639 B
C#
namespace CanonSharp.Pascal.SyntaxTree;
|
|
|
|
public enum SyntaxNodeType
|
|
{
|
|
BinaryOperator,
|
|
UnaryOperator,
|
|
IntegerValue,
|
|
FloatValue,
|
|
BooleanValue,
|
|
CharValue,
|
|
Variable,
|
|
Type,
|
|
Assign,
|
|
Block,
|
|
Constant,
|
|
VariableDeclaration,
|
|
ProgramBody,
|
|
ProgramHead,
|
|
Program
|
|
}
|
|
|
|
public abstract class SyntaxNodeBase
|
|
{
|
|
public abstract SyntaxNodeType NodeType { get; }
|
|
|
|
public T Convert<T>() where T : SyntaxNodeBase
|
|
{
|
|
if (this is not T result)
|
|
{
|
|
throw new InvalidCastException($"Can't convert {NodeType} to target node.");
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|