溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

一個簡單的安全數據的挖掘語言

發(fā)布時間:2020-08-04 09:06:11 來源:網絡 閱讀:320 作者:chenhu_tass 欄目:安全技術

1.1.安全數據的挖掘語言

1.1.1.概述

1.1.1.1.基礎特性

相較于一般的高級語言或腳本語言,本文所涉及的挖掘語言有如下特性:

1.變量需要聲明方可使用,但數組或向量的大小不用事先聲明(即支持動態(tài)數組);

2.支持一般的算術表達式、關系表達式及邏輯表達式;

3.支持用戶自定義函數,但函數不能嵌套聲明或定義;

4.支持條件(包括ifif-else)和循環(huán)語句(包括continuebreak語句),但支持一種while形式的循環(huán)語句;

5.支持多級嵌套地申明用戶自定義類型(類似C/C++中的typedef struct)。

1.1.1.2.專有特性

除了支持和一般高級語言或腳本語言類似的特性外,本文所提到的語言還支持如下和挖掘相關的特性,它們一般以函數方式出現(xiàn):

1.針對信息安全特點,支持IP地址(包括IPv4IPv6)、日期時間等的處理及其相關運算;

2.內置數據預處理相關功能,包括對數據的過濾、篩選(可支持結構化或非結構化安全數據);

3.提供和統(tǒng)計相關的分布模型、參數估計和假設檢驗相關功能,支持正態(tài)分布、T-分布、卡方分布等常見模型;

4.支持基于時間的序列分析;

5.提供較為豐富的數據輸入和輸出(包括數據可視化)功能;

6.支持挖掘腳本之間的包含(類似“include或“import);

7.更重的一點是,所有數據挖掘的腳本既可以在數據采集單元執(zhí)行(特別是數據預處理部分),也可以在核心分析單元執(zhí)行。

1.1.2.基礎

1.1.2.1.數據類型
1.1.2.1.1.常量

系統(tǒng)支持兩類常量類型:

1.字符串型常量:以雙引號括起的任意字符串,例如:”abc””2012-12-25 17:00:00”等;

2.數值型常量:任意整型或浮點類型數值常量,例如:1233.1415;支持長度視宿主計算機字長。

1.1.2.1.2.變量

與常量類似,系統(tǒng)也支持如下兩種基礎變量類型:

1.字符串型變量:申明方式如下

string變量名;

其中string為系統(tǒng)保留字(參見附錄);

2.數值型變量:申明方式如下

numeric變量名;

其中numeric為系統(tǒng)保留字(參見附錄),數值型變量不區(qū)分整型還是浮點類型,但如是浮點則最多保留7位小數。


對于上述變量名,系統(tǒng)約定只能以英文字母開頭,可以混用數字和下劃線,最大長度不能超過50個字符且不等使用系統(tǒng)保留字。

1.1.2.1.3.列表

由于本系統(tǒng)支持用戶自定義類型(必須先定義),如:

list Person

{

        stringname;

        numericage;

string sex;

        …

}

故如果需要使用自定義類型則變量申明方式如下:

Person 變量名;

1.1.2.1.4.數組

由于在安全數據挖掘中會大量使用向量,故本系統(tǒng)亦支持一維數組,但需要使用多維數組時,數組的元素也可以是數組。

數組的申明方式如下:

1.字符串類型:string @變量名;

2.數值型:numeric @變量名;

3.用戶自定義:user_type  @變量名。


在引用數組元素時,使用如下方式:數組變量名[下標](下標從0開始;下標也可以為一個表達式)。

如果下標越界系統(tǒng)也不會崩潰,而會返回“undef”。

1.1.2.2.表達式
1.1.2.2.1.運算符號

在本文所涉及的挖掘語言運算符號包括如下幾類(按優(yōu)先級排列):

1.成員運算符:即“.”,單目運算,獲取變量的成員;

