- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实习一 词法分析
一、实验目的:
??? 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)。
二、核心代码清单:
1)定义类别编码
public static final int KEY_WORD = 1;
public static final int IDENTIFIER = 2;
public static final int NUMBER = 3;
public static final int OPERATOR = 4;
public static final int DELIMITER = 5;
构造保留字,运算符,分隔符表
// 保留字、运算符、分隔符
private String[] keyword = new String[] { if, int, for, while,
do, return, break, continue };//保留字
private String[] operator = new String[] { +, -, *, =, , =,
== };//运算符
private String[] delimiter = new String[] { ,, {, }, (, ), ; };//分隔符
判断是否为数字,字母函数
① // 判断是否是数字
private boolean isNumber(char c) {
if (c 9 || c 0)
return false;
else
return true;
}
②// 判断是否是字母(包括下划线)
// 判断是否是字母
private boolean isChar(char c) {
if ((c = z c = A) || c == _)
return true;
else
return false;
}
字母处理函数
// 处理第一个字符是字母的情况
private char dealWithChar(char c) throws IOException {
boolean flag = true;//是否出现重命名错误
if (Character.isSpace(c)) {
c = (char) fis.read();
return c;
}
String str = new String();
while (isNumber(c) || isChar(c)) // 是数字或字母,则加到str中;不是数字和字母,则str就是识别出的标识符(或保留字)
{
str = str + c;
c = (char) fis.read();
}
if (compare(str, 1)) // 判断是否是保留字
tokens.add(new Token(KEY_WORD, str));
else {
//遍历单词表,查看是否有重命名错误
for (int i = 0; i tokens.size(); i++) {
Token tk = tokens.get(i);
String tmp = tk.str;//得到字符串
int type = tk.type;//得到类型
//如果新得到的字符串与字符表中的相同且类型为2,则重命名错误
if (str.equals(tmp)type==2) {
System.out.println(tmp + + 变量重定义错误!);
flag = false;
break;
}
}
if(flag){
flag = true;
tokens.add(new Token(IDENTIFIER, str));
}
}
return c;
}
数字处理函数
// 处理第一个字符是数字的情况.
private char dealWithNumber(char c) throws IOException {
if (Character.isSpace(c)) {
c = (char) fis.read();
return c;
}
String str = new Stri
文档评论(0)