编译原理词法分析报告.doc

编译原理词法分析报告.doc

ID:57214973

大小:713.50 KB

页数:17页

时间:2020-08-06

编译原理词法分析报告.doc_第1页
编译原理词法分析报告.doc_第2页
编译原理词法分析报告.doc_第3页
编译原理词法分析报告.doc_第4页
编译原理词法分析报告.doc_第5页
资源描述:

《编译原理词法分析报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、年月日1、实验目的1、为初等函数运算语言构造词法分析器。2、掌握生成词法分析器的方法,加深对词法分析原理的理解。3、掌握设计、编制并调试词法分析程序的思想和方法2、实验内容一、根据下面的要求设计初等函数运算语言的词法模式,并用正则式表达出来1、初等函数运算语言的常量为实数类型,其定义方式为实数的最一般书写方式,如:123.321。具体要求:不支持整数部分大于0时首数字为0;不支持小数点后结尾为0;不支持科学记数法;不支持仅为整数时有小数点;支持负数符号,不支持正数符号。2、初等函数运算语言的变量采用与C语言的标识符定义一样的方式:首字符

2、为字母或下划线;其他的为字母、数字及下划线的混合串;区分大小写;变量长度不超过32个字符。3、初等函数运算语言需要处理的函数仅为表一中所列举的内容。函数的格式及参数内容也如表一所示。4、初等函数运算语言支持四则运算,其计算的符号与C语言相同,为:+-*/。5、初等函数运算语言的合法的分隔符包括:空格、制表符、、分行符圆括号(左、右)、分号。其中空格、制表符、分行符可以出现在任何两个不同的单词中间;圆括号(左、右)用于表达式中,用于改变运算的优先级,以及标识函数的参数;分号用于标识一个语句的结束。6、初等函数运算语言支持的常量还包括:PI

3、,E。其中,PI为圆周率,E为自然常数。二、将正则式转化为最小DFA,给出该DFA的形式化表示和图形表示。三、根据DFA给出状态转换表。四、给出初等函数运算语言的记号表,即词法分析中,语言中的记号将分为多少类,每一类型的编码、类型、属性等内容是什么。五、编写词法分析器,将输入的字符串转化成为记号流,便于后续的语法分析工作。要求词法分析器中能够识别词法错误。2.1词法模式设计/正则式分隔符:compart=t

4、

5、(

6、)

7、;

8、空格运算符:operation=+

9、-

10、*

11、/

12、=

13、^变量:variable=[a~zA~Z]([a~zA~Z

14、_0~9])*常量:constant=(ε

15、-)((0

16、(1~9)(0~9)*)(.(0~9)*(1~9)

17、ε))

18、PI

19、E2.2DFA注:id表示字母,num表示数字2.3状态转换表id01-9下划线减号小数点01341281111198283488838888964844896686788878678988888888注:0是初态,2,6是中间状态,1,3,4,7是终态,其中1表示标示符,3,4,7是实数,8表示不合法的状态,9表示'-'为减号2.4记号表符号SinCostgctgloglgln();?+记号012345678910

20、11符号-*/=常量变量无法识别的标示符^,{}记号12131415161718192021223、实验程序清单#include#includeusingnamespacestd;#definemax10charch='';stringkey[7]={"sin","cos","tg","ctg","log","lg","ln"};//关键字charcompart[6]={'t','','(',')',';',''};//分隔符charoperation[5]={'+','-','*','/','

21、='};//运算符//ints[8]={0,1,2,3,4,6,7,8};//状态集合,0是初态,2,6是中间状态,1,3,4,7是终态,其中1表示标示符,3,4,7是实数,8表示不合法的状态inttoken[23]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22};//0表示sin,1表示cos,2表示tg,3表示ctg,4表示log,5表示lg,6表示ln,7表示(,8表示),9表示;,10表示?,11表示+,12表示-,13表示*,14表示/,15表示=,//

22、16表示常量,17表示变量,18表示不可识别标示符,19表示^,20表示逗号,21表示{,22表示}chararr[32];intstate=0;ints=0;booltag=0;//tag=0表示'-'为负数的负号,tag=1表示'-'为减号FILE*fp;intIsKey(stringc){//判断是否为关键字for(inti=0;i<7;i++){if(key[i].compare(c)==0)returni;//返回下标,下标和其token记号一致}return-1;}boolIsLetter(charc){//判断是否为字母i

23、f(((c<='z')&&(c>='a'))

24、

25、((c<='Z')&&(c>='A')))return1;elsereturn0;}boolIsNum(charc){//判断是否为1-9的数字if(c>='

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。