• <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 清風 閱讀(2490) 評論(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
            套用范偉的一句話:你覺得這事有意思嗎?  回復  更多評論
              
            无码任你躁久久久久久| 久久久久婷婷| 亚洲va久久久噜噜噜久久| 婷婷伊人久久大香线蕉AV| 无码国内精品久久人妻蜜桃 | 国产成年无码久久久久毛片| 久久久无码人妻精品无码| 久久婷婷综合中文字幕| 久久亚洲精品无码观看不卡| 伊人久久综合无码成人网| 久久综合久久综合九色| AV无码久久久久不卡蜜桃| 99热精品久久只有精品| 亚洲狠狠婷婷综合久久蜜芽| 久久久精品久久久久久| 久久大香香蕉国产| 久久婷婷色香五月综合激情| 亚洲综合精品香蕉久久网97 | 久久er99热精品一区二区| 久久久久久av无码免费看大片| 亚洲AV无码久久| 亚洲精品第一综合99久久| 中文字幕亚洲综合久久| 蜜臀久久99精品久久久久久小说| 热RE99久久精品国产66热| 久久国产精品久久国产精品| 久久综合久久美利坚合众国| A级毛片无码久久精品免费| 国产精品18久久久久久vr | 国产精品成人久久久久三级午夜电影| 久久这里有精品| 久久久网中文字幕| 丁香久久婷婷国产午夜视频| 久久青草国产精品一区| 99久久国产综合精品麻豆| 色综合久久久久无码专区| 久久一日本道色综合久久| 亚洲精品无码久久久久久| 三上悠亚久久精品| 国内精品人妻无码久久久影院| 久久天天躁狠狠躁夜夜96流白浆|