资源简介
完整cmm解释器, 带语法高亮, 词法分析, 语法分析, 代码生成, 解释执行功能, 带GUI. 使用JAVA编写, 使用SWT框架
代码片段和文件信息
package com.shaw.cmmjava;
import java.io.IOException;
import java.util.linkedList;
import com.shaw.cmmjava.exception.InterpretException;
import com.shaw.cmmjava.exception.ParserException;
import com.shaw.cmmjava.model.FourCode;
import com.shaw.cmmjava.model.Symbol;
import com.shaw.cmmjava.model.Token;
import com.shaw.cmmjava.model.TreeNode;
public class CodeGenerater {
private static int mLevel;
private static int mLine;
private static linkedList codes;
private static SymbolTable symbolTable;
public static linkedList generateCode(String filename) throws ParserException InterpretException {
mLine = -1;//代码编号从0开始
mLevel = 0;
codes = new linkedList();
try {
linkedList nodeList = Util.getNodeList(Util.getTokenList(filename));
symbolTable = SymbolTable.getSymbolTable();
symbolTable.newTable();
CodeGenerater generator = new CodeGenerater();
for (TreeNode node : nodeList) {
generator.interpret(node);
}
symbolTable.deleteTable();
} catch (IOException e1) {
e1.printStackTrace();
}
return codes;
}
private void interpret(TreeNode node) throws InterpretException {
while (true) {
switch (node.getType()) {
case TreeNode.IF_STMT:
interpretIfStmt(node);
break;
case TreeNode.WHILE_STMT:
{
int jmpline = mLine + 1;
FourCode falsejmp = new FourCode(FourCode.JMP interpretExp(node.getLeft()) null null);
codes.add(falsejmp);
mLine++;
codes.add(new FourCode(FourCode.IN null null null));
mLine++;
mLevel++;
interpret(node.getMiddle());
SymbolTable.getSymbolTable().deregister(mLevel);
mLevel--;
codes.add(new FourCode(FourCode.OUT null null null));
mLine++;
codes.add(new FourCode(FourCode.JMP null null jmpline + ““));
mLine++;
falsejmp.setForth(String.valueOf(mLine + 1));
break;
}
case TreeNode.READ_STMT:
{
String varname = null;
int type = symbolTable.getSymbolType(node.getLeft().getValue());
switch (type) {
case Symbol.SINGLE_INT:
case Symbol.SINGLE_REAL:
codes.add(new FourCode(FourCode.READ null null node.getLeft().getValue()));
mLine++;
break;
case Symbol.ARRAY_INT:
case Symbol.ARRAY_REAL:
codes.add(new FourCode(FourCode.READ null null node.getLeft().getValue() + “[“ + interpretExp(node.getLeft().getLeft()) + “]“));
mLine+
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-12-29 17:28 cmm-release\
文件 2022069 2015-02-17 23:00 cmm-release\cmm.jar
目录 0 2014-12-29 17:27 cmm-release\res\
文件 808 2014-12-21 21:37 cmm-release\res\ic_open.png
文件 240 2014-12-21 21:37 cmm-release\res\ic_run.png
文件 813 2014-12-21 21:37 cmm-release\res\ic_save.png
文件 45 2014-12-26 15:11 cmm-release\res\interpret.bat
文件 2022134 2015-02-17 22:57 cmm-release\res\interpreter.jar
目录 0 2014-12-30 20:30 cmm-release\TestCase\
文件 12 2015-01-07 09:16 cmm-release\TestCase\中间代码.cmm
文件 174 2014-12-31 01:47 cmm-release\TestCase\分支语句.cmm
文件 119 2015-01-02 17:20 cmm-release\TestCase\变量声明.cmm
文件 212 2014-12-31 01:25 cmm-release\TestCase\变量层次.cmm
文件 126 2015-01-02 17:34 cmm-release\TestCase\表达式计算.cmm
文件 71 2014-12-29 15:11 cmm-release\TestCase\输入测试.cmm
目录 0 2015-01-05 23:19 cmm-sourcecode\
目录 0 2015-02-17 23:04 cmm-sourcecode\cmmjava\
文件 307 2014-12-17 15:41 cmm-sourcecode\cmmjava\.classpath
文件 383 2014-11-24 09:51 cmm-sourcecode\cmmjava\.project
目录 0 2015-01-02 17:53 cmm-sourcecode\cmmjava\.settings\
文件 658 2014-11-24 11:05 cmm-sourcecode\cmmjava\.settings\org.eclipse.jdt.core.prefs
目录 0 2015-01-02 17:53 cmm-sourcecode\cmmjava\res\
文件 808 2014-12-21 21:37 cmm-sourcecode\cmmjava\res\ic_open.png
文件 240 2014-12-21 21:37 cmm-sourcecode\cmmjava\res\ic_run.png
文件 813 2014-12-21 21:37 cmm-sourcecode\cmmjava\res\ic_save.png
文件 45 2014-12-26 15:11 cmm-sourcecode\cmmjava\res\interpret.bat
文件 2022126 2015-01-23 16:44 cmm-sourcecode\cmmjava\res\interpreter.jar
目录 0 2015-01-02 17:53 cmm-sourcecode\cmmjava\src\
目录 0 2015-01-02 17:53 cmm-sourcecode\cmmjava\src\com\
目录 0 2015-01-02 17:53 cmm-sourcecode\cmmjava\src\com\shaw\
目录 0 2015-01-06 18:04 cmm-sourcecode\cmmjava\src\com\shaw\cmmjava\
............此处省略28个文件信息
- 上一篇:java职业中介管理系统
- 下一篇:用户管理系统
评论
共有 条评论