青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

loop_in_codes

低調(diào)做技術(shù)__歡迎移步我的獨(dú)立博客 codemaro.com 微博 kevinlynx

實(shí)現(xiàn)一種解釋性腳本語(yǔ)言(二)

author: Kevin Lynx email: zmhn320#163.com date: 3.6.2009

語(yǔ)言特性

    在正式討論實(shí)現(xiàn)細(xì)節(jié)前明確下這個(gè)腳本語(yǔ)言的一些語(yǔ)言特性,基本上可以讓我們預(yù)見(jiàn)將
來(lái)會(huì)遇到哪些難題。總的來(lái)說(shuō),它(腳本)將同我們平時(shí)接觸的如lua一樣的腳本語(yǔ)言:擁
有一般的編程語(yǔ)言特性,如變量、各種控制流程、也許還有函數(shù),另一方面它還應(yīng)該和它的
宿主語(yǔ)言結(jié)合,如作為一個(gè)庫(kù)被用進(jìn)C,這還涉及到給這門(mén)語(yǔ)言設(shè)計(jì)一種插件方式,最好能
通過(guò)獨(dú)立的解釋程序讓腳本載入一些插件運(yùn)行。

    以下在描述我寫(xiě)的這個(gè)腳本語(yǔ)言時(shí),將以kl表示它的名字,以方便描述。

代碼塊:

    首先從整體風(fēng)格上,kl如同C語(yǔ)言一樣被劃分為函數(shù)塊,如:
    function func1()
    {
    }
    function func2()
    {
    }
    ...
    kl支持以{}隔離代碼塊,但是這并不意味著kl有多個(gè)獨(dú)立的局部堆棧,如同C語(yǔ)言一樣。
這些細(xì)節(jié)暫不討論。本節(jié)描述的所有內(nèi)容你都不必深究,因?yàn)槲抑灰竽銓?duì)kl有個(gè)感性上的
認(rèn)識(shí)。
    函數(shù)塊之外沒(méi)有可執(zhí)行的語(yǔ)句(statement)。那么你可能會(huì)想到程序的入口點(diǎn)也許會(huì)是
main。事實(shí)上從kl提供的庫(kù)來(lái)看,并沒(méi)有這種硬性要求。但是,kl的獨(dú)立解釋程序是這樣要
求的。   

變量:

    kl允許你在任何地方使用一個(gè)變量。變量不需要事先定義,任何地方出現(xiàn)一個(gè)合
法的標(biāo)識(shí)符時(shí),就意味著kl內(nèi)部會(huì)增加這個(gè)變量,并給予初值。變量也沒(méi)有靜態(tài)類(lèi)型,也不
會(huì)固定為某一類(lèi)型。就一門(mén)最簡(jiǎn)單的語(yǔ)言來(lái)看,我覺(jué)得數(shù)據(jù)類(lèi)型無(wú)非就是字符串和數(shù)字類(lèi)型

    所以,kl的變量在某一時(shí)刻必然是數(shù)字,或者字符串。在腳本里,你無(wú)法獲知一個(gè)變量
的類(lèi)型,事實(shí)上也沒(méi)這個(gè)必要。說(shuō)變量擁有一個(gè)類(lèi)型屬性,倒不如說(shuō)值(value)有一種類(lèi)型
屬性。
    當(dāng)字符串值與數(shù)字值參與運(yùn)算時(shí),如1+"a",其運(yùn)算結(jié)果將自動(dòng)轉(zhuǎn)換為字符串,也就是
"1a"。
    一個(gè)只有標(biāo)識(shí)符的語(yǔ)句(statement)通常意味著你想定義一個(gè)變量。這種無(wú)聊的手段通
常被用于定義全局變量。

運(yùn)算符:

    kl支持一般的C語(yǔ)言風(fēng)格的算術(shù)、比較、邏輯運(yùn)算符。例如加減乘除、大于小于、邏輯
與邏輯或。

作用域:

    kl腳本里只有兩個(gè)作用域:全局的和局部的。
    位于所有函數(shù)塊外的變量處于全局作用域;位于函數(shù)內(nèi)的變量處于局部作用域,位于函
數(shù)塊內(nèi)的代碼塊變量,還是處于局部作用域。
    當(dāng)局部作用域內(nèi)出現(xiàn)一個(gè)全局里的同名變量時(shí),優(yōu)先取局部作用域里的變量。這同C語(yǔ)
言一樣。

控制語(yǔ)句if:
    if的語(yǔ)法同C語(yǔ)言一樣,如:
    if( a > 10 )
    {
    }
    else
    {
    }
    if( a > 10 )中的a>10被我成為條件語(yǔ)句,所有條件語(yǔ)句,包括下面的while,都不能
為字符串。例如if( "a" )將被視為非法語(yǔ)句。(我為什么要這樣考慮?- -!)

