温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

一个简单的安全数据的挖掘语言

发布时间:2020-08-04 09:06:11 来源:网络 阅读:313 作者:chenhu_tass 栏目:安全技术

1.1.安全数据的挖掘语言

1.1.1.概述

1.1.1.1.基础特性

相较于一般的高级语言或脚本语言,本文所涉及的挖掘语言有如下特性:

1.变量需要声明方可使用,但数组或向量的大小不用事先声明(即支持动态数组);

2.支持一般的算术表达式、关系表达式及逻辑表达式;

3.支持用户自定义函数,但函数不能嵌套声明或定义;

4.支持条件(包括ifif-else)和循环语句(包括continuebreak语句),但支持一种while形式的循环语句;

5.支持多级嵌套地申明用户自定义类型(类似C/C++中的typedef struct)。

1.1.1.2.专有特性

除了支持和一般高级语言或脚本语言类似的特性外,本文所提到的语言还支持如下和挖掘相关的特性,它们一般以函数方式出现:

1.针对信息安全特点,支持IP地址(包括IPv4IPv6)、日期时间等的处理及其相关运算;

2.内置数据预处理相关功能,包括对数据的过滤、筛选(可支持结构化或非结构化安全数据);

3.提供和统计相关的分布模型、参数估计和假设检验相关功能,支持正态分布、T-分布、卡方分布等常见模型;

4.支持基于时间的序列分析;

5.提供较为丰富的数据输入和输出(包括数据可视化)功能;

6.支持挖掘脚本之间的包含(类似“include或“import);

7.更重的一点是,所有数据挖掘的脚本既可以在数据采集单元执行(特别是数据预处理部分),也可以在核心分析单元执行。

1.1.2.基础

1.1.2.1.数据类型
1.1.2.1.1.常量

系统支持两类常量类型:

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

2.数值型常量:任意整型或浮点类型数值常量,例如:1233.1415;支持长度视宿主计算机字长。

1.1.2.1.2.变量

与常量类似,系统也支持如下两种基础变量类型:

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

string变量名;

其中string为系统保留字(参见附录);

2.数值型变量:申明方式如下

numeric变量名;

其中numeric为系统保留字(参见附录),数值型变量不区分整型还是浮点类型,但如是浮点则最多保留7位小数。


对于上述变量名,系统约定只能以英文字母开头,可以混用数字和下划线,最大长度不能超过50个字符且不等使用系统保留字。

1.1.2.1.3.列表

由于本系统支持用户自定义类型(必须先定义),如:

list Person

{

        stringname;

        numericage;

string sex;

        …

}

故如果需要使用自定义类型则变量申明方式如下:

Person 变量名;

1.1.2.1.4.数组

由于在安全数据挖掘中会大量使用向量,故本系统亦支持一维数组,但需要使用多维数组时,数组的元素也可以是数组。

数组的申明方式如下:

1.字符串类型:string @变量名;

2.数值型:numeric @变量名;

3.用户自定义:user_type  @变量名。


在引用数组元素时,使用如下方式:数组变量名[下标](下标从0开始;下标也可以为一个表达式)。

如果下标越界系统也不会崩溃,而会返回“undef”。

1.1.2.2.表达式
1.1.2.2.1.运算符号

在本文所涉及的挖掘语言运算符号包括如下几类(按优先级排列):

1.成员运算符:即“.”,单目运算,获取变量的成员;

2.乘除运算:包括“*”、“/”和“%”(除数取余);仅支持数值型变量运算,对于“*”而言除支持标量运算也支持向量运算(不同于普通的数学上的向量乘法,而仅仅是向量元素相乘);

3.加减运算:包括“+”、“-”;支持数值型向量运算;

4.关系运算:包括“<=”、“<”、“>”、“>=”、“==”、“!=”、“=~”(正则匹配)、“!~”(正则不匹配);其中正则表达式支持类似Perl的类型,除正则匹配/不匹配运算外,其它关系运算均支持数值型、字符型常量/变量;

5.逻辑与运算:即“&&”;

6.逻辑或运算:即“||”。

1.1.2.2.2.函数定义和调用

在许多语言中,函数是扩展内涵和外延的唯一方式;所以本系统提供了大量内置函数,而且系统也支持用户自定义函数。

1.1.2.2.3.函数定义

与大多数语言类似,本系统函数的定义方式如下:

返回类型sub函数名(参数列表)

{

函数体

}

其中,sub是系统保留字,返回类型和参数列表均可以为空;多个参数之间用逗号分隔;函数不允许嵌套定义

现举例如下(求两个数值型变量的最大者):

numeric get_max(numeric a,numeric b)

{

        if ( a> b )

{

       returna;

}

   else

   {

        returnb;

   }

}

1.1.2.2.4.函数调用

函数的调用格式如下:

函数名(参数);

需要注意的一点是,本系统约定所有参数(如是变量)传递均是引用方式而非复制方式,故如在函数中需对调用参数的值进行修改则主调函数中的相应变量值也会被修改。

函数调用举例如下(使用上节定义的函数):

max = get_max(3,5);

1.1.2.3.语句

在本文所涉及的挖掘语言中,语句是非常重要的一环,与大多数高级语言或脚本语言类似,也支持顺序、条件和循环三类基本形式。

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)则仅限于其内,如出现变量的重复定义,则按就近原则适配(这些变量在编译时会转换为不同的文件内地址,故不会发生冲突)。

1.1.2.3.3.循环语句

对于循环语句而言,考虑到实现和学习的成本,故仅支持一种形式:

while (表达式)

{

      …

}

而不支持类似do-whilefor循环形式。与条件语句类似,花括号是必须的,即使循环体仅包含一条单独的语句(有点类似Perl语句)。

另外,考虑到完整的流程控制,在循环语句中可以使用continuebreak,它们分别能回溯到循环的表达式判断部分和跳出循环;当然可以直接使用无条件跳转语句来达到同样的效果,只不过这样做会使流程控制变得略微有些不够“优雅”。

1.1.2.3.4.无条件跳转语句

无条件跳转语句就是goto语句,其形式如下:

goto 标号;

关于标号的定义如下:

标号:语句

1.1.2.4.包含文件

包含文件采用如下形式:

import “文件名

被包含文件应设置在系统可以搜索的路径中(搜索路径使用系统变量)。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI