Upsilon/Upsilon/Parser/SyntaxKindPrecedence.cs

53 lines
1.5 KiB
C#

namespace Upsilon.Parser
{
public static class SyntaxKindPrecedence
{
public enum Precedence
{
None = 0,
Or,
And,
Equality,
PlusMinus,
StarSlash,
Unary,
}
public static Precedence UnaryOperatorPrecedence(this SyntaxKind kind)
{
switch (kind)
{
case SyntaxKind.Plus:
case SyntaxKind.Minus:
case SyntaxKind.NotKeyword:
return Precedence.Unary;
default:
return Precedence.None;
}
}
public static Precedence BinaryOperatorPrecedence(this SyntaxKind kind)
{
switch (kind)
{
case SyntaxKind.EqualsEquals:
return Precedence.Equality;
case SyntaxKind.TildeEquals:
return Precedence.Equality;
case SyntaxKind.AndKeyword:
return Precedence.And;
case SyntaxKind.OrKeyword:
return Precedence.Or;
case SyntaxKind.Plus:
case SyntaxKind.Minus:
return Precedence.PlusMinus;
case SyntaxKind.Star:
case SyntaxKind.Slash:
return Precedence.StarSlash;
default:
return Precedence.None;
}
}
}
}