词法记号的属性,属性用来对记号里面的属性加以进一步区分。
<a1,a2,a3,a4,...,an>成为n元式
a1成为第一元,a2称为第二元,类推。。。。;
比如:position = initial + rate * 60 的记号和属性
<id,指向符号表中position条目的指针>,第二元表示属性
<assign_op>,赋值号--单独作为记号,不需要第二元作为属性加以区分
<id,指向符号表中initial条目的指针>第二元表示属性
<add_op>单独作为记号,不需要第二元作为属性加以区分
<id,指向符号表中rate条目的指针>第二元表示属性
<mul_op>单独作为记号,不需要第二元作为属性加以区分
<number,整数值60>
词法分析结束之后,每次要返回记号和属性。
二、串和语言
-字母表: 符号的有限集合 ,例如 ={0 ,1}
-串: 符号的有穷序列,例如 0110
-语言:字母表上的一个串集 {0,00,000,。。。}
串的运算:
-连接(积) xy, s空串=空串s=s
-幂 s的0次方为空,s的i次方=s的i-1次方s
语言上的运算:
-并:L∪M = {s|s∈L或者s∈M}
-连接 : LM={st|s∈L且t∈M},即前一部分部分属于前面,后一部分属于后面
-幂 :L的0次幂是{&},L的i次幂是L的i次幂L
-闭包:L*=L0∪L1∪L1∪....,数字部分指的是 次幂
-正闭包: L+ = L0∪ L1∪...,数字部分指的是 次幂
例题:
L:{A,B,C,D,...,Z,a,b,c,...z},D:{0,1,2,3,...9}
L∪D: 为长度为一的句子,为字母或数字
LD:长度为2的句子,前部分为字母,后部分为数字
L6次方:长度为6的句子,6个符号都是字母
L*:任意长度的字母串,包括空串
D+ : 定义的是无符号整数
L(L∪D)*:就是我们定义的字母开头,后跟字母或数字的标识符的定义。长度不固定,*可以重复多次。
上面的缺点是不便于计算机进行操作处理。
正是由于这样不便于计算机处理,所以,正规式 就正式开始进入视野!!!
正规式
正规式 定义的语言 备注
& {&} 我用&符号代替空的那个符号,目前不知道如何找到那个符号
a {a} a∈ 字母表
(r)| (s) L(r)∪L(s) r,s是正规式
(r)(s) L(r)L(s) r,s是正规式
(r)* (L(r))* r是正规式
(r) L(r) r是正规式
约定:((a)(b)*)|(c) 等价于 ab*|c
例题:
字母表={a,b},计算下式:
-a|b {a,b}
-(a|b)(a|b) {aa,ab,ba,bb}
-aa|ab|ba|bb {aa,ab,ba,bb}
-a* 由字母a构成的所有的串集,包括空串
-(a|b)* 由a和b构成的所有的串,包括空串
-(00|11|((01|10)(00|11)*(01|10)))* 偶数个0和偶数个1构成,符号要求的所有01串,都是该正规式规则下的句子。例如:01001101000010000010111001就是上面正规式的句子。