internal static bool IsBinaryOperator(UserDefinedOperator Op) { switch (Op) { case UserDefinedOperator.Plus: case UserDefinedOperator.Minus: case UserDefinedOperator.Multiply: case UserDefinedOperator.Divide: case UserDefinedOperator.Power: case UserDefinedOperator.IntegralDivide: case UserDefinedOperator.Concatenate: case UserDefinedOperator.ShiftLeft: case UserDefinedOperator.ShiftRight: case UserDefinedOperator.Modulus: case UserDefinedOperator.Or: case UserDefinedOperator.Xor: case UserDefinedOperator.And: case UserDefinedOperator.Like: case UserDefinedOperator.Equal: case UserDefinedOperator.NotEqual: case UserDefinedOperator.Less: case UserDefinedOperator.LessEqual: case UserDefinedOperator.GreaterEqual: case UserDefinedOperator.Greater: return(true); } return(false); }
public override Verb CreateVerb(string[] tokens) { var type = tokens[2]; var name = tokens[4]; Color(position, tokens[1].Length, Whitespaces); Color(type.Length, KeyWords); Color(tokens[3].Length, Whitespaces); Color(name.Length, Operators); Color(tokens[5].Length, Structures); var index = position + length; var parametersParser = new ParametersParser(); var parsed = parametersParser.Parse(source, index); parsed.If(out var parameters, out index).Must().BeTrue().OrThrow("Operator parser", () => "Parameters malformed"); if (functionBodyParser.Parse(source, index).If(out var block, out var newIndex)) { overridePosition = newIndex; var lambda = new Lambda(new Region(), block, parameters, false); var affinity = 0; var pre = false; switch (type) { case "nofix": affinity = 0; break; case "prefix": affinity = 1; pre = true; break; case "postfix": affinity = 1; break; case "infix": affinity = 2; break; } var userDefinedOperator = new UserDefinedOperator(affinity, pre, lambda); CompilerState.RegisterOperator(name, userDefinedOperator); return(new NullOp()); } return(null); }
internal static bool IsUnaryOperator(UserDefinedOperator Op) { switch (Op) { case UserDefinedOperator.Narrow: case UserDefinedOperator.Widen: case UserDefinedOperator.IsTrue: case UserDefinedOperator.IsFalse: case UserDefinedOperator.Negate: case UserDefinedOperator.Not: case UserDefinedOperator.UnaryPlus: return(true); } return(false); }
internal static UserDefinedOperator MapToUserDefinedOperator(MethodBase Method) { int index = 1; do { if (Method.Name.Equals(OperatorCLSNames[index])) { int length = Method.GetParameters().Length; UserDefinedOperator op = (UserDefinedOperator)((sbyte)index); if ((length == 1) && IsUnaryOperator(op)) { return(op); } if ((length == 2) && IsBinaryOperator(op)) { return(op); } } index++; }while (index <= 0x1b); return(UserDefinedOperator.UNDEF); }
public void RegisterOperator(string name, UserDefinedOperator _operator) => operators[name] = _operator;
internal static bool IsUnaryOperator(UserDefinedOperator Op) { switch (Op) { case UserDefinedOperator.Narrow: case UserDefinedOperator.Widen: case UserDefinedOperator.IsTrue: case UserDefinedOperator.IsFalse: case UserDefinedOperator.Negate: case UserDefinedOperator.Not: case UserDefinedOperator.UnaryPlus: return true; } return false; }
internal static bool IsBinaryOperator(UserDefinedOperator Op) { switch (Op) { case UserDefinedOperator.Plus: case UserDefinedOperator.Minus: case UserDefinedOperator.Multiply: case UserDefinedOperator.Divide: case UserDefinedOperator.Power: case UserDefinedOperator.IntegralDivide: case UserDefinedOperator.Concatenate: case UserDefinedOperator.ShiftLeft: case UserDefinedOperator.ShiftRight: case UserDefinedOperator.Modulus: case UserDefinedOperator.Or: case UserDefinedOperator.Xor: case UserDefinedOperator.And: case UserDefinedOperator.Like: case UserDefinedOperator.Equal: case UserDefinedOperator.NotEqual: case UserDefinedOperator.Less: case UserDefinedOperator.LessEqual: case UserDefinedOperator.GreaterEqual: case UserDefinedOperator.Greater: return true; } return false; }