资源简介
武汉大学cmm解释器构造实践课程作业,包含词法分析器 语法分析器 语义分析和界面。
代码片段和文件信息
package com.vincent.compiler;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.linkedList;
import com.vincent.model.ConstVar;
import com.vincent.model.Token;
import com.vincent.model.TreeNode;
public class CMMLexer {
// 注释的标志
private boolean isNotation = false;
// 错误个数
private int errorNum = 0;
// 错误信息
private String errorInfo = ““;
// 分析后得到的tokens集合,用于其后的语法及语义分析
private ArrayList tokens = new ArrayList();
// 分析后得到的所有tokens集合,包含注释、空格等
private ArrayList displayTokens = new ArrayList();
// 读取CMM文件文本
private BufferedReader reader;
//文本缓存
private static BufferedReader mBufferedReader;
private static int currentInt;
private static char currentChar;
private static int lineNo;
public boolean isNotation() {
return isNotation;
}
public void setNotation(boolean isNotation) {
this.isNotation = isNotation;
}
public int getErrorNum() {
return errorNum;
}
public void setErrorNum(int errorNum) {
this.errorNum = errorNum;
}
public String getErrorInfo() {
return errorInfo;
}
public void setErrorInfo(String errorInfo) {
this.errorInfo = errorInfo;
}
public ArrayList getTokens() {
return tokens;
}
public void setTokens(ArrayList tokens) {
this.tokens = tokens;
}
public ArrayList getDisplayTokens() {
return displayTokens;
}
public void setDisplayTokens(ArrayList displayTokens) {
this.displayTokens = displayTokens;
}
/**
* 识别字母
*
* @param c
* 要识别的字符
* @return
*/
private static boolean isLetter(char c) {
if ((c >= ‘a‘ && c <= ‘z‘) || (c >= ‘A‘ && c <= ‘Z‘) || c == ‘_‘)
return true;
return false;
}
/**
* 识别数字
*
* @param c
* 要识别的字符
* @return
*/
private static boolean isDigit(char c) {
if (c >= ‘0‘ && c <= ‘9‘)
return true;
return false;
}
/**
* 识别正确的整数:排除多个零的情况
*
* @param input
* 要识别的字符串
* @return 布尔值
*/
private static boolean matchInteger(String input) {
if (input.matches(“^-?\\d+$“) && !input.matches(“^-?0{1}\\d+$“))
return true;
else
return false;
}
/**
* 识别正确的浮点数:排除00.000的情况
*
* @param input
* 要识别的字符串
* @return 布尔值
*/
private static boolean matchReal(String input) {
if (input.matches(“^(-?\\d+)(\\.\\d+)+$“)
&& !input.matches(“^(-?0{2}+)(\\.\\d+)+$“))
return true;
else
return false;
}
/**
* 识别正确的标识符:有字母、数字、下划线组成,必须以字母开头,不能以下划线结尾
*
* @param input
* 要识别的字符串
* @return 布尔值
*/
private static boolean matchID(String input) {
if (input.matches(“^\\w+$“) && !input.endsWith(“_“)
&& input.substring(0 1).matches(“[A-Za-z]“))
return true;
else
return false;
}
/**
* 识别保留字
*
* @param str 要分析的字符串
* @return 布尔值
*/
private static boolean isKey(String str) {
if (str.equals(ConstVar.IF) || str.equals(ConstVar.ELSE)
|| str.equals(ConstVar.WHILE) || str.equals
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-01-07 03:55 CMMLexer\
文件 397 2018-12-31 12:22 CMMLexer\.classpath
文件 384 2018-12-31 12:22 CMMLexer\.project
目录 0 2019-01-07 03:55 CMMLexer\.settings\
文件 598 2018-12-31 12:22 CMMLexer\.settings\org.eclipse.jdt.core.prefs
目录 0 2019-01-07 03:55 CMMLexer\bin\
目录 0 2019-01-07 03:55 CMMLexer\bin\com\
目录 0 2019-01-07 03:55 CMMLexer\bin\com\vincent\
目录 0 2019-01-07 03:55 CMMLexer\bin\com\vincent\compiler\
文件 15492 2019-01-07 02:26 CMMLexer\bin\com\vincent\compiler\CMMLexer.class
目录 0 2019-01-07 03:55 CMMLexer\bin\com\vincent\main\
文件 1029 2019-01-07 02:26 CMMLexer\bin\com\vincent\main\Compilerfr
文件 848 2019-01-07 02:26 CMMLexer\bin\com\vincent\main\Compilerfr
文件 869 2019-01-07 02:26 CMMLexer\bin\com\vincent\main\Compilerfr
文件 1717 2019-01-07 02:26 CMMLexer\bin\com\vincent\main\Compilerfr
文件 831 2019-01-07 02:26 CMMLexer\bin\com\vincent\main\Compilerfr
文件 762 2019-01-07 02:26 CMMLexer\bin\com\vincent\main\Compilerfr
文件 756 2019-01-07 02:26 CMMLexer\bin\com\vincent\main\Compilerfr
文件 1127 2019-01-07 02:26 CMMLexer\bin\com\vincent\main\Compilerfr
文件 710 2019-01-07 02:26 CMMLexer\bin\com\vincent\main\Compilerfr
文件 1026 2019-01-07 02:26 CMMLexer\bin\com\vincent\main\Compilerfr
文件 12885 2019-01-07 02:26 CMMLexer\bin\com\vincent\main\Compilerfr
目录 0 2019-01-07 03:55 CMMLexer\bin\com\vincent\model\
文件 1424 2019-01-07 02:26 CMMLexer\bin\com\vincent\model\ConstVar.class
文件 5433 2019-01-07 02:26 CMMLexer\bin\com\vincent\model\Token.class
文件 2555 2019-01-07 02:26 CMMLexer\bin\com\vincent\model\TokenList.class
文件 1959 2019-01-07 02:26 CMMLexer\bin\com\vincent\model\TreeNode.class
目录 0 2019-01-07 03:55 CMMLexer\bin\com\vincent\util\
文件 6821 2019-01-07 02:26 CMMLexer\bin\com\vincent\util\Codest
文件 826 2019-01-07 02:26 CMMLexer\bin\com\vincent\util\JCloseableTabbedPane$1.class
文件 1055 2019-01-07 02:26 CMMLexer\bin\com\vincent\util\JCloseableTabbedPane$2.class
............此处省略228个文件信息
- 上一篇:基于51单片的恒温箱
- 下一篇:东南大学计算机系信号与系统期末考试卷
相关资源
- ES的搜索引擎的设计与实现源码.zip
- SPOOLING假脱机技术模拟
- 红河学院机房管理系统课程设计内服
- 编译原理中间代码生成
- 某点最新dubbo视频
- 餐厅点餐系统课程设计文档.docx
- 购物商城可做毕业设计
- 前端开发用js替换插件
- 学生成绩管理系统制作教程(含代码
- 桂浩 解释器构造实验3
- 俄罗斯方块源码
- 数据库系统课程设计-仓库管理系统
- cesiumContainer-剖面分析完成版.vue
- 汽车租赁系统.zip
- 歌曲信息管理系统之3
- 教育信息平台需求分析及功能说明设
- 编译原理LR0分析代码完整
- web聊天室源码
- 这个快速入门指南将教你如何使Type
- 基于Web的通用网络多媒体教学平台的
- Modbus Rtu Slave从机demo实现串口通信
- 写一个类,名为Animal,该类有两个私
- 一个按钮搞定excel文件上传和导入[完
- JMF的音视频实时交互及存储的具体实
- RMI 服务器与客户端源码,很简单,自
- IntelliJ IDEA Maven Mybatis generator 自动生成
- 毕向东全集视频
- 前端页面实现对数据库的操作
- MyTriangle
- 今日头条内部面试题.2018.10
评论
共有 条评论