《编译原理实验整体词法分析器实验报告.doc》由会员分享,可在线阅读,更多相关《编译原理实验整体词法分析器实验报告.doc(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、词法分析器实验报告班级:学号:姓名:陈向军一实验目的:编译原理是理论与实践并重的课程。在本次实验中,通过自己编写一个小型的词法分析器,进而在训练编程能力的同时,加深对编译过程中词法分析部分的理解。二实验内容1.设计原理词法分析的任务:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号理论基础:有限自动机、正规文法词法分析器:执行词法分析的程序2. 词法分析器的功能和输出形式功能:输入源程序,输出单词符号(token)。即:把构成源程序的字符串转换成“等价的”单词(记号)序列符号程序语言的单词符号一般分为以下五种:关键字、标识符、常数、运算符,界符3. 输出的单词符号的表示形式: 采用2元组
2、形式,4. 流程图:标识符开始 大、小写字母 大、小写字母,_关键字数字0-9 0-9,. 字符或字符串“ 遍历到下一个”对应各自种别码其他各种符号三 关键字:break,1,BREAK , continue,2,CONTINUE, else,3,ELSE, float,4,FLOAT, for,5,FOR, if,6,IF, int,7,INT, return,8,RETURN, void,9,VOID, while,10,WHILE, printf,41,OUTPUT, scanf,42,INPUT,main,43,MAIN, function,44,function+,16,PLUS ,
3、 -,17,MINUS, *,18,MULTI, /,19,RDIV, =,20,ASSIGN, ,22,GT, =,24,GE, !=,25,NE, (,26,LR_BRAC, ),27,RR_BRAC, ,28,COMMA, ;,29,SEMIC, ,30,LS_BRAC, ,31,RS_BRAC, ,32,LB_BRAC, ,33,RB_BRAC, %,34,REMAINDER, &,35,AND, |,36,OR, !,37,NOT, +,38,INC, =,39,EQ, &,40,ADDR四 常量,字符串,注释的状态转移图(DFA) 常量: 字符串: 注释: 五 程序部分设计用字符串
4、数组表示DFA:常量:public static String digitDFA = #, #d.#e#, #d#, #de#, #-d, #d, #d ; 字符串:public static String stConDFA = #d#, #a#, #d, # ;注释:public static String noteDFA = #, #*#, #c*#, #c*/, # ;常量的DFA处理:int s = 1;Boolean isfloat = false;while (ch != 0& (isDigit(ch) | ch = . | ch = e | ch = -) if (ch = .
5、| ch = e)isfloat = true;int k;for (k = 1; k 6)break;i+;if(i=strLine.length) break;ch = strLinei;字符串DFA的处理:while (s != 3 ) i+;if(i=strLine.length-1) haveMistake = true;break;ch = strLinei;if (ch = 0) haveMistake = true;break;for (int k = 0; k =strLine.length) break;ch = strLinei; / 注意判断溢出!if (ch = 0)
6、 haveMistake = true;break;for (int k = 2; k = 4; k+) char tmpstr = noteDFAs.toCharArray();if (1 = in_noteDFA(ch, tmpstrk,s) token += ch;s = k;break;else if(ch = /) /这里就不用状态转移了.int index = line.lastIndexOf(/);String tmpstr=line.substring(index);int tmpint = tmpstr.length();for(int k=0;ktmpint;k+) i+;token = tmpstr;