• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            流逝的時光
            總有一天我們都會離去 email: zzxhang@gmail.com
            posts - 21,comments - 111,trackbacks - 0

             命名為LuckyScript,有點古怪的名字,為什么這么叫呢?因為過去的兩年時間里我一直都覺得自己不太順,今年是本人的本命年,圖個吉利,希望所有事情都會好起來..有多少跟我一樣唯心主義的程序員?
            打算讓這門無類型的語言最低限度地支持面向對象,起碼能構造類跟重載函數吧,其他沒想好,寫著玩,最近還是挺閑的.這幾天把匯編器跟虛擬機搞了出來.
            測試用的匯編腳本,比較長

              1Func square
              2{
              3    Param a;
              4    
              5    Var c;
              6    
              7    Mov c,1;
              8    Mul c,a;
              9    Mul c,a;
             10
             11    Ret c;
             12}

             13Func addSquare
             14{
             15    Param a;
             16    Param b;
             17
             18    Push a;
             19    Call square;
             20    Mov a,RetVal;
             21    Push b;
             22    Call square;
             23    Mov b,RetVal;
             24
             25    Var c;
             26    Mov c,0;
             27    Add c,a; 
             28    Add c,b;   
             29    
             30    Ret c; 
             31}

             32
             33Func sum
             34{
             35    Param from;
             36    Param to;
             37
             38    Var i;
             39    Var s;
             40
             41    Mov s,0;
             42    Mov i,from;
             43    
             44Lab : next
             45    Add s,i;
             46    Inc i;
             47    Jle i,to,next;
             48
             49    Ret s;
             50}

             51
             52Func Main
             53{
             54    Var a;
             55    Var b;
             56    Var c;
             57
             58    Mov a,2;
             59    Mov b,3;
             60
             61    Push "Runtime info:";
             62    CallHost print;
             63    CallHost newLine;
             64    Push "call addSquare function";
             65    CallHost print;
             66    CallHost newLine;
             67    Push "Param: ";
             68    CallHost print;
             69    Push a;
             70    CallHost print;
             71    Push b;
             72    CallHost print;
             73    CallHost newLine;
             74
             75    Push a;
             76    Push b;
             77    Call addSquare;
             78
             79    Mov c,RetVal;
             80    
             81    Push "addSquare function return: ";
             82    CallHost print;  
             83    Push c;
             84    CallHost print;
             85    CallHost newLine;  
             86    
             87    Push "call sum function";
             88    CallHost print;
             89    CallHost newLine; 
             90    Push "Param: ";
             91    CallHost print;
             92    Push a;
             93    CallHost print;
             94    Push c;
             95    CallHost print;
             96    CallHost newLine; 
             97
             98    Push a;
             99    Push c;
            100    Call sum;
            101
            102    Mov c,RetVal;
            103    
            104    Push "sum function return: ";
            105    CallHost print;    
            106    Push c;
            107    CallHost print;
            108}

            主程序:

             1#include "stdafx.h"
             2#include "luckyscript.h"
             3
             4using namespace LUCKY_SCRIPT;
             5
             6void print(RuntimeState* state)
             7{
             8    int opType = lucky_getValType(state,-1);
             9
            10    if(opType == OP_FLAG_TYPE_INT)
            11    {
            12        int val = lucky_popValueAsInt(state);
            13        printf("%d ",val);
            14    }

            15    else if(opType == OP_FLAG_TYPE_FLOAT)
            16    {
            17        float val = lucky_popValueAsFloat(state);
            18        printf("%f ",val);
            19    }

            20    else if(opType == OP_FLAG_TYPE_STRING)
            21    {
            22        const char* val = lucky_popValueAsString(state);
            23        printf(val);
            24    }

            25}

            26
            27void newLine(RuntimeState* state)
            28{
            29    printf("\n");
            30}

            31
            32int _tmain(int argc, _TCHAR* argv[])
            33{
            34    lucky_initScript();
            35    lucky_compileAsmFile("test.lsm","test","");
            36
            37    RuntimeState* state = lucky_loadlxeFile("test.lxe");
            38    lucky_registerHostFunc(state,print,"print");
            39    lucky_registerHostFunc(state,newLine,"newLine");
            40    lucky_execute(state);
            41
            42    getch();
            43    return 0;
            44}

            運行結果:

            posted on 2009-02-24 17:25 清風 閱讀(2492) 評論(9)  編輯 收藏 引用 所屬分類: LuckyScript

            FeedBack:
            # re: 準備寫一門腳本語言,初步完成匯編器及虛擬機部分
            2009-02-24 17:30 | LOGOS

            又要出一個vczh么
              回復  更多評論
              
            # re: 準備寫一門腳本語言,初步完成匯編器及虛擬機部分
            2009-02-24 19:13 | flyman
            呵呵,不錯,等等看。  回復  更多評論
              
            # re: 準備寫一門腳本語言,初步完成匯編器及虛擬機部分
            2009-02-24 21:12 | yindf
            這個“匯編”有點好玩,

            RetVal 是怎么定義的呀?

            難道你的虛擬機里面專門有地方放返回值?

            如果允許擴展類型的話,大小怎么定?

            你的虛擬機支持垃圾回收嗎?

            或者你想實現成lua這樣子的?  回復  更多評論
              
            # re: 準備寫一門腳本語言,初步完成匯編器及虛擬機部分
            2009-02-24 23:28 | 陳梓瀚(vczh)
            做腳本無論如何得有lambda expression才有意思。腳本的話還是做堆棧機好。

            “Jle i,to,next;”這句話很有性格  回復  更多評論
              
            # re: 準備寫一門腳本語言,初步完成匯編器及虛擬機部分[未登錄]
            2009-02-25 12:37 | 清風
            @yindf
            自己定義"匯編"是挺好玩的

            RetVal作為一個虛擬寄存器

            可以這么理解

            大小在定義的時候就確定了

            剛弄出一個可運行的玩意,很多東西都還沒具體考慮

            @陳梓瀚(vczh)
            是挺有性格的,呵呵
              回復  更多評論
              
            # re: 準備寫一門腳本語言,初步完成匯編器及虛擬機部分
            2009-02-25 16:55 | 陳梓瀚(vczh)
            @清風
            一般來說,應該先定義高級語言,然后再考慮指令集的事情。  回復  更多評論
              
            # re: 準備寫一門腳本語言,初步完成匯編器及虛擬機部分[未登錄]
            2009-02-25 21:18 | 清風
            @陳梓瀚(vczh)
            指令集直接抄的XX語言的  回復  更多評論
              
            # re: 準備寫一門腳本語言,初步完成匯編器及虛擬機部分
            2009-02-26 12:31 | 夢在天涯
            哦,強力支持哦!我跟你們學習哦!

            中國缺少這個啊,最近學習perl,還有python,和ruby都比較流行啊!  回復  更多評論
              
            # re: 準備寫一門腳本語言,初步完成匯編器及虛擬機部分
            2009-02-26 16:49 | poco
            套用范偉的一句話:你覺得這事有意思嗎?  回復  更多評論
              
            久久精品国产99久久无毒不卡 | 久久久久这里只有精品 | 亚洲精品乱码久久久久久蜜桃| 色综合久久无码五十路人妻| 久久996热精品xxxx| 热久久这里只有精品| 久久亚洲春色中文字幕久久久 | 日本精品久久久久中文字幕8| 精品国产一区二区三区久久蜜臀| 久久精品国产亚洲AV久| 亚洲精品乱码久久久久久不卡| 色欲综合久久躁天天躁蜜桃| 久久久中文字幕日本| 精品久久久久久成人AV| 国产午夜精品理论片久久影视| 久久国产精品成人免费| 久久免费看黄a级毛片| 三级韩国一区久久二区综合| 久久国产成人精品国产成人亚洲| 久久免费的精品国产V∧| 人妻系列无码专区久久五月天| 精品国产一区二区三区久久| 色婷婷综合久久久久中文| 亚洲性久久久影院| 久久精品无码一区二区日韩AV| 精品久久久久成人码免费动漫| 亚洲级αV无码毛片久久精品| 久久亚洲中文字幕精品一区四| 国内精品久久久久久麻豆| 久久久青草久久久青草| 精品亚洲综合久久中文字幕| 国产综合久久久久| 久久永久免费人妻精品下载| 久久天天躁狠狠躁夜夜躁2O2O | 久久精品亚洲日本波多野结衣 | 欧美伊人久久大香线蕉综合| 久久无码精品一区二区三区| 久久国产成人午夜aⅴ影院| 大蕉久久伊人中文字幕| 国内精品伊人久久久久777| 蜜桃麻豆www久久|