当前位置:首页 > 2009年会计从业资格考试会计基础模拟试题
}
F(); T1();
void T1(void){ } void
F(void){
if(shift->ch=='*'||shift->ch=='/'){ } else{ }
if(shift->ch!='#'&&shift->ch!=')'&&shift->ch!='+'&&shift->ch!='-')
right=0; /*如果不是'#'or')'or'+'or'+'or'-'则出错*/ shift=shift->next; F(); T1();
if(shift->ch=='i')
shift=shift->next;
else{
if(shift->ch=='('){ } else
shift=shift->next; E();
if(shift->ch==')')
shift=shift->next;
else
right=0;
}
}
right=0;
(4)调试
1.编译:在Windows平台下,用Turbo C 2编译连接生成后ana.exe;
2.输入表达式:在ana.exe程序同一目录下新建一文本文件(如:test.txt)。往文本文件中输入要识别的表达式,表达式以“#”结束,可输入多行。同一行“#”以后的内容在识别过种中将自动丢弃。如将以下内容存入test.txt文件中: i-i# # i# ++i# (i+i)*i#++
3.运行:打开Dos控制台,进入程序所在的目录(如C:\\>)。
输入:[程序名] [存放表达式的txt文件名],如:ana test.txt
以上test.txt文本实例运行的结果如图:
test.txt实例运行结果图
异常结果注释:
a) 文件不存在or打不开时,提示“Can not open file [filename],or not exist it!”正常退出。
b) 打开文件成功,提示:Success open file:[filename]
c) 若为空文件,提示:[filename] is a blank file! 并正常退出程序。 d) 先检测文件中是否含有非法字符,若有,则统计并输出其个数:[errnum] Unindentify characters in file [filename]
e) 程序将分析每行的表达式,输出每行执行的结果,如上图可知。
结束语
文中代码部分也可以用其他语言实现,而思想基本上都是一样的,请读者自行实现。水平
有限,时间仓促,有什么不足之处,敬请读者批评指正。
参考资料
关于题目的来源
* 编译原理实验二 递归下降语法分析 华南热带农业大学 计算机科学与技术系
关于LL(1)分析方法
* 何炎祥,编译原理,高等教育出版社,2004-8
关于指针线性链表代码实现思想
* 黄记瑶,编译实验(二)递归下降语法分析,2005-11-9
/*参考书《计算机编译原理——编译程序构造实践》 LL(1)语法分析,例1: ERTWF# +*()i#
文法G[E]:(按此格式输入) 1 E -> TR 2 R -> +TR 3 R -> 4 T -> FW 5 W -> * FW 6 W -> 7 F -> (E) 8 F -> i
分析例句:i*(i)# , i+i# 例2:
编译书5.6例题1 SHMA# adbe# S->aH H->aMd H->d M->Ab
共分享92篇相关文档