控制語(yǔ)句while:

    c-like while:
    while( a > 10 )
    {
    }
    很遺憾,我暫時(shí)沒(méi)有加入對(duì)for的支持。因?yàn)槲矣X(jué)得既然有了while,有了循環(huán)控制,在
沒(méi)有更多無(wú)聊時(shí)間的前提下,我沒(méi)有必要加入for。

函數(shù):

    很遺憾,函數(shù)的定義和調(diào)用和C語(yǔ)言有點(diǎn)不一樣。這是因?yàn)閗l沒(méi)有變量類(lèi)型,那就意味
著函數(shù)定義如果和C語(yǔ)言一樣,就會(huì)出現(xiàn)語(yǔ)法歧義,如:
    func( a )
    {
    }
    就會(huì)和函數(shù)調(diào)用func(a)出現(xiàn)混淆。所以,我加入了function關(guān)鍵字。定義函數(shù)的語(yǔ)法
為:
    function func( a, b )
    {
    }
    如你所見(jiàn),函數(shù)支持參數(shù)傳遞,當(dāng)然也支持return a;返回值。kl是簡(jiǎn)陋的,因?yàn)樗鼪](méi)
有指針之類(lèi)的概念,所以你無(wú)法為函數(shù)傳遞一塊數(shù)據(jù)。當(dāng)然,kl也不能像lua一樣讓函數(shù)可
以返回多個(gè)值。
    函數(shù)調(diào)用的語(yǔ)法相對(duì)熟悉:
    func( 1, 3 );

數(shù)組:

    從一開(kāi)始我就沒(méi)考慮為kl加入數(shù)組。事實(shí)證明加入數(shù)組是一個(gè)不明智的做法。數(shù)組的支
持讓代碼在很多地方變得臟亂。無(wú)論如何,kl后來(lái)支持一維數(shù)組了。為了讓代碼保持那么一
點(diǎn)點(diǎn)的干凈,我甚至為定義數(shù)組加入dim的關(guān)鍵字。這意味著,在kl里,數(shù)組和一般的變量
總有點(diǎn)不一樣:變量無(wú)需定義,數(shù)組卻必須事先定義。
    數(shù)組的長(zhǎng)度不支持動(dòng)態(tài)擴(kuò)充。如果支持,我得讓kl內(nèi)部更好地去管理內(nèi)存。
    數(shù)組元素的類(lèi)型沒(méi)有硬性的規(guī)定,這意味著a[0] = 1; a[1] = "a";是允許的。

    語(yǔ)言特性上就描述這些,在本節(jié)末尾我決定貼一段kl計(jì)算階乘的代碼:

/* fac.kl */
function main()
{
    n = input( "%d" );
    print( "fac(" + n + ") = " + fac( n ) );
}

function fac( n )
{
    if( n == 1 )
    {
        return 1;
    }
    else
    {
        return fac( n - 1 ) * n;
    }
}

posted on 2009-03-06 16:01 Kevin Lynx 閱讀(4746) 評(píng)論(9)  編輯 收藏 引用 所屬分類(lèi): kl腳本實(shí)現(xiàn)編譯原理

評(píng)論

# re: 實(shí)現(xiàn)一種解釋性腳本語(yǔ)言(二) 2009-03-06 16:31 陳梓瀚(vczh)

類(lèi)型可以這么處理。假設(shè)你要處理operator>,理論上operator>的類(lèi)型是一個(gè)表。譬如說(shuō)C++語(yǔ)言的話(huà)有
<int,int,bool>
<float,float,bool>
<char,char,bool>
......
<int,float,bool>
<float,int,bool>

只要最終匹配到了唯一的一個(gè),那么就能夠得到第三個(gè)項(xiàng)也就是operator>的類(lèi)型了。如果匹配多個(gè)有可能是錯(cuò)誤(譬如函數(shù)重載),匹配不到一定是錯(cuò)誤。  回復(fù)  更多評(píng)論   

# re: 實(shí)現(xiàn)一種解釋性腳本語(yǔ)言(二) 2009-03-06 16:36 陳梓瀚(vczh)

另外,既然是無(wú)類(lèi)型的,那么我建議你把函數(shù)也作為值處理。譬如說(shuō)
pair=func(a,b)
{
return func(c)
{
return c(a,b);
};
};

first=func(p)
{
return p(func(a,b){return a;});
};

second=func(p)
{
return p(func(a,b){return b;});
};

main=func()
{
p=pair(pair(1,2),pair(3,4));
print(second(first(p)));//輸出3
};  回復(fù)  更多評(píng)論   

# re: 實(shí)現(xiàn)一種解釋性腳本語(yǔ)言(二) 2009-03-06 16:37 陳梓瀚(vczh)

