1、预测结果:(513,#)(14,define)(100,pi)(200,3)(514,.)(200,14)(1,void)(2,main)(502,()(503,)(506,)(15,double)(100,r)(402,=)(200,2)(514,.)(200,5)(501,;)(15,double)(100,s)(402,=)(200,0)(514,.)(200,0)(501,;)(100,s)(402,=)(100,pi)(416,*)(100,r)(416,*)(100,r)(501,;)(12,printf)(502,()(509,)(511,%)(100,f)(509,)(512,
2、)(100,s)(503,)(501,;)(507,)1.4. 实验内容及步骤1、输入已给的文本格式的扫描程序Lexical.c文件,然后编译运行,检查修改错误。2、编译成功后,提示输入C语言测试程序,用回车键查看输出的单词流,即单词符号及其属性。3、比较自己分析的结果和屏幕上的输出结果。1.5. 实验小结1、得到的经验。通过本次实验,我了解了如何设计、编制并调试词法分析程序,加深了对词法分析原理的理解。同时,在编制和调试程序时要全面考虑,避免漏掉或者错误定义定界符等,造成不必要的错误。2、遇到的主要问题。忘记对空格、回车符等定界符进行设置等。3、改进方案。(1)char *keywords1
3、5 = void,mainifthenbreakintcharfloatincludeforwhileprintfscanfdefinedouble;(2)case 13:flag = 14;status = 1;break;case 14:flag = 15;(3)case.:wordsj = ch;wordsj+1 = 0;flag = 514;case wordsj = flag = 250;nflag = 251;(4)else if(flag = 250|flag = 251)修改前源代码:#includestdio.hstdlib.hstring.hint i,j,k,flag,n
4、umber,status;/*status which is use to judge the string is keywords or not!*/char ch;char words10 = char program500;int Scan(char program)char *keywords13 = number = 0;status = 0;j = 0;ch = programi+; /* To handle the lettle space ands tab*/*handle letters*/if (ch = a) & (ch wordsj+=ch;ch=programi+;i
5、-;wordsj+ = for (k = 0; k 09) ) &number = number*10+(ch-);ch= programi+;flag = 200;/*opereation and edge handle*/else switch (ch)case =if (ch = )wordsj+ = ch;wordsj= flag = 401;elseflag = 402;flag = 403;flag = 404;flag = 405;flag = 406;!flag= 407;flag = 408;+flag= 409;else if (ch = flag= 410;flag= 411;-flag = 412;else if( ch = flag = 413;flag = 414;*flag = 415;flag = 416;/flag= 417;flag = 418;flag = 501;(flag = 502;)flag = 503;flag = 504;wordsj =
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1