2.乘除運算:包括“*”、“/”和“%”(除數取余);僅支持數值型變量運算,對于“*”而言除支持標量運算也支持向量運算(不同于普通的數學上的向量乘法,而僅僅是向量元素相乘);

3.加減運算:包括“+”、“-”;支持數值型向量運算;

4.關系運算:包括“<=”、“<”、“>”、“>=”、“==”、“!=”、“=~”(正則匹配)、“!~”(正則不匹配);其中正則表達式支持類似Perl的類型,除正則匹配/不匹配運算外,其它關系運算均支持數值型、字符型常量/變量;

5.邏輯與運算:即“&&”;

6.邏輯或運算:即“||”。

1.1.2.2.2.函數定義和調用

在許多語言中,函數是擴展內涵和外延的唯一方式;所以本系統(tǒng)提供了大量內置函數,而且系統(tǒng)也支持用戶自定義函數。

1.1.2.2.3.函數定義

與大多數語言類似,本系統(tǒng)函數的定義方式如下:

返回類型sub函數名(參數列表)

{

函數體

}

其中,sub是系統(tǒng)保留字,返回類型和參數列表均可以為空;多個參數之間用逗號分隔;函數不允許嵌套定義。

現(xiàn)舉例如下(求兩個數值型變量的最大者):

numeric get_max(numeric a,numeric b)

{

        if ( a> b )

{

       returna;

}

   else

   {

        returnb;

   }

}

1.1.2.2.4.函數調用

函數的調用格式如下:

函數名(參數);

需要注意的一點是,本系統(tǒng)約定所有參數(如是變量)傳遞均是引用方式而非復制方式,故如在函數中需對調用參數的值進行修改則主調函數中的相應變量值也會被修改。

函數調用舉例如下(使用上節(jié)定義的函數):

max = get_max(3,5);

1.1.2.3.語句

在本文所涉及的挖掘語言中,語句是非常重要的一環(huán),與大多數高級語言或腳本語言類似,也支持順序、條件和循環(huán)三類基本形式。

1.1.2.3.1.賦值語句

賦值語句是最基本的語句,形式如下:

變量 = 表達式;

賦值語句的左值(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]的值

1.1.2.3.2.條件語句

在本文所闡述的條件語句中,只支持ifif-else形式條件語句,而不支持類似C語句中的switch-case條件語句;另外一點和C語言條件語句不同的是,條件語句必須用花括號括起,否則被視為非法。

條件語句的形式包括:

if (表達式)

{

   …

}

if (表達式)

{

          …

}

else

{

  …

}

需要說明的一點是,如果表達式的值只要不是非零值則表達式為真,否則為假。

條件語句之間可以任意進行嵌套,但在其中申明變量的作用域(scope)則僅限于其內,如出現(xiàn)變量的重復定義,則按就近原則適配(這些變量在編譯時會轉換為不同的文件內地址,故不會發(fā)生沖突)。

1.1.2.3.3.循環(huán)語句

對于循環(huán)語句而言,考慮到實現(xiàn)和學習的成本,故僅支持一種形式:

while (表達式)

{

      …

}

而不支持類似do-whilefor循環(huán)形式。與條件語句類似,花括號是必須的,即使循環(huán)體僅包含一條單獨的語句(有點類似Perl語句)。

另外,考慮到完整的流程控制,在循環(huán)語句中可以使用continuebreak,它們分別能回溯到循環(huán)的表達式判斷部分和跳出循環(huán);當然可以直接使用無條件跳轉語句來達到同樣的效果,只不過這樣做會使流程控制變得略微有些不夠“優(yōu)雅”。

1.1.2.3.4.無條件跳轉語句

無條件跳轉語句就是goto語句,其形式如下:

goto 標號;

關于標號的定義如下:

標號:語句

1.1.2.4.包含文件

包含文件采用如下形式:

import “文件名

被包含文件應設置在系統(tǒng)可以搜索的路徑中(搜索路徑使用系統(tǒng)變量)。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI