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; } } } }