• <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>
            流逝的時(shí)光
            總有一天我們都會離去 email: zzxhang@gmail.com
            posts - 21,comments - 111,trackbacks - 0

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

              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}

            運(yùn)行結(jié)果:

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

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

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

            RetVal 是怎么定義的呀?

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

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

            你的虛擬機(jī)支持垃圾回收嗎?

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

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

            RetVal作為一個(gè)虛擬寄存器

            可以這么理解

            大小在定義的時(shí)候就確定了

            剛弄出一個(gè)可運(yùn)行的玩意,很多東西都還沒具體考慮

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

            中國缺少這個(gè)啊,最近學(xué)習(xí)perl,還有python,和ruby都比較流行??!  回復(fù)  更多評論
              
            # re: 準(zhǔn)備寫一門腳本語言,初步完成匯編器及虛擬機(jī)部分
            2009-02-26 16:49 | poco
            套用范偉的一句話:你覺得這事有意思嗎?  回復(fù)  更多評論
              
            国产精品禁18久久久夂久 | 久久这里只有精品首页| 99999久久久久久亚洲| 久久国产三级无码一区二区| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久久久久毛片免费播放| 国产AⅤ精品一区二区三区久久| 狠狠色丁香婷婷久久综合| 国内精品伊人久久久久AV影院| 狠狠久久综合伊人不卡| 久久亚洲精品成人av无码网站 | 色综合久久无码中文字幕| 国产精品久久久久久久午夜片| 亚洲国产精品久久久天堂| 久久影院午夜理论片无码| 久久福利青草精品资源站免费| 久久久久久精品久久久久| 久久精品国产一区二区电影| 国产精品99久久免费观看| 亚洲国产欧美国产综合久久| 合区精品久久久中文字幕一区| 日本福利片国产午夜久久| 久久精品天天中文字幕人妻| 久久亚洲精品成人无码网站 | 精品久久一区二区三区| 亚洲狠狠婷婷综合久久久久| 久久经典免费视频| 久久无码人妻精品一区二区三区| 久久er热视频在这里精品| 欧美牲交A欧牲交aⅴ久久| 国产毛片欧美毛片久久久| 久久综合九色综合网站| 欧美国产成人久久精品| 无码人妻久久一区二区三区蜜桃| 亚洲性久久久影院| 亚洲国产成人久久笫一页| 色8激情欧美成人久久综合电| 青青热久久国产久精品| 欧美久久亚洲精品| 亚洲伊人久久成综合人影院| 2021国产精品午夜久久|