專利名稱:計(jì)算環(huán)境中翻譯表達(dá)式的制作方法
計(jì)算環(huán)境中翻譯表達(dá)式
背景技術(shù):
本發(fā)明涉及在計(jì)算環(huán)境中翻譯表達(dá)式(expression)。
在外殼腳本語(yǔ)言(例如,ksh)中,可以使用前綴(例如,$)來(lái)引用在 外殼腳本中的參數(shù)。在ksh中,動(dòng)態(tài)環(huán)境保持之前定義的參數(shù)值。在運(yùn)行外 殼腳本或者賦值命令行表達(dá)式時(shí),所引用的參數(shù)根據(jù)其在動(dòng)態(tài)環(huán)境中的參數(shù) 值而被綁定。在某些情況下,當(dāng)以腳本語(yǔ)言創(chuàng)建腳本時(shí),使用適合腳本語(yǔ)言 的引用語(yǔ)法(quoting syntax)對(duì)于在腳本運(yùn)行時(shí)保留字面值(literal value) 和抑制引用的表達(dá)式中參數(shù)的綁定都是非常有用的。也可以使用其它機(jī)制來(lái) 將參數(shù)綁定為預(yù)定值,例如宏展開(macro expansion)。
發(fā)明內(nèi)容
在總的方案中,本發(fā)明旨在提供一種用于翻譯表達(dá)式的方法,以及相應(yīng) 的軟件和系統(tǒng)。所述方法包括接受以第一語(yǔ)法表示的第一表達(dá)式,所述表達(dá) 式包括使用第一語(yǔ)法表示字符串值(string value)的第一字符序列;識(shí)別用 于表示該表達(dá)式的第二語(yǔ)法;以及以表示第一表達(dá)式的第二語(yǔ)法生成第二表 達(dá)式,包括以第一字符序列生成第二字符序列,使得所述第二字符序列使用 第二語(yǔ)法表示字符串值。
本發(fā)明這一方案包括一個(gè)或者多個(gè)下列特征
第一表達(dá)式包括多個(gè)可執(zhí)行語(yǔ)句。
第一表達(dá)式包括命令行輸入。
第一字符序列包括被綁定到所引用值的參數(shù)。
使用第一字符序列生成第二字符序列包括綁定參數(shù)到所引用的值;以 及根據(jù)第二語(yǔ)法的引用語(yǔ)法來(lái)生成包括所引用的值的所述第二字符序列。 第一字符序列包括包圍參數(shù)的分隔符。
分隔符包括預(yù)定前綴,所述預(yù)定前綴包括其后帶有引用符號(hào)的美元符號(hào)。分隔符包括預(yù)定后綴,所述預(yù)定后綴包括引用符號(hào)。 第一字符序列包括包圍字符串值表示方式的分隔符。 字符串值包括在該第一語(yǔ)法中用以表明參數(shù)引用的字符。 使用所述第一字符序列生成第二字符序列包括抑制字符串值中的參數(shù) 綁定。
選擇與計(jì)算語(yǔ)言兼容的所述第二語(yǔ)法,例如ksh、 java、 DML、 C或SQL。 所述第二語(yǔ)法包括用于解釋字符序列的規(guī)則。 識(shí)別第二語(yǔ)法包括基于在第一字符序列前的標(biāo)志符來(lái)識(shí)別語(yǔ)法。 在總的方案中,本發(fā)明旨在提供一種用于賦值表達(dá)式的方法,以及相應(yīng) 的軟件和系統(tǒng)。所述方法包括接受存儲(chǔ)參數(shù)定義的一個(gè)或者多個(gè)數(shù)據(jù)結(jié)構(gòu); 識(shí)別所述表達(dá)式中所引用的一個(gè)或者多個(gè)參數(shù);基于所存儲(chǔ)的定義為每個(gè)所 識(shí)別的參數(shù)確定值;以及將所確定的參數(shù)值存儲(chǔ)在綁定環(huán)境中。 本發(fā)明這一方案包括一個(gè)或者多個(gè)下列特征
綁定環(huán)境存儲(chǔ)所識(shí)別參數(shù)的值以及存儲(chǔ)對(duì)于賦值所識(shí)別的參數(shù)所必需 的參數(shù)值,并且該綁定環(huán)境不必存儲(chǔ)在所述一個(gè)或者多個(gè)數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)有 其定義的全部參數(shù)的值。
該方法還包括利用綁定到來(lái)自綁定環(huán)境的值的所引用的參數(shù)來(lái)執(zhí)行表
達(dá)式o
表達(dá)式是程序或者腳本的一部分。 表達(dá)式包括命令行輸入。
本發(fā)明的多個(gè)方案可以包括一個(gè)或者多個(gè)以下優(yōu)點(diǎn)
數(shù)據(jù)處理環(huán)境可以包括元數(shù)據(jù),例如數(shù)據(jù)轉(zhuǎn)換的定義或者記錄格式(例 如,以數(shù)據(jù)操作語(yǔ)言所寫的)。具有依據(jù)在運(yùn)行時(shí)獲得的字面值定義的動(dòng)態(tài) 元數(shù)據(jù)是有用處的。根據(jù)所識(shí)別的語(yǔ)法翻譯目標(biāo)表達(dá)式不僅能夠獲得字面 值,而且能夠以適合所識(shí)別的語(yǔ)法的方式引用的字面值。而且,為了尊重 (honor)用于所識(shí)別的語(yǔ)法的引用慣例, 一些字面值可以在目標(biāo)表達(dá)式的賦 值中被保留。
計(jì)算系統(tǒng)可以在綁定環(huán)境中存儲(chǔ)參數(shù)值。在賦值表達(dá)式(例如,在外殼 腳本中的表達(dá)式或者命令行表達(dá)式)時(shí),根據(jù)綁定環(huán)境中的參數(shù)值來(lái)綁定所 引用的參數(shù)。存在與在綁定環(huán)境中保持參數(shù)值有關(guān)聯(lián)的開銷。為了避免必須
保持綁定環(huán)境具有(例如,在參數(shù)及其定義的列表中)已定義的每個(gè)參數(shù)的 值,計(jì)算系統(tǒng)可以掃描表達(dá)式以確定只用于實(shí)際在該表達(dá)式中所引用的參數(shù) 的值和其值對(duì)于賦值所引用的參數(shù)是必須的參數(shù)的值。本發(fā)明的其它特征和 優(yōu)點(diǎn),可以通過(guò)以下描述以及所屬權(quán)利要求變得清楚。
圖1是表示計(jì)算環(huán)境和目標(biāo)環(huán)境之間互動(dòng)的框圖。
圖2是用于翻譯表達(dá)式的計(jì)算環(huán)境的框圖。
圖3是示出數(shù)據(jù)倉(cāng)庫(kù)中,用于參數(shù)分配的存儲(chǔ)區(qū)域的內(nèi)容的框圖。 圖4是示出在本地存儲(chǔ)器中綁定環(huán)境的內(nèi)容的框圖。
具體實(shí)施例方式
參考圖1,計(jì)算環(huán)境100支持使用源語(yǔ)法的源計(jì)算表達(dá)式102 (例如, 腳本,程序、路徑名等)的規(guī)范,然后,將源表達(dá)式102翻譯為目標(biāo)表達(dá)式 104,目標(biāo)表達(dá)式104使用在多個(gè)可能的目標(biāo)環(huán)境中的一個(gè)之中適合賦值(例 如,執(zhí)行,擴(kuò)展等)的目標(biāo)語(yǔ)法。計(jì)算環(huán)境100包括用于識(shí)別特定目標(biāo)環(huán)境 108的過(guò)程106,例如,外殼環(huán)境或者計(jì)算機(jī)編程語(yǔ)言環(huán)境,在其中對(duì)目標(biāo) 表達(dá)式104賦值。過(guò)程106可以基于目標(biāo)表達(dá)式104中的信息,基于其它用 戶的輸入,或者基于默認(rèn)的環(huán)境,來(lái)識(shí)別目標(biāo)環(huán)境。
作為這種翻譯的一部分,選擇性的參數(shù)替換被執(zhí)行,例如,在翻譯時(shí)可 以基于參數(shù)分配101將一些參數(shù)引用解析(resolve),而在之后對(duì)所翻譯的 表達(dá)式賦值時(shí)(例如,基于外殼變量109),解析其它參數(shù)引用。翻譯過(guò)程 取決于目標(biāo)語(yǔ)法的特征,特別是,涉及引用字符串和參數(shù)引用的這些特征。
期望在目標(biāo)表達(dá)式的賦值中保留字面值。通常,每個(gè)目標(biāo)語(yǔ)法包含用于 引用字面值的某一些類型規(guī)定,使得不能根據(jù)其它語(yǔ)法方面進(jìn)行賦值,例如 涉及操作者、參數(shù)替換或者分隔符的語(yǔ)法方面。
在翻譯期間,可以基于源表達(dá)式中的符號(hào)值引入目標(biāo)表達(dá)式的一些字面 值,例如,基于參數(shù)替換。S卩,在源表達(dá)式被指定時(shí),目標(biāo)表達(dá)式中的期望 的文字表達(dá)式的值可能是未知的。
可以以一種語(yǔ)言,例如,參數(shù)定義語(yǔ)言(PDL)定義源表達(dá)式,該語(yǔ)言 可以通過(guò)獲取在賦值源表達(dá)式時(shí)引用的一些值來(lái)產(chǎn)生期望的目標(biāo)表達(dá)式。這 種PDL包括用于以多個(gè)可能的目標(biāo)語(yǔ)言之一的適當(dāng)語(yǔ)法來(lái)生成所引用的文 字的機(jī)制。"表達(dá)式"包括,例如,部分腳本或者程序(包括整個(gè)腳本或者 程序),或者命令行輸入。
圖2示出以一個(gè)或多個(gè)目標(biāo)語(yǔ)言(例如,外殼語(yǔ)言或者其它腳本語(yǔ)言) 的語(yǔ)法來(lái)賦值PDL表達(dá)式并執(zhí)行結(jié)果目標(biāo)表達(dá)式的示例性計(jì)算環(huán)境100。計(jì) 算環(huán)境100包括計(jì)算系統(tǒng)110,計(jì)算系統(tǒng)110包括本地存儲(chǔ)器120 (例如, 隨機(jī)存取存儲(chǔ)器)和數(shù)據(jù)倉(cāng)庫(kù)130 (例如,位于一個(gè)或者多個(gè)非易失性存儲(chǔ) 媒體)。數(shù)據(jù)倉(cāng)庫(kù)130存儲(chǔ)功能數(shù)據(jù),例如腳本132、程序134和可以配置 在多組參數(shù)中的參數(shù)分配136 (例如,包括參數(shù)名、參數(shù)值,和可選的,參 數(shù)屬性),所述多組參數(shù)可以用于各種腳本132和/或程序134的任何一個(gè)之 中。用戶可以通過(guò)圖形用戶界面(GUI) 140和/或通過(guò)命令行接口 (CLI) 150與計(jì)算系統(tǒng)互動(dòng)。
參數(shù)分配136可以包括使用源PDL表達(dá)式定義的參數(shù),所述表達(dá)式提供 了一致的語(yǔ)法,用戶可以以該語(yǔ)法定義參數(shù)值,所述參數(shù)值將被翻譯為多個(gè) 目標(biāo)語(yǔ)法中的任何一個(gè)。參數(shù)定義可以參考其它參數(shù)的值。多個(gè)規(guī)則中的任 何一個(gè)可以用于確定哪個(gè)參數(shù)可以參考哪個(gè)其它參數(shù)(例如,有序列表一參 數(shù)定義可以參考先前定義的參數(shù);或者組一在一個(gè)組中的參數(shù)可以參考另一 個(gè)組中的參數(shù))。
下面詳細(xì)描述用于賦值源PDL表達(dá)式的方法,其包括接受PDL表達(dá)式, 識(shí)別用于表示PDL表達(dá)式的目標(biāo)語(yǔ)法,以及根據(jù)目標(biāo)語(yǔ)法生成PDL表達(dá)式 的表示。例如,包括PDL表達(dá)式的腳本可以包括一系列內(nèi)嵌標(biāo)志符(inline token),每個(gè)內(nèi)嵌標(biāo)志符后伴有PDL表達(dá)式。計(jì)算系統(tǒng)110通過(guò)讀取腳本 中的每個(gè)標(biāo)志符(指示所使用的目標(biāo)語(yǔ)言)識(shí)別目標(biāo)語(yǔ)法以編譯所伴隨的 PDL表達(dá)式。因此,通過(guò)在腳本中包括指示所使用的不同的目標(biāo)語(yǔ)言的不同 的標(biāo)志符,可以在腳本中改變目標(biāo)語(yǔ)法,以編譯腳本的不同部分。
被接受的PDL表達(dá)式可以包括表示字符串值的字符序列。字符序列可以 通過(guò)參數(shù)引用來(lái)表示字符串值(")(例如,將用于表示參數(shù)值的參數(shù)前綴 綁定至字符串值)?;蛘?,字符序列可以通過(guò)引用的文字表達(dá)式來(lái)表示字符 串值(6)(例如,分隔符圍繞字符串值的表示)。
如果PDL表達(dá)式中的字符序列通過(guò)參數(shù)引用來(lái)表示字符串值"),則
計(jì)算系統(tǒng)iio例如根據(jù)引用的語(yǔ)法來(lái)識(shí)別參數(shù)引用的類型。引用可以是"直 接替換"的參數(shù)引用,在這種情況下,計(jì)算系統(tǒng)iio將參數(shù)引用綁定為參數(shù)
值。或者,弓i用可以是"替換加引用"的參數(shù)引用,在這種情況下,計(jì)算系
統(tǒng)110使用用于在目標(biāo)語(yǔ)法中生成所引用文字的機(jī)制,將參數(shù)引用綁定為參 數(shù)值,如下所述(例如,2.2.3)。
如果PDL表達(dá)式中的字符序列通過(guò)所引用的文字表達(dá)式表示字符串值 (6),則計(jì)算系統(tǒng)110保留文字表達(dá)式中的字符串值而不執(zhí)行替換。計(jì)算 系統(tǒng)110根據(jù)目標(biāo)語(yǔ)法確定哪個(gè)將作為所引用的文字表達(dá)式被解釋。如果以 其它方式表示參數(shù)引用(例如,直接替換參數(shù)引用)的字符序列被嵌入所引 用的文字表達(dá)式,那么該字符序列不作為參數(shù)引用(例如,沒(méi)有綁定到參數(shù) 值)來(lái)處理。
在計(jì)算系統(tǒng)110為參數(shù)引用綁定值時(shí),為了避免必須花時(shí)間利用已定義 的每個(gè)參數(shù)(例如,在一列參數(shù)和它們的定義中)的值來(lái)建立動(dòng)態(tài)環(huán)境,計(jì) 算系統(tǒng)110可以掃描表達(dá)式,以確定只在該表達(dá)式中實(shí)際引用的參數(shù)的值。 由于參數(shù)可以根據(jù)其它參數(shù)來(lái)定義,因此一些在表達(dá)式中沒(méi)有直接引用的參 數(shù)還可以在賦值直接引用的參數(shù)過(guò)程中被賦值。直接或者間接引用的參數(shù)值 被存儲(chǔ)在本地存儲(chǔ)器120中的綁定環(huán)境中。在計(jì)算系統(tǒng)110賦值PDL表達(dá)式 之后,計(jì)算系統(tǒng)以相應(yīng)的目標(biāo)語(yǔ)法生成目標(biāo)表達(dá)式。然后,計(jì)算系統(tǒng)110可 以執(zhí)行目標(biāo)表達(dá)式和/或?qū)⒛繕?biāo)表達(dá)式存儲(chǔ)在數(shù)據(jù)倉(cāng)庫(kù)130中。
2表達(dá)式的翻譯
從源語(yǔ)法到目標(biāo)語(yǔ)法的表達(dá)式翻譯包括使用在翻譯時(shí)已知的參數(shù)值的 參數(shù)替換。源PDL語(yǔ)法使用多個(gè)"$-substitution"語(yǔ)法來(lái)以值替換參數(shù)。
源PDL語(yǔ)法使用第一類型的"S-substitution"語(yǔ)法,該語(yǔ)法使用"直接 替換"的參數(shù)引用。該語(yǔ)法使用S〈name〉,例如,$foo,以參數(shù)foo的值直 接替換字符串Sfoo。請(qǐng)注意,在$被用作字符串文字的時(shí)候不執(zhí)行這種替換, 例如
'the price is $12.00'
一個(gè)以具有值1.00的參數(shù)foo直接替換的例子)具有源表達(dá)式 if($foo = = 3.14)
以及產(chǎn)生目標(biāo)表達(dá)式
If(1.00 = = 3.14)
其中S字符被用作前綴以指示分配給參數(shù)foo的值應(yīng)該替換直接替換 參數(shù)引用Sfoo。
在一些情況下,但是,替換參數(shù)引用的值不能保證在目標(biāo)語(yǔ)法(例如,
根據(jù)目標(biāo)語(yǔ)言,例如,數(shù)據(jù)操作語(yǔ)言(DML))中是合法的。例如,如果在
源參數(shù)綁定環(huán)境中,foo被分配值"("(即,表示左括號(hào)字符的1個(gè)長(zhǎng)度
的字符串),那么上述源表達(dá)式產(chǎn)生目標(biāo)表達(dá)式 if(( = = 3.14)
如果目標(biāo)語(yǔ)言是DML,那么在目標(biāo)語(yǔ)法中這是非法表達(dá)式。
如果代替源表達(dá)式的是 if("$foo,, = = 3.14)
那么在源表達(dá)式中相同的參數(shù)替換產(chǎn)生合法目標(biāo)表達(dá)式 If( "(,, = = 3.14)
(如下所述,假設(shè)計(jì)算系統(tǒng)110不是在處理模式中,其中雙引號(hào)在 保護(hù)分隔符)。
但是,如果foo被分配值"""(例如,表示雙引號(hào)字符的l個(gè)長(zhǎng)度的字
符串),那么在上述源表達(dá)式中以參數(shù)替換此foo值產(chǎn)生目標(biāo)表達(dá)式 if( ",,,, = = 3.14)
如果目標(biāo)語(yǔ)言是DML,那么這是非法語(yǔ)法。
源PDL語(yǔ)法使用"$-替換"語(yǔ)法的第二類型,該語(yǔ)法使用"替換加引用" 的參數(shù)引用。計(jì)算系統(tǒng)110將參數(shù)引用綁定為參數(shù)值,并且在所指定的目標(biāo) 語(yǔ)法中生成引用的文字。參數(shù)引用的該類型可以通過(guò)預(yù)定義分隔符組來(lái)指 定。在PDL中,由S"foo"(或者等價(jià)地,由S'foo')給出分隔的"替換加引 用"參數(shù)引用。
使用"替換加引用"參數(shù)引用,如果foo被分配值"("(即,表示左 括號(hào)字符的l個(gè)長(zhǎng)度的字符串),那么源表達(dá)式 if($ "foo" = = 3.14) 產(chǎn)生目標(biāo)表達(dá)式
If( "(,, = = 3.14)
如果目標(biāo)語(yǔ)言是DML,那么這是合法語(yǔ)法。
再次,使用該"替換加引用"參數(shù)引用,如果foo被分配值"""(即, 表示雙引號(hào)字符的l個(gè)長(zhǎng)度的字符串),那么源表達(dá)式 if($ "foo" = = 3.14)
如果,例如,目標(biāo)語(yǔ)言是DML,由于DML需要在轉(zhuǎn)義字符(escape character) \后面加上所引用的引號(hào),則產(chǎn)生目標(biāo)表達(dá)式If ( "\"" = = 3.14)。如 果使用不同的目標(biāo)語(yǔ)言,那么目標(biāo)表達(dá)式可以使用不同的語(yǔ)法。例如,源表 達(dá)式
if($ "foo" = = 3.14)
如果目標(biāo)語(yǔ)言是ksh,則產(chǎn)生目標(biāo)表達(dá)式 If(' " , = = 3.14)。
目標(biāo)語(yǔ)法可以由嵌入在源表達(dá)式中的標(biāo)記符(token)來(lái)指示,例如 "$-ksh"表示ksh作為目標(biāo)語(yǔ)言,或者"$-dml"表示DML作為目標(biāo)語(yǔ)言。 一些標(biāo)記符可以表示沒(méi)有相應(yīng)目標(biāo)語(yǔ)言的目標(biāo)語(yǔ)法(例如,$-literal),但是 仍然具有由一組規(guī)則定義的已定義語(yǔ)法。在計(jì)算系統(tǒng)iio識(shí)別用于目標(biāo)語(yǔ)法 的標(biāo)記符之后,表達(dá)式賦值被放在對(duì)應(yīng)于目標(biāo)語(yǔ)法的"處理模式"中。
"替換加引用"參數(shù)引用機(jī)制提供了一種方法,用于以通過(guò)處理模式確 定的,適合目標(biāo)語(yǔ)法的方式在寫入和引用源PDL表達(dá)式之后獲取目標(biāo)語(yǔ)法 值。在源PDL表達(dá)式被寫入時(shí)已知的目標(biāo)語(yǔ)法值可以作為與目標(biāo)語(yǔ)法一致的 字面值被保存,通過(guò)將其裝入到預(yù)定的"保護(hù)分隔符"(例如,前面沒(méi)有"$" 字符的雙引號(hào)或單引號(hào))之中。即,源語(yǔ)法不需要在被分隔的字符串中替換。 例如,如果字符串SPI是表示DML目標(biāo)語(yǔ)言中pi值的特殊字符串,那 么該字符串在包含在DML字符序列中時(shí)可以被裝入雙引號(hào)內(nèi)并將原樣保留 (如"SPI"),而不需要"轉(zhuǎn)義(escape)"直接替換,例如,通過(guò)使用"\$PI"。 不同目標(biāo)語(yǔ)言可以使用不同的保護(hù)分隔符以保護(hù)字符序列,例如,用于ksh 目標(biāo)語(yǔ)言的<$PI,。在賦值PDL表達(dá)式時(shí),計(jì)算系統(tǒng)110通過(guò)避開保護(hù)分 隔符內(nèi)的"直接替換"參數(shù)引用和"替換加引用"參數(shù)引用來(lái)尊重(honor)
保護(hù)分隔符的使用慣例。計(jì)算系統(tǒng)iio根據(jù)處理模式來(lái)確定保護(hù)分隔符是什
么(如果有的話)。
2.1目標(biāo)語(yǔ)法處理模式
不同的目標(biāo)語(yǔ)法處理模式導(dǎo)致用于賦值PDL表達(dá)式的不同行為。計(jì)算系 統(tǒng)110可以通過(guò)讀取內(nèi)嵌標(biāo)志符來(lái)識(shí)別處理模式;但是,如果沒(méi)有標(biāo)志符存 在,則可以假設(shè)是默認(rèn)處理模式。下面說(shuō)明用于四種示例性處理模式的表達(dá) 式賦值的行為-
目標(biāo)語(yǔ)法ksh 標(biāo)志符$-ksh
處理模式行為計(jì)算系統(tǒng)110使用與用于"替換加引用"的ksh目標(biāo)語(yǔ) 言一致的引用語(yǔ)法并且識(shí)別由ksh目標(biāo)語(yǔ)言使用的保護(hù)分隔符。 目標(biāo)語(yǔ)法DML 標(biāo)志符$-dml
處理模式行為計(jì)算系統(tǒng)110使用與用于"替換加引用"的DML目標(biāo) 語(yǔ)言一致的引用語(yǔ)法并且識(shí)別由DML目標(biāo)語(yǔ)言使用的保護(hù)分隔符。 巨豐示i吾言text 標(biāo)志符$-text
處理模式行為計(jì)算系統(tǒng)110使用與用于"替換加引用"的DML目標(biāo) 語(yǔ)言一致的引用語(yǔ)法,但是不識(shí)別任何分隔符為保護(hù)分隔符。 目標(biāo)語(yǔ)言literal 標(biāo)志符$-literal
處理模式行為計(jì)算系統(tǒng)110不執(zhí)行"替換加引用"或者"直接替換" 的參數(shù)綁定(binding)并逐字輸出在S-literal標(biāo)志符和隨后標(biāo)志符之間的全 部?jī)?nèi)容(如果有的話,除了緊跟標(biāo)志符之后的空格)。
這些內(nèi)嵌標(biāo)志符不被翻譯為相應(yīng)的目標(biāo)表達(dá)式。
2.2 PDL賦值規(guī)貝U
PDL表達(dá)式可以用于提供包含在一組參數(shù)分配中的值。PDL表達(dá)式的一 些部分可以包括操控翻譯該P(yáng)DL表達(dá)式的局部值的語(yǔ)句,并且不直接反映在 結(jié)果目標(biāo)表達(dá)式中。計(jì)算系統(tǒng)110使用以下用于解釋PDL表達(dá)式中的字符的 實(shí)例規(guī)則組。
2.2.1參數(shù)分配
源PDL表達(dá)式中所引用的參數(shù)值可以與PDL表達(dá)式(例如,包括一組 參數(shù)分配的文件)分開分配,或者內(nèi)嵌PDL表達(dá)式(例如,在包括一個(gè)或者 多個(gè)PDL表達(dá)式的腳本中)。這種內(nèi)嵌參數(shù)分配不被翻譯為相應(yīng)的目標(biāo)表達(dá) 式。確定PDL表達(dá)式中所引用的參數(shù)的值包括翻譯其它PDL表達(dá)式和賦值 結(jié)果目標(biāo)表達(dá)式。
2.2.2直接替換參數(shù)引用
"$"字符直接在標(biāo)志符前而沒(méi)有引用標(biāo)志表明"直接替換"參數(shù)引用。 參數(shù)引用被綁定到替換參數(shù)引用的值。例如,可以對(duì)表達(dá)式中的字符序列 $BAR賦值以生成字符序列xxx。然后,對(duì)表達(dá)式中的字符序列FOO$BAR 賦值以生成字符序列FOOxxx。
分隔符可以用于對(duì)表示將被引用的參數(shù)的字符進(jìn)行分隔。例如,可以使 用大括號(hào)使得對(duì)字符序列FOO${BAR}BAZ賦值以生成字符序列 FOOxxxBAZ,而不是解釋為FOO$BARBAZ。
2.2.3替換加引用參數(shù)引用
在單引號(hào)或者雙引號(hào)的組合中使用以分隔標(biāo)志符的"$"字符表示"替 換加引用"的參數(shù)引用。將參數(shù)綁定到用于替換所引用的參數(shù)的值,并且根 據(jù)目標(biāo)語(yǔ)法引用結(jié)果字符序列。例如,對(duì)表達(dá)式中的字符序列$" BAR"或者 字符序列S'BAR'賦值以生成字符序列'xxx'(用于使用單引號(hào)的目標(biāo)語(yǔ)法, 其中如上述實(shí)例中BAR被分配值xxx)。同樣地,如果執(zhí)行參數(shù)分配 TERMINATOR = |,那么對(duì)表達(dá)式中的字符序列string($ "TERMINATOR") 賦值以生成字符序列string('卩)。
在另一實(shí)例中,目標(biāo)語(yǔ)法需要所引用的文字字符串中兩個(gè)反斜線字符 "\\"所指定的單個(gè)文字反斜線字符"\"。在這種情況下,當(dāng)執(zhí)行參數(shù)分配 TERMINATOR = \時(shí),對(duì)表達(dá)式中的字符序列string($ "TERMINATOR")賦值 以生成字符序列string('W,)。
2.2.4轉(zhuǎn)義(escaping)特定字符
可以使用字符作為前綴在源PDL語(yǔ)法中指定文字"r字符以"轉(zhuǎn)義"參 數(shù)替換行為。例如,如果轉(zhuǎn)義字符是反斜線符號(hào),那么對(duì)表達(dá)式中的字符序 列FOO\$BAR賦值以生成字符序列FOO$BAR。
為了在"$"字符之前生成文字"\",可以使用兩個(gè)反斜線字符"\\"。例如,對(duì)表達(dá)式中的字符序列WSBAR賦值以生成在其中執(zhí)行直接參數(shù)替換的
字符序列^xx。通常,如果在"r字符前有偶數(shù)個(gè)"\",那么"\"字符是成 對(duì)的并且"$"字符被解釋為參數(shù)引用。如果在"$"字符前有奇數(shù)個(gè)"\", 那么相鄰"\"字符使得"$"字符按照字面來(lái)解釋并且任何剩余的"\"字符
是成對(duì)的。因此,對(duì)表達(dá)式中的字符序列WABAR賦值以生成字符序列WBAR, 并且對(duì)表達(dá)式中的字符序列WWSBAR賦值以生成字符序列Wxxx。 2.2.5保護(hù)分隔符
計(jì)算系統(tǒng)110優(yōu)選通過(guò)避開保護(hù)分隔符內(nèi)的"直接替換"參數(shù)引用和"替 換加引用"參數(shù)引用來(lái)尊重保護(hù)分隔符的使用慣例。例如,為了將字符序列 SBAR解釋為文字字符串,可以使用保護(hù)分隔符,例如,雙引號(hào)和單引號(hào), 以產(chǎn)生受保護(hù)的文字字符串"$BAR"。而且,在所保護(hù)的文字字符串內(nèi), 特定字符的轉(zhuǎn)義不是必要的。
2.2.6內(nèi)嵌執(zhí)行
在賦值PDL表達(dá)式時(shí),可以執(zhí)行"內(nèi)嵌"可執(zhí)行計(jì)算或腳本。使用另一 種類型的分隔符來(lái)表明該內(nèi)嵌執(zhí)行??蓤?zhí)行計(jì)算或腳本的名字,例如exec, 在表達(dá)式中被分隔為S(exec)并且被執(zhí)行exec的結(jié)果(例如,所獲得的計(jì)算或
者腳本的輸出)所替代。
內(nèi)嵌腳本可以包括"透明的"參數(shù)引用。參數(shù)PARM的透明引用具有以 下兩種形式中的一種$PARM或S(PARM)。因此,對(duì)表達(dá)式中的字符序列 $ (echoSBAR)賦值以生成字符序列xxx。但是,"不透明的"參數(shù)引用的 其它類型,例如$(eval echo'$, FOO)或者S(printenv FOO)并不致使參數(shù)被 綁定為他們所分配的值。
特殊類型的分隔符可以被用于表明可執(zhí)行的計(jì)算或腳本以特殊語(yǔ)言被 執(zhí)行。例如,S(exec)可以表明根據(jù)ksh的exec的執(zhí)行,以及S[exec]可以表 明根據(jù)DML的exec的執(zhí)行?;蛘?,內(nèi)嵌標(biāo)志符可以被用于表明以特殊語(yǔ)言 的執(zhí)行。例如,$(ksh exec)可以表明根據(jù)ksh的exec的執(zhí)行,以及S(dml exec) 可以表明根據(jù)DML的exec的執(zhí)行。
3參數(shù)綁定方法
圖3示出在數(shù)據(jù)倉(cāng)庫(kù)130中存儲(chǔ)的示例性參數(shù)分配136。參數(shù)分配136 包括參數(shù)名稱200、參數(shù)值202以及可選的,參數(shù)屬性204。參數(shù)屬性可以
包括任何與參數(shù)或者其值有關(guān)的信息,例如,數(shù)據(jù)類型或者描述。在本實(shí)例 中,分配給參數(shù)的值可以包括對(duì)任何之前參數(shù)的引用,例如具有SFOO值的
參數(shù)DATE。
參見圖4,在示例性參數(shù)綁定方法中,計(jì)算系統(tǒng)110為了與將被賦值的 源腳本302有關(guān)的參數(shù)在本地存儲(chǔ)器120中保持綁定環(huán)境300 。在計(jì)算系統(tǒng) 110賦值源腳本302時(shí),計(jì)算系統(tǒng)110在綁定環(huán)境300中保持在源腳本302 中被引用的每個(gè)參數(shù)的拷貝。存儲(chǔ)在綁定環(huán)境300中的信息包括參數(shù)名稱304 和該參數(shù)的當(dāng)前值306。根據(jù)合適的范圍確定規(guī)則(scoping rule)為每個(gè)參 數(shù)綁定值。在一些情況下,計(jì)算系統(tǒng)110在綁定環(huán)境300中保持多個(gè)語(yǔ)境 (context)以存儲(chǔ)具有不同范圍的參數(shù)。
在本實(shí)例中,源腳本302包括第一源表達(dá)式310,其包括字符序列 "$BASE/file.dml"。該字符序列將字符串值表示為所引用的文字表達(dá)式(例 如,在DML處理模式下)。計(jì)算系統(tǒng)110抑制對(duì)在源語(yǔ)法中另外是參數(shù)引 用SBASE的綁定。然后,保留參數(shù)引用SBASE,用于之后被綁定(例如,在 對(duì)相應(yīng)目標(biāo)表達(dá)式賦值時(shí),綁定到值一dir)。
源腳本302包括第二源表達(dá)式312,其包括字符序列S"DATE",該字符 序列表示通過(guò)"替換加引用"參數(shù)引用的字符串值。由于所引用的參數(shù)DATE 根據(jù)另一個(gè)參數(shù)FOO被定義(在圖3中),因此計(jì)算系統(tǒng)110首先綁定參 數(shù)FOO到其所分配的值STODAY,其轉(zhuǎn)變?yōu)?br>
Mayl, 2000
并且在綁定環(huán)境300中存儲(chǔ)結(jié)果。然后,計(jì)算系統(tǒng)110綁定參數(shù)DATE
到值
May 1 , 2000
并且在綁定環(huán)境300中存儲(chǔ)結(jié)果。
源腳本302包括第三源表達(dá)式314,其包括字符序列$ "BAR",該字符 序列表示通過(guò)"替換加引用"參數(shù)引用的字符串值。計(jì)算系統(tǒng)iio綁定參數(shù) BAR到值
test 1
并且將結(jié)果存儲(chǔ)在綁定環(huán)境300中。
計(jì)算系統(tǒng)110生成目標(biāo)腳本308,其包括第一目標(biāo)表達(dá)式320,該目標(biāo)
表達(dá)式在目標(biāo)語(yǔ)法中表示第一源表達(dá)式310。由于在源表達(dá)式310中的字符
序列"$BASE/file.dml"包括保護(hù)分隔符(根據(jù)DML處理模式),因此目標(biāo) 表達(dá)式320包括相同的字符序列。
目標(biāo)腳本308包括第二目標(biāo)表達(dá)式322,其中所引用的值"May 1, 2000" 替換參數(shù)引用rDATA",和第三目標(biāo)表達(dá)式324,其中所引用的值"test 1" 替換參數(shù)引用S"BAR"。
計(jì)算系統(tǒng)110在源腳本302被掃描用于參數(shù)引用并且所引用的值被存儲(chǔ) 在綁定環(huán)境300之后生成目標(biāo)表達(dá)式?;蛘?,計(jì)算系統(tǒng)可以在源腳本302被 掃描時(shí)生成目標(biāo)表達(dá)式。然后,計(jì)算系統(tǒng)110能夠執(zhí)行所生成的目標(biāo)腳本308 和/或存儲(chǔ)用于之后執(zhí)行的目標(biāo)腳本308.
上面描述的表達(dá)式賦值技術(shù)可以使用在計(jì)算機(jī)上執(zhí)行的軟件來(lái)實(shí)現(xiàn)。例 如,軟件在一個(gè)或者多個(gè)計(jì)算機(jī)程序中形成過(guò)程,所述計(jì)算機(jī)程序在一個(gè)或 者多個(gè)已編程或者可編程的計(jì)算機(jī)系統(tǒng)(可以是各種體系結(jié)構(gòu),例如分布式、 客戶端/服務(wù)器或者網(wǎng)格(grid))上執(zhí)行,每個(gè)計(jì)算機(jī)系統(tǒng)包括至少一個(gè)處 理器、至少一個(gè)數(shù)據(jù)存儲(chǔ)系統(tǒng)(包括易失性和非易失性存儲(chǔ)器和/或存儲(chǔ)元 件)、至少一個(gè)輸入設(shè)備或者端口,以及至少一個(gè)輸出設(shè)備或者端口。軟件 可以形成更大程序的一個(gè)或者多個(gè)模塊,例如,提供涉及計(jì)算機(jī)圖形的設(shè)計(jì) 和配置的其它服務(wù)。圖形的節(jié)點(diǎn)和元素可以作為存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的 數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)或者作為符合存儲(chǔ)在數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)模型的其它組織數(shù) 據(jù)來(lái)實(shí)現(xiàn)。
該軟件可以在介質(zhì)上被提供,例如,CD-ROM,只要該介質(zhì)是由普通或
者專門的可編程計(jì)算機(jī)可讀的,或者該軟件可以通過(guò)網(wǎng)絡(luò)下載(在所傳播的
信號(hào)中被編碼)到其被執(zhí)行的計(jì)算機(jī)上。在專門的計(jì)算機(jī)上可以執(zhí)行全部功
能,或者使用專門硬件,例如協(xié)處理器??梢砸苑植嫉姆绞綄?shí)現(xiàn)該軟件,其
中由軟件指定的計(jì)算的不同部分可以由不同的計(jì)算機(jī)執(zhí)行。每個(gè)這種計(jì)算機(jī)
程序,優(yōu)選地,存儲(chǔ)在或者下載到存儲(chǔ)介質(zhì)或者由普通或者專門的可編程計(jì)
算機(jī)可讀的設(shè)備(例如,固態(tài)存儲(chǔ)器或介質(zhì),或磁介質(zhì)或光學(xué)介質(zhì)),用于
在存儲(chǔ)介質(zhì)或者設(shè)備被計(jì)算機(jī)系統(tǒng)讀取時(shí),配置和操作該計(jì)算機(jī)以執(zhí)行所述
過(guò)程。本發(fā)明的系統(tǒng)還可以被認(rèn)為是由配備計(jì)算機(jī)程序的計(jì)算機(jī)可讀存儲(chǔ)介 質(zhì)來(lái)實(shí)現(xiàn),其中可以配置存儲(chǔ)介質(zhì)使得計(jì)算機(jī)系統(tǒng)以特定和預(yù)定的方式來(lái)操
作以執(zhí)行所述功能。
應(yīng)該理解的是,上述描述旨在說(shuō)明但不限制本發(fā)明的范圍,該范圍是附 加的權(quán)利要求所定義的范圍。例如,上述多個(gè)功能步驟可以以不同的順序執(zhí) 行,而不影響整個(gè)進(jìn)程。其它實(shí)施例在附加的權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1、一種用于翻譯表達(dá)式的方法,包括接受以第一語(yǔ)法表示的第一表達(dá)式(102),該表達(dá)式包括使用該第一語(yǔ)法表示字符串值的第一字符序列;識(shí)別表示所述表達(dá)式的第二語(yǔ)法;以及以表示所述第一表達(dá)式的該第二語(yǔ)法生成第二表達(dá)式(104),包括使用該第一字符序列生成第二字符序列,使得該第二字符序列使用該第二語(yǔ)法表示所述字符串值。
2、 如權(quán)利要求1所述的方法,其中所述第一表達(dá)式包括多個(gè)可執(zhí)行語(yǔ)句。
3、 如權(quán)利要求l所述的方法,其中所述第一表達(dá)式包括命令行輸入。
4、 如權(quán)利要求1所述的方法,其中所述第一字符序列包括被綁定到所 引用的值的參數(shù)。
5、 如權(quán)利要求4所述的方法,其中使用所述第一字符序列生成第二字 符序列包括綁定該參數(shù)到所引用的值;以及根據(jù)所述第二語(yǔ)法的引用語(yǔ)法來(lái)生成包括所引用的值的所述第二字符 序列。
6、 如權(quán)利要求4所述的方法,其中所述第一字符序列包括包圍該參數(shù) 的分隔符。
7、 如權(quán)利要求6所述的方法,其中所述分隔符包括預(yù)定前綴,所述預(yù) 定前綴包括其后帶有引用符號(hào)的美元符號(hào)。
8、 如權(quán)利要求6所述的方法,其中所述分隔符包括預(yù)定后綴,所述預(yù) 定后綴包括引用符號(hào)。
9、 如權(quán)利要求1所述的方法,其中所述第一字符序列包括包圍所述字 符串值的表示方式的分隔符。
10、 如權(quán)利要求9所述的方法,其中所述字符串值包括在該第一語(yǔ)法中 用以表明參數(shù)引用的字符。
11、 如權(quán)利要求10所述的方法,其中使用所述第一字符序列生成第二 字符序列包括抑制所述字符串值中的參數(shù)綁定。
12、 如權(quán)利要求1所述的方法,其中選擇與計(jì)算語(yǔ)言兼容的所述第二語(yǔ)法。
13、 如權(quán)利要求13所述的方法,其中所述計(jì)算語(yǔ)言是由ksh、java、DML、 C和SQL構(gòu)成的組合中的一個(gè)。
14、 如權(quán)利要求1所述的方法,其中所述第二語(yǔ)法包括用于解釋字符序 列的規(guī)則。
15、 如權(quán)利要求1所述的方法,其中識(shí)別所述第二語(yǔ)法包括基于在該第 一字符序列前的標(biāo)志符來(lái)識(shí)別語(yǔ)法。
16、 一種存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上的軟件,用于翻譯表達(dá)式,所述軟件 包括指令,用于使計(jì)算機(jī)系統(tǒng)執(zhí)行以下步驟接受以第一語(yǔ)法表示的第一表達(dá)式(102),所述表達(dá)式包括使用該第 一語(yǔ)法表示字符串值的第一字符序列;識(shí)別用于表示所述表達(dá)式的第二語(yǔ)法;以及以表示該第一表達(dá)式的所述第二語(yǔ)法生成第二表達(dá)式(104),包括使 用所述第一字符序列生成第二字符序列,使得所述第二字符序列使用所述第 二語(yǔ)法來(lái)表示該字符串值。
17、 一種用于翻譯表達(dá)式的系統(tǒng),包括-用于接受以第一語(yǔ)法表示的第一表達(dá)式(102)的裝置,所述表達(dá)式包 括使用該第一語(yǔ)法表示字符串值的第一字符序列;用于識(shí)別表示所述表達(dá)式的第二語(yǔ)法的裝置;以及用于以表示所述第一表達(dá)式的第二語(yǔ)法生成第二表達(dá)式(104),包括 使用所述第一字符序列來(lái)生成第二字符序列,使得所述第二字符序列使用所 述第二語(yǔ)法來(lái)表示所述字符串值的裝置。
18、 一種用于賦值表達(dá)式的方法,包括 接受存儲(chǔ)參數(shù)定義的一個(gè)或者多個(gè)數(shù)據(jù)結(jié)構(gòu)(136); 識(shí)別在所述表達(dá)式中引用的一個(gè)或者多個(gè)參數(shù); 基于所存儲(chǔ)的定義確定每個(gè)所識(shí)別的參數(shù)的值;以及 將所確定的參數(shù)值存儲(chǔ)在綁定環(huán)境(300)中。
19、 如權(quán)利要求18所述的方法,其中所述綁定環(huán)境存儲(chǔ)所識(shí)別參數(shù)的值以及存儲(chǔ)對(duì)于賦值所識(shí)別的參數(shù)所必需的參數(shù)值,并且該綁定環(huán)境不必存 儲(chǔ)在所述一個(gè)或者多個(gè)數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)有其定義的全部參數(shù)的值。
20、 如權(quán)利要求18所述的方法,還包括利用引用的參數(shù)來(lái)執(zhí)行所述表 達(dá)式,所述引用的參數(shù)綁定到來(lái)自綁定環(huán)境的值。
21、 如權(quán)利要求18所述的方法,其中所述表達(dá)式是程序或者腳本的一部分。
22、 如權(quán)利要求18所述的方法,其中所述表達(dá)式包括命令行輸入。
23、 一種存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上的軟件,用于賦值表達(dá)式,所述軟件 包括指令,使得計(jì)算機(jī)系統(tǒng)執(zhí)行以下步驟-接受存儲(chǔ)參數(shù)定義的一個(gè)或者多個(gè)數(shù)據(jù)結(jié)構(gòu)(136); 識(shí)別在所述表達(dá)式中引用的一個(gè)或者多個(gè)參數(shù); 基于所存儲(chǔ)的定義確定每個(gè)所識(shí)別的參數(shù)的值;以及 在綁定環(huán)境(300)中存儲(chǔ)所確定的參數(shù)值。
24、 一種用于賦值表達(dá)式的系統(tǒng),包括用于接受存儲(chǔ)參數(shù)定義的一個(gè)或者多個(gè)數(shù)據(jù)結(jié)構(gòu)(136)的裝置; 用于識(shí)別在所述表達(dá)式中引用的一個(gè)或者多個(gè)參數(shù)的裝置; 用于基于所存儲(chǔ)的定義來(lái)確定每個(gè)所識(shí)別的參數(shù)的值的裝置;以及 用于在綁定環(huán)境(300)中存儲(chǔ)所確定的參數(shù)值的裝置。
全文摘要
描述了一種用于翻譯表達(dá)式的方法以及相應(yīng)的軟件和系統(tǒng)。所述方法包括接受以第一語(yǔ)法表示的第一表達(dá)式(102),所述表達(dá)式包括使用第一語(yǔ)法表示字符串值的第一字符序列;識(shí)別用于表示該表達(dá)式的第二語(yǔ)法;以及以表示該第一表達(dá)式的第二語(yǔ)法生成第二表達(dá)式(104),包括利用第一字符序列生成第二字符序列,使得所述第二字符序列使用第二語(yǔ)法表示字符串值。
文檔編號(hào)G06F17/28GK101208690SQ200680023180
公開日2008年6月25日 申請(qǐng)日期2006年6月27日 優(yōu)先權(quán)日2005年6月27日
發(fā)明者克雷格·W.·斯坦菲爾 申請(qǐng)人:起元軟件有限公司