词法分析器能把运行,但是改过了就有个问题,谁帮我看下(源程序在附件里面)
题目如下:
1、根据以下的正规式,编制正规文法,画出状态图;
标识符 <字母>(<字母>|<数字字符>)*
十进制整数 (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)*
十六进制整数 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)*
运算符和界符 + - * / > < = ( ) ;
关键字 if then else while do
2、根据状态图,设计词法分析函数int scan( ),完成以下功能:
1) 从文本文件中读入测试源代码,根据状态转换图,分析出一个单词,
2) 以二元式形式输出单词<单词种类,单词属性>
其中单词种类用整数表示:
0:标识符
1:十进制整数
2:八进制整数
3:十六进制整数
运算符和界符,关键字采用一字一符,不编码
其中单词属性表示如下:
标识符,整数由于采用一类一符,属性用单词表示
运算符和界符,关键字采用一字一符,属性为空
3、编写测试程序,反复调用函数scan( ),输出单词种别和属性。
输入数据:
编辑一个文本文件program.txt,在文件中输入如下内容:
if data+92>0x3f then
data=data+01;
else
data=data-01;
正确结果:
<if , ->
<0 , data>
<+ , ->
<1 , 92>
<> , ->
<3 , 3f>
<then , ->
<0 , data>
<= , ->
<0 , data>
<+ , ->
<2 , 1>
<; ,->
<else , ->
<0 , data>
<= , ->
<0 , data>
<- , ->
<2 , ->
<; , ->
[此贴子已经被作者于2006-12-4 13:07:52编辑过]