• 大小: 11.6MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-01
  • 语言: Java
  • 标签: cmm解释器  

资源简介

完整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个文件信息

评论

共有 条评论

相关资源