public RumorCompiler LinkAction
     (string name, Engine.ValueType p1, Engine.ValueType p2,
     Engine.ValueType p3, Engine.ValueType p4)
 {
     userState.LinkAction(name, p1, p2, p3, p4);
     return(this);
 }
 public RumorCompiler LinkFunction
     (string name, Engine.ValueType p1, Engine.ValueType p2,
     Engine.ValueType p3, Engine.ValueType result)
 {
     userState.LinkFunction(name, p1, p2, p3, result);
     return(this);
 }
 public void LinkAction
     (string name, Engine.ValueType p1, Engine.ValueType p2,
     Engine.ValueType p3, Engine.ValueType p4)
 {
     BindingHints[BindingUtil.MungeName(BindingType.Action, name, 4)] =
         new BindingActionHint4(p1, p2, p3, p4);
 }
 public void LinkFunction
     (string name, Engine.ValueType p1, Engine.ValueType p2,
     Engine.ValueType p3, Engine.ValueType p4, Engine.ValueType result)
 {
     BindingHints[BindingUtil.MungeName(BindingType.Function, name, 4)] =
         new BindingFunctionHint4(p1, p2, p3, p4, result);
 }
        public void LinkVariable(int errorIndex, string id, Engine.ValueType type)
        {
            if (UsedVariables.ContainsKey(id) && UsedVariables[id] != type)
            {
                throw new ReasonException(errorIndex,
                                          "we are trying to use the variable \"" + id +
                                          "\" as a " + type + ", but it has already been " +
                                          "used as a " + UsedVariables[id] + "!"
                                          );
            }

            UsedVariables[id] = type;
            ResolveVariables(errorIndex);
        }
示例#6
0
        public static Parser <string> Variable(Engine.ValueType type)
        {
            return(state =>
            {
                using (var transaction = new Transaction(state))
                {
                    var errorIndex = state.Index;
                    var id = Identifier(state);

                    var userState = (RumorParserState)state.UserState;
                    userState.LinkVariable(errorIndex, id, type);

                    transaction.CommitIndex();
                    return id;
                }
            });
        }
示例#7
0
        private static Parser <Expression> Param(Engine.ValueType t)
        {
            return(state =>
            {
                switch (t)
                {
                case Engine.ValueType.Boolean:
                    return Logic(state);

                case Engine.ValueType.Number:
                    return Math(state);

                case Engine.ValueType.String:
                    return Quote(state);

                default:
                    throw new InvalidOperationException(
                        "Unknown value type!"
                        );
                }
            });
        }
 public void LinkAction
     (string name, Engine.ValueType p1, Engine.ValueType p2)
 {
     BindingHints[BindingUtil.MungeName(BindingType.Action, name, 2)] =
         new BindingActionHint2(p1, p2);
 }
 public void LinkFunction
     (string name, Engine.ValueType p1, Engine.ValueType result)
 {
     BindingHints[BindingUtil.MungeName(BindingType.Function, name, 1)] =
         new BindingFunctionHint1(p1, result);
 }