44 lines
757 B
C#
44 lines
757 B
C#
|
namespace CanonSharp.Pascal.SyntaxTree;
|
|||
|
|
|||
|
public enum SyntaxNodeType
|
|||
|
{
|
|||
|
BinaryOperator,
|
|||
|
UnaryOperator,
|
|||
|
IntegerValue,
|
|||
|
FloatValue,
|
|||
|
BooleanValue,
|
|||
|
CharValue,
|
|||
|
Variable,
|
|||
|
Type,
|
|||
|
Assign,
|
|||
|
Block,
|
|||
|
Constant,
|
|||
|
VariableDeclaration,
|
|||
|
If,
|
|||
|
While,
|
|||
|
For,
|
|||
|
ProcedureCall,
|
|||
|
Parameter,
|
|||
|
SubprogramHead,
|
|||
|
SubprogramBody,
|
|||
|
SubProgram,
|
|||
|
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;
|
|||
|
}
|
|||
|
}
|