53 lines
1.5 KiB
C#
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;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|