예제 #1
0
        /// <summary>
        /// システムに登録する
        /// </summary>
        /// <param name="dic"></param>
        /// <param name="globalVar"></param>
        public void RegisterToSystem(NakoTokenDic dic, NakoVariableManager globalVar)
        {
            // --- 関数
            // Tokenizer に登録
            for (int i = 0; i < FuncList.Count; i++)
            {
                NakoAPIFunc call = FuncList[i];
                if (!dic.ContainsKey(call.name))
                {
                    dic.Add(call.name, NakoTokenType.FUNCTION_NAME);
                }
                else
                {
                    dic[call.name] = NakoTokenType.FUNCTION_NAME;
                }
            }

            // NakoVariables に登録
            for (int i = 0; i < FuncList.Count; i++)
            {
                NakoVariable var = new NakoVariable();
                var.SetBody(i, NakoVarType.SystemFunc);
                NakoAPIFunc call = FuncList[i];
                globalVar.SetVar(call.name, var);
            }

            // --- 変数
            foreach (string name in VarList.Keys)
            {
                NakoVariable var = new NakoVariable();
                var.SetBodyAutoType(VarList[name]);
                globalVar.SetVar(name, var);
            }
        }
예제 #2
0
        public void TestBlockLevel()
        {
            var tokenDic = new NakoTokenDic();

            NakoReservedWord.Init(tokenDic);
            Assert.IsTrue(
                NakoTokenization.Tokenize(
                    @"もし、A=1ならば
  PRINT A
違えば
  PRINT A
", tokenDic)
                .CheckTokenType(new NakoTokenType[] {
                NakoTokenType.IF,
                NakoTokenType.WORD,
                NakoTokenType.EQ,
                NakoTokenType.INT,
                NakoTokenType.EOL,
                NakoTokenType.SCOPE_BEGIN,
                NakoTokenType.PRINT,
                NakoTokenType.WORD,
                NakoTokenType.EOL,
                NakoTokenType.SCOPE_END,
                NakoTokenType.ELSE,
                NakoTokenType.EOL,
                NakoTokenType.SCOPE_BEGIN,
                NakoTokenType.PRINT,
                NakoTokenType.WORD,
                NakoTokenType.EOL,
                NakoTokenType.SCOPE_END
            }));
        }
예제 #3
0
 /// <summary>
 /// 単語の初期化
 /// </summary>
 /// <param name="dic"></param>
 public static void Init(NakoTokenDic dic)
 {
     // 構文
     dic.AddWord("もし", NakoTokenType.IF);
     dic.AddWord("ならば", NakoTokenType.THEN);
     dic.AddWord("違えば", NakoTokenType.ELSE);
     dic.AddWord("ここまで", NakoTokenType.KOKOMADE);
     dic.AddWord("繰り返す", NakoTokenType.FOR);
     dic.AddWord("間", NakoTokenType.WHILE);
     dic.AddWord("回", NakoTokenType.REPEAT_TIMES);
     dic.AddWord("反復", NakoTokenType.FOREACH);
     dic.AddWord("条件分岐", NakoTokenType.SWITCH);
     dic.AddWord("抜ける", NakoTokenType.BREAK);
     dic.AddWord("続ける", NakoTokenType.CONTINUE);
     dic.AddWord("戻る", NakoTokenType.RETURN);
     // デバッグ用の特殊構文
     dic.AddWord("PRINT", NakoTokenType.PRINT);
     // システムの優先予約語
     dic.AddWord("ナデシコ", NakoTokenType.RESERVED);
     dic.AddWord("取り込む", NakoTokenType.INCLUDE);
     // 変数定義など
     dic.AddWord("数値", NakoTokenType.DIM_NUMBER);
     dic.AddWord("整数", NakoTokenType.DIM_INT);
     dic.AddWord("文字列", NakoTokenType.DIM_STRING);
     dic.AddWord("変数", NakoTokenType.DIM_VARIABLE);
     dic.AddWord("配列変数", NakoTokenType.DIM_ARRAY);
     // 予約変数名
     dic.AddWord("それ", NakoTokenType.WORD); // SORE
     dic.AddWord("対象", NakoTokenType.WORD); // TAISYOU
     dic.AddWord("回数", NakoTokenType.WORD); // KAISU
     dic.AddWord("エラー監視", NakoTokenType.TRY);
     dic.AddWord("エラーならば", NakoTokenType.CATCH);
     dic.AddWord("エラー発生", NakoTokenType.THROW);
     dic.AddWord("エラー値", NakoTokenType.WORD); // ERROR
 }
예제 #4
0
 public void TestBlockLevel()
 {
     var tokenDic = new NakoTokenDic();
     NakoReservedWord.Init(tokenDic);
     Assert.IsTrue(
         NakoTokenization.Tokenize(
     @"もし、A=1ならば
       PRINT A
     違えば
       PRINT A
     ", tokenDic)
         .CheckTokenType(new NakoTokenType[]{
             NakoTokenType.IF,
             NakoTokenType.WORD,
             NakoTokenType.EQ,
             NakoTokenType.INT,
             NakoTokenType.EOL,
             NakoTokenType.SCOPE_BEGIN,
             NakoTokenType.PRINT,
             NakoTokenType.WORD,
             NakoTokenType.EOL,
             NakoTokenType.SCOPE_END,
             NakoTokenType.ELSE,
             NakoTokenType.EOL,
             NakoTokenType.SCOPE_BEGIN,
             NakoTokenType.PRINT,
             NakoTokenType.WORD,
             NakoTokenType.EOL,
             NakoTokenType.SCOPE_END
         }));
 }
예제 #5
0
파일: TestCNako.cs 프로젝트: weyk/nadesiko2
 public void test1()
 {
     NakoTokenDic dic = new NakoTokenDic();
     NakoReservedWord.Init(dic);
     if (dic.ContainsKey("hoge_")) {
         Assert.Fail("hoge has not element!");
     }
 }
예제 #6
0
 public void test1()
 {
     NakoTokenDic dic = new NakoTokenDic();
     NakoReservedWord.Init(dic);
     if (dic.ContainsKey("hoge_")) {
         Assert.Fail("hoge has not element!");
     }
 }
예제 #7
0
 /// <summary>
 /// 指定したソースコードからトークンを解析します。
 /// </summary>
 /// <param name="source">解析するソースコード。</param>
 /// <param name="tokenDic">解析に使用する、トークン辞書。</param>
 /// <returns>指定したソースコードから解析した、トークン一覧。</returns>
 public static NakoTokenList Tokenize(string source, NakoTokenDic tokenDic)
 {
     return new NakoTokenizer().Tokenize(source, tokenDic);
 }
예제 #8
0
 /// <summary>
 /// 指定したソースコードからトークンを解析します。
 /// </summary>
 /// <param name="source">解析するソースコード。</param>
 /// <param name="tokenDic">解析に使用する、トークン辞書。</param>
 /// <returns>指定したソースコードから解析した、トークン一覧。</returns>
 public NakoTokenList Tokenize(string source, NakoTokenDic tokenDic)
 {
     Initialization();
     this.source = source;
     this.tokenDic = tokenDic;
     SplitToToken();
     DefineFunction();
     CheckWord();
     Include ();
     CheckWord();//includeした後に関数が追加された可能性があるので、再チェック
     return tokens;
 }
예제 #9
0
        /// <summary>
        /// システムに登録する
        /// </summary>
        /// <param name="dic"></param>
        /// <param name="globalVar"></param>
        public void RegisterToSystem(NakoTokenDic dic, NakoVariableManager globalVar)
        {
            // --- 関数
            // Tokenizer に登録
            for (int i = 0; i < FuncList.Count; i++)
            {
                NakoAPIFunc call = FuncList[i];
                if (!dic.ContainsKey(call.name))
                {
                    dic.Add(call.name, NakoTokenType.FUNCTION_NAME);
                }
                else
                {
                    dic[call.name] = NakoTokenType.FUNCTION_NAME;
                }
            }

            // NakoVariables に登録
            for (int i = 0; i < FuncList.Count; i++)
            {
                NakoVariable var = new NakoVariable();
                var.SetBody(i, NakoVarType.SystemFunc);
                NakoAPIFunc call = FuncList[i];
                globalVar.SetVar(call.name, var);
            }

            // --- 変数
            foreach (string name in VarList.Keys)
            {
                NakoVariable var = new NakoVariable();
                var.SetBodyAutoType(VarList[name]);
                globalVar.SetVar(name, var);
            }
        }