资源描述:
《编译原理实习一——词法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实习一词法分析一、实验目的: 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)。二、核心代码清单:1)定义类别编码publicstaticfinalintKEY_WORD=1;publicstaticfinalintIDENTIF
2、IER=2;publicstaticfinalintNUMBER=3;publicstaticfinalintOPERATOR=4;publicstaticfinalintDELIMITER=5;2)构造保留字,运算符,分隔符表//保留字、运算符、分隔符privateString[]keyword=newString[]{"if","int","for","while","do","return","break","continue"};//保留字privateString[]operator=newString[]{"+","-","*","=
3、",">",">=","=="};//运算符privateString[]delimiter=newString[]{",","{","}","(",")",";"};//分隔符3)判断是否为数字,字母函数①//判断是否是数字privatebooleanisNumber(charc){if(c>'9'
4、
5、c<'0')returnfalse;elsereturntrue;}②//判断是否是字母(包括下划线)//判断是否是字母privatebooleanisChar(charc){if((c<='z'&&c>='A')
6、
7、c=='_')returnt
8、rue;elsereturnfalse;}4)字母处理函数//处理第一个字符是字母的情况privatechardealWithChar(charc)throwsIOException{booleanflag=true;//是否出现重命名错误if(Character.isSpace(c)){c=(char)fis.read();returnc;}Stringstr=newString();while(isNumber(c)
9、
10、isChar(c))//是数字或字母,则加到str中;不是数字和字母,则str就是识别出的标识符(或保留字){str=str
11、+c;c=(char)fis.read();}if(compare(str,1))//判断是否是保留字tokens.add(newToken(KEY_WORD,str));else{//遍历单词表,查看是否有重命名错误for(inti=0;i12、out.println(tmp+""+"变量重定义错误!");flag=false;break;}}if(flag){flag=true;tokens.add(newToken(IDENTIFIER,str));}}returnc;}2)数字处理函数//处理第一个字符是数字的情况.privatechardealWithNumber(charc)throwsIOException{if(Character.isSpace(c)){c=(char)fis.read();returnc;}Stringstr=newString();while(isNu
13、mber(c))//是数字,则加到str中;不是数字,则str就是识别出的数,将str加入到tokens中{str=str+c;c=(char)fis.read();}Tokentoken=newToken(NUMBER,str);tokens.add(token);returnc;}2)其他字符处理函数//其它字符的情况privatechardealWithOther(charc)throwsIOException{Stringstr=newString();if(Character.isSpace(c)){c=(char)fis.read()
14、;returnc;}if(compare(newString()+c,DELIMITER)){str=str+c;tokens.add(