コード例 #1
0
 /// <summary>
 /// なでしこのシステム関数を定義する関数
 /// </summary>
 /// <param name="name"></param>
 /// <param name="fullname"></param>
 /// <param name="argdef"></param>
 /// <param name="resultType"></param>
 /// <param name="FuncDl"></param>
 public NakoAPIFunc(string name, string fullname, string argdef, NakoVarType resultType, SysCallDelegate FuncDl)
     : base(name, fullname, argdef)
 {
     this.FuncDl     = FuncDl;
     this.resultType = resultType;
     this.Used       = false;
 }
コード例 #2
0
        /// <summary>
        /// 関数をシステムに追加する
        /// </summary>
        /// <param name="name">関数の名前</param>
        /// <param name="argdef">引数の定義</param>
        /// <param name="resultType">関数の戻り値</param>
        /// <param name="f">実際に処理を行うC#のdelegate</param>
        /// <param name="desc">関数の説明</param>
        /// <param name="kana">命令のよみがな</param>
        protected void addFunc(string name, string argdef, NakoVarType resultType, SysCallDelegate f, string desc, string kana)
        {
            name = NakoToken.TrimOkurigana(name);
            NakoAPIFunc s = new NakoAPIFunc(name, argdef, resultType, f);

            NakoAPIFuncBank.Instance.AddFunc(s);
        }
コード例 #3
0
ファイル: NakoAPIFunc.cs プロジェクト: wnoguchi/nadesiko2
 /// <summary>
 /// なでしこのシステム関数を定義する関数
 /// </summary>
 /// <param name="name"></param>
 /// <param name="argdef"></param>
 /// <param name="resultType"></param>
 /// <param name="FuncDl"></param>
 public NakoAPIFunc(string name, string argdef, NakoVarType resultType, SysCallDelegate FuncDl)
     : base(name, argdef)
 {
     this.FuncDl = FuncDl;
     this.resultType = resultType;
     this.Used = false;
 }
コード例 #4
0
ファイル: NakoVariable.cs プロジェクト: tangfengray/nadesiko2
 /// <summary>
 /// 値の型を自動的に判別し、値と型を設定する
 /// </summary>
 /// <param name="value"></param>
 public void SetBodyAutoType(object value)
 {
     // detect type
     if (value is int)
     {
         _type = NakoVarType.Int;
         _body = Convert.ToInt64(value);
     }
     else if (value is long)
     {
         _type = NakoVarType.Int;
         _body = value;
     }
     else if (value is double)
     {
         _type = NakoVarType.Double;
         _body = value;
     }
     else if (value is string)
     {
         _type = NakoVarType.String;
         _body = value;
     }
     else if (value is NakoVarArray)
     {
         _type = NakoVarType.Array;
         _body = value;
     }
     else
     {
         _type = NakoVarType.Object;
         _body = value;
     }
 }
コード例 #5
0
ファイル: NakoAPIFuncBank.cs プロジェクト: wnoguchi/nadesiko2
 /// <summary>
 /// 関数を追加
 /// </summary>
 /// <param name="name"></param>
 /// <param name="argdef"></param>
 /// <param name="resultType"></param>
 /// <param name="f"></param>
 /// <param name="desc"></param>
 /// <param name="kana"></param>
 public void AddFunc(string name, string argdef, NakoVarType resultType, NakoPlugin.SysCallDelegate f, string desc, string kana)
 {
     name = NakoToken.TrimOkurigana(name);
     NakoAPIFunc s = new NakoAPIFunc(name, argdef, resultType, f);
     s.PluginInstance = PluginInstance;
     this.AddFuncToList(s);
 }
コード例 #6
0
        /// <summary>
        /// 関数を追加
        /// </summary>
        /// <param name="name"></param>
        /// <param name="argdef"></param>
        /// <param name="resultType"></param>
        /// <param name="f"></param>
        /// <param name="desc"></param>
        /// <param name="kana"></param>
        public void AddFunc(string name, string argdef, NakoVarType resultType, NakoPlugin.SysCallDelegate f, string desc, string kana)
        {
            name = NakoToken.TrimOkurigana(name);
            NakoAPIFunc s = new NakoAPIFunc(name, argdef, resultType, f);

            s.PluginInstance = PluginInstance;
            this.AddFuncToList(s);
        }
