04070005 颜冬 第 1 页 2007-6-23
实验一:词法分析程序编制实验
(Scanner for a tiny programming language)
实验设计
1.词法的正规式描述
运算符和分隔符 + - * / > < = ( ) := # ;
关键字 if then else while do switch case for
标识符 <字母>(<字母>|<数字字符>)
*(ε|_|.)(<字母>|<数字字符>)*
十进制数 (0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(ε|.)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*
八进制数 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)* (ε|.)(0|1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*
十六进制数 0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* (ε|.)
(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*
2.变换后的正规文法
(1)标识符
设<字母>的表示符为 A(alpha),<数字字符>的表示符为 N(num),则标识符的正规文法可以表示为:
idÆAI
IÆε| AI | NI
JÆε|.I
(2)十进制数
SÆ0 | 1A | 2A | 3A | 4A | 5A | 6A | 7A| 8A | 9A
AÆε| 1AB | 2AB | 3AB | 4AB | 5AB | 6AB | 7AB | 8AB | 9AB
BÆε|.S
(3)八进制数
SÆ0A
AÆ 0B |1B | 2B | 3B | 4B | 5B | 6B | 7B
BÆε| 0BC |1BC | 2BC | 3BC | 4BC | 5BC | 6BC | 7BC
CÆε|.A
(4)十六进制数
SÆ0xM | 0XN
NÆ0M|1M |2M |3M |4M |5M |6M |7M |8M |9M |aM |bM |cM |dM |eM |fM |AM|BM|CM|DM|EM|FM|
MÆε|0M|R1MR |2MR |3MR |4MR |5MR |6MR |7MR |8MR |9MR |aMR |bMR |cMR |dMR |eMR |fMR
|AMR|BMR|CMR|DMR|EMR|FMR|
RÆε|.N
(5)运算符和分隔符
SÆ+ | - | * | / | > | < | = | ( | ) | := | # | ;
(6)关键字
SÆ if | then | else | while | do | switch | case | for