资源简介

武汉大学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\Compilerframe$1.class
     文件         848  2019-01-07 02:26  CMMLexer\bin\com\vincent\main\Compilerframe$2.class
     文件         869  2019-01-07 02:26  CMMLexer\bin\com\vincent\main\Compilerframe$3.class
     文件        1717  2019-01-07 02:26  CMMLexer\bin\com\vincent\main\Compilerframe$4.class
     文件         831  2019-01-07 02:26  CMMLexer\bin\com\vincent\main\Compilerframe$5.class
     文件         762  2019-01-07 02:26  CMMLexer\bin\com\vincent\main\Compilerframe$6.class
     文件         756  2019-01-07 02:26  CMMLexer\bin\com\vincent\main\Compilerframe$7.class
     文件        1127  2019-01-07 02:26  CMMLexer\bin\com\vincent\main\Compilerframe$DefaultMouseAdapter.class
     文件         710  2019-01-07 02:26  CMMLexer\bin\com\vincent\main\Compilerframe$StatusListener.class
     文件        1026  2019-01-07 02:26  CMMLexer\bin\com\vincent\main\Compilerframe$UndoHandler.class
     文件       12885  2019-01-07 02:26  CMMLexer\bin\com\vincent\main\Compilerframe.class
     目录           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\Codestyle.class
     文件         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个文件信息

评论

共有 条评论