没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
编译原理
实验报告
学 号:
2123121
姓 名:
杨芸菲
提交日期:
2014-12-25
成 绩:
东北大学秦皇岛分校
实验一:词法分析程序:
【词法分析程序的任务】
词法分析程序的任务就是扫描源程序,依据词法规则识别单词并报告构词错误信息。通
常将单词分为 5 种类型。
1)基本字:也叫关键字、保留字,是程序设计语言用来表示特定语法含义的一种标识符,
如 if、begin 等。
2)运算符:如+、-、*、/、:=、>、<等。
3)标识符:用户定义的变量名、常数名、函数名等。不同的高级程序设计语言对关键字
是否可以作为普通标识符有不同的要求,有的语言允许程序员使用关键字作为普通标识符,
有的程序设计语言则不允许程序员将关键字用着普通标识符(如 C/C++、Pascal 等都不允
许)。在允许程序员将关键字用作普通标识符的程序设计语言的编译器中,编译器必须具备
能够区分一个标识符到底是关键字还是普通标识符的功能。
4)常数:如 23、6 等。
5)界符:如“,”、“;”、“(”、“)”、“.”等。
此外,空格的作用仅仅是将一个个单词分割开来,源程序中的空格不具备别的语法意义,
在语法分析及其后续阶段都没有任何作用,因此,词法分析的另一个工作是过滤空格。关于
过滤空格的准确意义请大家仔细阅读稍后一段中的描述,以明确如何在词法分析程序中实现
空格过滤功能。同样,注释对整个源程序的编译也没有任何语法意义,只是为了便于阅读和
交流,因此,有的编译程序的词法分析程序也负责过滤注释。通常情况下是在预处理阶段就
将注释部分过滤掉以缩小后续阶段扫描的字符数。
【实验环境】
Windows PC 机,任何语言。
【实验源码】
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
public class shiyan1 {
static public Reader reader = null;
// 关键字
static public String[] keyWords = { "if", "else", "for", "while", "do",
"return", "break", "continue" };
// 界符
static public String[] borders = { ",", ";", "{", "}", "(", ")" };
// 运算符
static public String[] arithmetic = { "+", "-", "*", "/" };
// 关系符 1
static public String[] relation1 = { "<", "=", ">" };
// 关系符 2
static public String[] relation2 = { "<=", ">=", "<>" };
static public boolean isOver = false;
//处理一个字母开头的词
static private char alphaprocess(char buffer) throws Exception {
int i = -1;
StringBuffer sb = new StringBuffer();
char temp = buffer;
while (Character.isLetter(temp) || Character.isDigit(temp)) {
sb.append(temp);
if((temp = (char) reader.read()) == -1) {
isOver = true;
}
}
if(!search(sb.toString(), 1)){
search(sb.toString(),2);
}
return temp;
}
//处理数字开头的词
static private char digitprocess(char buffer) throws Exception {
StringBuffer sb = new StringBuffer();
char temp = buffer;
while(Character.isDigit(temp)){
sb.append(temp);
if((temp = (char) reader.read()) == -1) {
isOver = true;
}
}
search(sb.toString(), 3);//处理一个数字
return temp;
}
static private char otherprocess(char buffer) throws Exception {
StringBuffer sb = new StringBuffer();
char temp = buffer;
剩余10页未读,继续阅读
资源评论
小码蚁.
- 粉丝: 2526
- 资源: 4089
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功