于是你有了這種叫closure的東西,做垃圾收集器吧。引用計(jì)數(shù)不行的。  回復(fù)  更多評(píng)論   

# re: 實(shí)現(xiàn)一種解釋性腳本語(yǔ)言(二) 2009-03-06 18:54 空明流轉(zhuǎn)

我覺(jué)得類(lèi)型推導(dǎo)是一個(gè)以操作符為邊的有向無(wú)環(huán)圖。  回復(fù)  更多評(píng)論   

# re: 實(shí)現(xiàn)一種解釋性腳本語(yǔ)言(二) 2009-03-06 21:00 陳梓瀚(vczh)

@空明流轉(zhuǎn)
你這重要建模成類(lèi)似int×float ==(operator>)=> bool的才行。工程意義不大。而且沒(méi)什么理由無(wú)環(huán)。  回復(fù)  更多評(píng)論   

# re: 實(shí)現(xiàn)一種解釋性腳本語(yǔ)言(二) 2011-07-22 00:10 thircese

@Kevin Lynx

"我為什么要這樣考慮"
能否回答下?

"就會(huì)和函數(shù)調(diào)用func(a)出現(xiàn)混淆"
func(a)如果出現(xiàn)在全局范圍,
則是函數(shù)定義, 否則,
出現(xiàn)在局部范圍, 就是函數(shù)調(diào)用.
而且, 函數(shù)調(diào)用后面還有分號(hào),
而函數(shù)定義沒(méi)有.
為什么會(huì)混淆呢?
  回復(fù)  更多評(píng)論   

# re: 實(shí)現(xiàn)一種解釋性腳本語(yǔ)言(二) 2011-07-22 09:05 Kevin Lynx

@thircese
大概是因?yàn)樵谌址秶鷥?nèi)也能寫(xiě)下a = func()這樣的語(yǔ)句。分號(hào)雖然能作為區(qū)分,但在很簡(jiǎn)單的語(yǔ)法分析算法中,是希望由最開(kāi)頭的token來(lái)確定后面跟的是什么樣的語(yǔ)法。在具體實(shí)現(xiàn)時(shí):
if (tok == TK_FUNCTION) 就可以簡(jiǎn)單地知道是函數(shù)定義,而不是在掃描完函數(shù)名、參數(shù)列表、括號(hào)后發(fā)現(xiàn)還有分號(hào),才能確定是函數(shù)調(diào)用,這多少會(huì)加大實(shí)現(xiàn)的復(fù)雜度  回復(fù)  更多評(píng)論   

# re: 實(shí)現(xiàn)一種解釋性腳本語(yǔ)言(二) 2011-07-22 14:13 plagiarism detection

Writing your academic assignments usually utilize plagiarism detector. It can save your good name!   回復(fù)  更多評(píng)論   

# re: 實(shí)現(xiàn)一種解釋性腳本語(yǔ)言(二) 2011-07-22 16:43 thircese