コード例 #7
0
ファイル: NakoVariable.cs プロジェクト: wnoguchi/nadesiko2
 /// <summary>
 /// 値の型を自動的に判別し、値と型を設定する
 /// </summary>
 /// <param name="value"></param>
 public void SetBodyAutoType(object value)
 {
     // detect type
     if (value is int)
     {
         _type = NakoVarType.Int;
         _body = Convert.ToInt64(value);
     }
     else if (value is long)
     {
         _type = NakoVarType.Int;
         _body = value;
     }
     else if (value is double)
     {
         _type = NakoVarType.Double;
         _body = value;
     }
     else if (value is string)
     {
         _type = NakoVarType.String;
         _body = value;
     }
     else if (value is NakoVarArray)
     {
         _type = NakoVarType.Array;
         _body = value;
     }
     else
     {
         _type = NakoVarType.Object;
         _body = value;
     }
 }
コード例 #8
0
ファイル: NakoVariable.cs プロジェクト: wnoguchi/nadesiko2
 /// <summary>
 /// 値と型を明示して設定する
 /// </summary>
 /// <param name="value"></param>
 /// <param name="type"></param>
 public void SetBody(object value, NakoVarType type)
 {
     _body = value;
     _type = type;
 }
コード例 #9
0
ファイル: NakoAPIRegister.cs プロジェクト: wnoguchi/nadesiko2
 /// <summary>
 /// 関数をシステムに追加する
 /// </summary>
 /// <param name="name">関数の名前</param>
 /// <param name="argdef">引数の定義</param>
 /// <param name="resultType">関数の戻り値</param>
 /// <param name="f">実際に処理を行うC#のdelegate</param>
 /// <param name="desc">関数の説明</param>
 /// <param name="kana">命令のよみがな</param>
 protected void addFunc(string name, string argdef, NakoVarType resultType, SysCallDelegate f, string desc, string kana)
 {
     name = NakoToken.TrimOkurigana(name);
     NakoAPIFunc s = new NakoAPIFunc(name, argdef, resultType, f);
     NakoAPIFuncBank.Instance.AddFunc(s);
 }
コード例 #10
0
ファイル: NakoVariable.cs プロジェクト: tangfengray/nadesiko2
 /// <summary>
 /// 値と型を明示して設定する
 /// </summary>
 /// <param name="value"></param>
 /// <param name="type"></param>
 public void SetBody(object value, NakoVarType type)
 {
     _body = value;
     _type = type;
 }
コード例 #11
0
 /// <summary>
 /// 初期化
 /// </summary>
 public void Init()
 {
     this.scope = NakoVariableScope.Global;
     this.varType = NakoVarType.Int;
     this.varNo = -1;
     this.varBy = VarByType.ByVal;
 }
コード例 #12
0
ファイル: NakoParser.cs プロジェクト: weyk/nadesiko2
        //> _def_variable : WORD (DIM_VARIABLE|DIM_NUMBER|DIM_INT|DIM_STRING|DIM_ARRAY) [=_value]
        //>               ;
        private bool _def_variable()
        {
            if (!Accept(NakoTokenType.WORD))
            {
                return(false);
            }
            NakoVarType st = NakoVarType.Object;

            switch (tok.NextTokenType)
            {
            case NakoTokenType.DIM_VARIABLE:
                st = NakoVarType.Object;
                break;

            case NakoTokenType.DIM_NUMBER:
                st = NakoVarType.Double;
                break;

            case NakoTokenType.DIM_INT:
                st = NakoVarType.Int;
                break;

            case NakoTokenType.DIM_STRING:
                st = NakoVarType.String;
                break;

            case NakoTokenType.DIM_ARRAY:
                st = NakoVarType.Array;
                break;

            default:
                return(false);
            }
            NakoToken    t     = tok.CurrentToken;
            int          varNo = localVar.CreateVar(t.GetValueAsName());
            NakoVariable v     = localVar.GetVar(varNo);

            v.SetBody(null, st);
            tok.MoveNext(); // skip WORD
            tok.MoveNext(); // skip DIM_xxx

            // 変数の初期化があるか?
            if (!Accept(NakoTokenType.EQ))
            {
                return(true); // なければ正常値として戻る
            }
            tok.MoveNext();   // skip EQ

            if (!_value())
            {
                throw new NakoParserException("変数の初期化文でエラー。", t);
            }
            // 代入文を作る
            NakoNodeLet let = new NakoNodeLet();

            let.VarNode       = new NakoNodeVariable();
            let.VarNode.varNo = varNo;
            let.VarNode.scope = NakoVariableScope.Local;
            let.ValueNode.AddChild(calcStack.Pop());
            this.parentNode.AddChild(let);
            return(true);
        }