您好,登錄后才能下訂單哦!
相較于一般的高級語言或腳本語言,本文所涉及的挖掘語言有如下特性:
1.變量需要聲明方可使用,但數組或向量的大小不用事先聲明(即支持動態數組);
2.支持一般的算術表達式、關系表達式及邏輯表達式;
3.支持用戶自定義函數,但函數不能嵌套聲明或定義;
4.支持條件(包括if及if-else)和循環語句(包括continue和break語句),但支持一種while形式的循環語句;
5.支持多級嵌套地申明用戶自定義類型(類似C/C++中的typedef struct)。
除了支持和一般高級語言或腳本語言類似的特性外,本文所提到的語言還支持如下和挖掘相關的特性,它們一般以函數方式出現:
1.針對信息安全特點,支持IP地址(包括IPv4和IPv6)、日期時間等的處理及其相關運算;
2.內置數據預處理相關功能,包括對數據的過濾、篩選(可支持結構化或非結構化安全數據);
3.提供和統計相關的分布模型、參數估計和假設檢驗相關功能,支持正態分布、T-分布、卡方分布等常見模型;
4.支持基于時間的序列分析;
5.提供較為豐富的數據輸入和輸出(包括數據可視化)功能;
6.支持挖掘腳本之間的包含(類似“include”或“import”);
7.更重的一點是,所有數據挖掘的腳本既可以在數據采集單元執行(特別是數據預處理部分),也可以在核心分析單元執行。
系統支持兩類常量類型:
1.字符串型常量:以雙引號括起的任意字符串,例如:”abc”或”2012-12-25 17:00:00”等;
2.數值型常量:任意整型或浮點類型數值常量,例如:123或3.1415;支持長度視宿主計算機字長。
與常量類似,系統也支持如下兩種基礎變量類型:
1.字符串型變量:申明方式如下
string變量名;
其中string為系統保留字(參見附錄);
2.數值型變量:申明方式如下
numeric變量名;
其中numeric為系統保留字(參見附錄),數值型變量不區分整型還是浮點類型,但如是浮點則最多保留7位小數。
對于上述變量名,系統約定只能以英文字母開頭,可以混用數字和下劃線,最大長度不能超過50個字符且不等使用系統保留字。
由于本系統支持用戶自定義類型(必須先定義),如:
list Person
{
stringname;
numericage;
string sex;
…
}
故如果需要使用自定義類型則變量申明方式如下:
Person 變量名;
由于在安全數據挖掘中會大量使用向量,故本系統亦支持一維數組,但需要使用多維數組時,數組的元素也可以是數組。
數組的申明方式如下:
1.字符串類型:string @變量名;
2.數值型:numeric @變量名;
3.用戶自定義:user_type @變量名。
在引用數組元素時,使用如下方式:數組變量名[下標](下標從0開始;下標也可以為一個表達式)。
如果下標越界系統也不會崩潰,而會返回“undef”。
在本文所涉及的挖掘語言運算符號包括如下幾類(按優先級排列):
1.成員運算符:即“.”,單目運算,獲取變量的成員;
2.乘除運算:包括“*”、“/”和“%”(除數取余);僅支持數值型變量運算,對于“*”而言除支持標量運算也支持向量運算(不同于普通的數學上的向量乘法,而僅僅是向量元素相乘);
3.加減運算:包括“+”、“-”;支持數值型向量運算;
4.關系運算:包括“<=”、“<”、“>”、“>=”、“==”、“!=”、“=~”(正則匹配)、“!~”(正則不匹配);其中正則表達式支持類似Perl的類型,除正則匹配/不匹配運算外,其它關系運算均支持數值型、字符型常量/變量;
5.邏輯與運算:即“&&”;
6.邏輯或運算:即“||”。
在許多語言中,函數是擴展內涵和外延的唯一方式;所以本系統提供了大量內置函數,而且系統也支持用戶自定義函數。
與大多數語言類似,本系統函數的定義方式如下:
返回類型sub函數名(參數列表)
{
函數體
}
其中,sub是系統保留字,返回類型和參數列表均可以為空;多個參數之間用逗號分隔;函數不允許嵌套定義。
現舉例如下(求兩個數值型變量的最大者):
numeric get_max(numeric a,numeric b)
{
if ( a> b )
{
returna;
}
else
{
returnb;
}
}
函數的調用格式如下:
函數名(參數);
需要注意的一點是,本系統約定所有參數(如是變量)傳遞均是引用方式而非復制方式,故如在函數中需對調用參數的值進行修改則主調函數中的相應變量值也會被修改。
函數調用舉例如下(使用上節定義的函數):
max = get_max(3,5);
在本文所涉及的挖掘語言中,語句是非常重要的一環,與大多數高級語言或腳本語言類似,也支持順序、條件和循環三類基本形式。
賦值語句是最基本的語句,形式如下:
變量 = 表達式;
賦值語句的左值(left operand)必須是變量,變量的類型可以是標量或向量;我們約定:當左值為向量時,賦值語句的右值(right operand)可以是向量,也可以是標量,如果是標量則將其實際的值賦給向量的第一個元素,而如果將向量賦值給標量,則僅取向量的第一元素。
另外,賦值語句的左、右值的數據類型必須相同,否則編譯時就會報錯。
以下試舉幾個例子以說明賦值語句的使用方法:
1.常量賦值:
a = 5;
2.變量賦值:
a = b;
3.表達式賦值:
a = b*b – 4*a*c;
4.向量賦值:
@a = @b
5.向量與標量相互賦值:
@a = b*b – 4*a*c;#a[0]的值是表達式b*b – 4*a*c的計算結果
a = @array;#a的值為array[0]的值
在本文所闡述的條件語句中,只支持if或if-else形式條件語句,而不支持類似C語句中的switch-case條件語句;另外一點和C語言條件語句不同的是,條件語句必須用花括號括起,否則被視為非法。
條件語句的形式包括:
if (表達式)
{
…
}
和
if (表達式)
{
…
}
else
{
…
}
需要說明的一點是,如果表達式的值只要不是非零值則表達式為真,否則為假。
條件語句之間可以任意進行嵌套,但在其中申明變量的作用域(scope)則僅限于其內,如出現變量的重復定義,則按就近原則適配(這些變量在編譯時會轉換為不同的文件內地址,故不會發生沖突)。
對于循環語句而言,考慮到實現和學習的成本,故僅支持一種形式:
while (表達式)
{
…
}
而不支持類似do-while和for循環形式。與條件語句類似,花括號是必須的,即使循環體僅包含一條單獨的語句(有點類似Perl語句)。
另外,考慮到完整的流程控制,在循環語句中可以使用continue和break,它們分別能回溯到循環的表達式判斷部分和跳出循環;當然可以直接使用無條件跳轉語句來達到同樣的效果,只不過這樣做會使流程控制變得略微有些不夠“優雅”。
無條件跳轉語句就是goto語句,其形式如下:
goto 標號;
關于標號的定義如下:
標號:語句
包含文件采用如下形式:
import “文件名”
被包含文件應設置在系統可以搜索的路徑中(搜索路徑使用系統變量)。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。