@Kevin Lynx
原來(lái)是為了簡(jiǎn)單.  回復(fù)  更多評(píng)論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美日韩国产成人精品影院| 六月婷婷久久| 久久午夜av| 欧美专区日韩专区| 久久嫩草精品久久久精品| 久久精品日韩| 亚洲第一精品夜夜躁人人爽| 巨胸喷奶水www久久久免费动漫| 鲁鲁狠狠狠7777一区二区| 欧美国产欧美综合| 99国内精品久久久久久久软件| 亚洲视频每日更新| 久久久久国产一区二区三区| 国产一区二区三区不卡在线观看 | 亚洲欧美激情一区| 久久岛国电影| 亚洲欧洲精品成人久久奇米网| 日韩亚洲在线| 久久久久国产精品人| 欧美精品在线免费观看| 国产日产亚洲精品系列| 亚洲全部视频| 久久日韩粉嫩一区二区三区| 亚洲电影自拍| 欧美亚洲专区| 国产精品白丝jk黑袜喷水| 伊人激情综合| 午夜精彩国产免费不卡不顿大片| 蜜臀av一级做a爰片久久| 99riav国产精品| 久久先锋资源| 国产日韩成人精品| 一本色道久久综合狠狠躁篇怎么玩 | 久久女同精品一区二区| 欧美日韩国产专区| 在线视频观看日韩| 欧美一区二区三区在线观看| 亚洲国产精品成人综合| 久久www成人_看片免费不卡| 国产精品久久久久久模特| 日韩视频一区二区三区在线播放免费观看 | 一区二区免费看| 欧美99在线视频观看| 亚洲免费综合| 国产精品va在线播放| 日韩西西人体444www| 欧美成年人视频| 久久理论片午夜琪琪电影网| 国产午夜精品美女毛片视频| 亚洲欧美制服另类日韩| 在线亚洲欧美视频| 欧美性理论片在线观看片免费| 亚洲免费观看高清完整版在线观看| 欧美成年视频| 亚洲国产精品日韩| 免费不卡在线观看av| 久久成人综合视频| 国模一区二区三区| 久久亚洲二区| 久久亚洲国产成人| 亚洲国产日韩一级| 亚洲国产高清视频| 欧美伦理视频网站| 亚洲一区二区三区777| 一本色道88久久加勒比精品| 欧美视频观看一区| 欧美在线国产| 久久精品视频在线观看| 又紧又大又爽精品一区二区| 欧美成人免费在线视频| 欧美成人精品福利| 亚洲色图制服丝袜| 亚洲欧美日韩久久精品| 国产一区二区三区免费观看| 久久影视三级福利片| 免费成人在线观看视频| aa日韩免费精品视频一| 亚洲影院色在线观看免费| 国产一区二区三区四区| 欧美国产日本高清在线| 欧美午夜不卡影院在线观看完整版免费| 宅男精品视频| 久久成人18免费网站| 亚洲黄色免费| 一本色道久久综合亚洲精品高清| 国产精品美女一区二区| 久久综合久久久久88| 欧美激情在线狂野欧美精品| 亚洲欧美日韩精品久久亚洲区| 久久精品二区亚洲w码| 日韩午夜中文字幕| 欧美在线日韩| 亚洲视频免费| 玖玖综合伊人| 欧美一区二区私人影院日本| 久久亚洲视频| 午夜在线一区| 欧美高清视频| 国产欧美一区二区白浆黑人| 女同一区二区| 国产美女精品人人做人人爽| 亚洲高清免费在线| 国产一区二区中文字幕免费看| 亚洲区欧美区| 樱桃国产成人精品视频| 亚洲午夜精品久久久久久app| 亚洲福利视频免费观看| 午夜欧美大片免费观看| 一本大道久久精品懂色aⅴ| 久久国产精品亚洲va麻豆| 亚洲影音一区| 欧美精品在线一区二区三区| 久久天堂av综合合色| 国产精品久久9| 亚洲精品国产精品乱码不99| 亚洲高清视频一区| 久久精品中文| 久久久久久亚洲精品不卡4k岛国| 久久综合狠狠综合久久综合88| 亚洲欧洲av一区二区| 一区二区免费在线观看| 模特精品在线| 美女免费视频一区| 国产日韩精品视频一区二区三区| 亚洲人成在线免费观看| 在线日韩欧美视频| 久久国产婷婷国产香蕉| 欧美一区观看| 国产伦一区二区三区色一情| 亚洲视频一区二区在线观看| 一区二区三区你懂的| 欧美欧美在线| a4yy欧美一区二区三区| 亚洲午夜久久久| 欧美日韩精品在线视频| 亚洲精品国产拍免费91在线| 亚洲国产精品悠悠久久琪琪| 久久久久国产精品一区三寸| 看片网站欧美日韩| 亚洲第一色在线| 蜜桃久久av一区| 亚洲成人资源网| 亚洲理伦在线| 欧美日精品一区视频| aa级大片欧美三级| 亚洲欧美国产另类| 国产一区亚洲| 裸体丰满少妇做受久久99精品| 美女尤物久久精品| 亚洲国产成人精品久久| 欧美xart系列在线观看| 亚洲免费观看高清完整版在线观看| 日韩亚洲欧美中文三级| 欧美精品综合| 亚洲女同同性videoxma| 久久精品国产视频| 亚洲国产精品悠悠久久琪琪| 欧美久久一级| 性做久久久久久免费观看欧美| 老司机67194精品线观看| 亚洲精品综合精品自拍| 国产精品日本| 免费视频一区| 亚洲一级在线| 久久综合给合| 一区二区三区国产| 国产日韩在线视频| 免费一区视频| 亚洲女性裸体视频| 亚洲国产综合视频在线观看| 亚洲午夜日本在线观看| 国产一区二区精品丝袜| 欧美国产精品v| 亚洲欧美日韩网| 亚洲高清123| 亚洲欧美日韩一区二区三区在线| 韩国福利一区| 国产精品久久久久久久久久妞妞| 久久米奇亚洲| 午夜精彩国产免费不卡不顿大片| 欧美激情黄色片| 久久精品中文字幕免费mv| 日韩小视频在线观看专区| 国产精品一区二区三区四区五区| 美女国产一区| 欧美一区二区三区视频免费播放| 亚洲欧洲另类| 欧美高清在线播放| 久久久精品一品道一区| 亚洲视频综合在线| 久久躁狠狠躁夜夜爽| 在线播放日韩专区| 亚洲精品免费在线| 一二三区精品福利视频| 老司机午夜精品视频在线观看| 西瓜成人精品人成网站| 亚洲啪啪91| 亚洲国产成人久久综合| 国产欧美日韩综合精品二区| 欧美日韩亚洲在线|