//----------------------------------------------------------------------- // ----------------------------------------------------------------------- // file="ExpOperatorPrecedence" // Project: StgSharp // AuthorGroup: Nitload Space // Copyright (c) Nitload Space. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. // // ----------------------------------------------------------------------- // ----------------------------------------------------------------------- using System; using System.Collections.Frozen; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StgSharp.Script.Express { public static partial class ExpressCompile { public static bool TryGetOperatorPrecedence(string operatorName, out int precedence) { return _operatorPrecedence.TryGetValue(operatorName, out precedence); } public static bool TryGetSuperTypeOperatorPrecedence(string operatorName, out int precedence) { return _superTypeOperatorPrecedent.TryGetValue(operatorName, out precedence); } private static void InitPrecedence() { KeyValuePair[] source = [ new KeyValuePair(PoolString("["), 1), new KeyValuePair(PoolString("."), 1), new KeyValuePair(PoolString("\\"), 1), new KeyValuePair(PoolString("unary+"), 2), new KeyValuePair(PoolString("unary-"), 2), new KeyValuePair(PoolString("NOT"), 2), new KeyValuePair(PoolString("**"), 3), new KeyValuePair(PoolString("*"), 4), new KeyValuePair(PoolString("/"), 4), new KeyValuePair(PoolString("AND"), 4), new KeyValuePair(PoolString("MOD"), 4), new KeyValuePair(PoolString("DIV"), 4), new KeyValuePair(PoolString("||"), 4), new KeyValuePair(PoolString("+"), 5), new KeyValuePair(PoolString("-"), 5), new KeyValuePair(PoolString("OR"), 5), new KeyValuePair(PoolString("XOR"), 5), new KeyValuePair(PoolString("="), 6), new KeyValuePair(PoolString("<>"), 6), new KeyValuePair(PoolString("<="), 6), new KeyValuePair(PoolString(">="), 6), new KeyValuePair(PoolString(">"), 6), new KeyValuePair(PoolString("<"), 6), new KeyValuePair(PoolString(":=:"), 6), new KeyValuePair(PoolString(":<>:"), 6), new KeyValuePair(PoolString("IN"), 6), new KeyValuePair(PoolString("LIKE"), 6), new KeyValuePair(PoolString(Keyword.Assignment), 7) ]; _operatorPrecedence = new Dictionary(source, _multiplexer).ToFrozenDictionary(); source = [ new KeyValuePair("ONEOF", 1), new KeyValuePair("AND", 2), new KeyValuePair("ANDOR", 3), ]; _superTypeOperatorPrecedent = new Dictionary(source, _multiplexer).ToFrozenDictionary( ); } #pragma warning disable CS8618 private static FrozenDictionary _superTypeOperatorPrecedent; private static FrozenDictionary _operatorPrecedence; #pragma warning restore CS8618 } }