⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 programnode.java

📁 是有关解释器的.用JAVA编写.可以解释一般的JAVA程序.
💻 JAVA
字号:
public class ProgramNode extends ExecutableNode {	public static boolean vIsMainMethod= true;	public static String vMessageReciever= null; 		public static Environment vTopLevelEnvironment= new Environment();
	MethodDefinitionNode[] vMethodDefinitionNodes;	MainMethodNode vMainMethodNode;	int vProgramCount;	int vProgramSize;	
	/** This methods recognizes a task method within in the token stream **/
    static ProgramNode parseProgram(Environment env, Scanner s)throws ParserException, ScannerException
    {
        // Now we match the required tokens...    	ProgramNode tmpProgramNode= new ProgramNode();    	    	
        if(!MainMethodNode.mIsMainMethod(s))        {        	tmpProgramNode.mPushMethodDefinitionNode(MethodDefinitionNode.parserMethodDefinition(env,s));        	while(!MainMethodNode.mIsMainMethod(s))        		tmpProgramNode.mPushMethodDefinitionNode(MethodDefinitionNode.parserMethodDefinition(env,s));        }        tmpProgramNode.vMainMethodNode= MainMethodNode.parserMainMethod(env,s);        if(isKeywordToken(s))        {        	tmpProgramNode.mPushMethodDefinitionNode(MethodDefinitionNode.parserMethodDefinition(env,s));        	while(isKeywordToken(s))        		tmpProgramNode.mPushMethodDefinitionNode(MethodDefinitionNode.parserMethodDefinition(env,s));        }        
        return tmpProgramNode;
    }    static void mTypeCheckError(String clause)    {    	System.out.println(">>>>Type Check Error<<<<");    	System.out.println("Statement: ");		System.out.println("    "+clause);		System.exit(1);    }    boolean mEmptyProgramBuf()    {    	return vProgramCount==0;    }    boolean mFullProgramBuf()    {    	return vProgramCount==vProgramSize;    }    void mPushMethodDefinitionNode(MethodDefinitionNode aMethodDefinitionNode)    {    	if(mFullProgramBuf())mAutoResizeProgramBuf();    	vMethodDefinitionNodes[vProgramCount]= aMethodDefinitionNode;    	vProgramCount++;    }    MethodDefinitionNode mPopMethodDefinitionNode()    {    	if(!mEmptyProgramBuf())    	{    		vProgramCount--;    		return vMethodDefinitionNodes[vProgramCount];    	}else return null;    }
    void mResizeProgramBuf(int aNewProgramSize)    {    	if(aNewProgramSize > vProgramCount)    	{    		MethodDefinitionNode[] tmpMethodDefinitionNodes;    		    		tmpMethodDefinitionNodes= new MethodDefinitionNode[aNewProgramSize];    		for(int i=0; i<vProgramCount; i++)    			tmpMethodDefinitionNodes[i]= vMethodDefinitionNodes[i];    		vMethodDefinitionNodes= tmpMethodDefinitionNodes;    		vProgramSize= aNewProgramSize;		}    }    void mAutoResizeProgramBuf()    {    	mResizeProgramBuf(vProgramSize*2);    }
    /** Constructor for this class **/    ProgramNode()	{    	vProgramCount= 0;    	vProgramSize= 4;    	vMethodDefinitionNodes= new MethodDefinitionNode[vProgramSize];    	vMainMethodNode= null;	}    ProgramNode(int aProgramSize)	{    	vProgramCount= 0;    	vProgramSize= aProgramSize;    	vMethodDefinitionNodes= new MethodDefinitionNode[aProgramSize];    	vMainMethodNode= null;	}

    /** This methods should execute the saved program node. **/
    Environment run(Environment env) throws InterpreterException
    {
      // Here you can save a top-level-Environment by calling
      // Environment.setTopLevelEnv(env). It can be used by calling
      // Environment.getTopLevelEnv().				    					    			env= vMainMethodNode.run(env);
      // finally call the run method of the saved statement.		
		return env;
    }


    String format(int indent)
    {    	String str=	"/**********************************\n" +    				" ****      GDI Praktikum       ****\n" +					" ****        Gruppe 6          ****\n" +					" **********************************/\n\n" +					"// ############ BEGIN ############\n\n";    	for(int i=0; i<vProgramCount; i++)    		str+= "\n" + vMethodDefinitionNodes[i].format(indent);    	str+= vMainMethodNode.format(indent);    	str+= "\n\n// ############ END ############";
        return str;
    }

    // html pretty printing is optional
    String toHtml(int indent)
    {
        return "<pre>\n" +
               "<font color=\"#0000FF\">It</font> would be <u>nice</u>\n" +
               "  <b>if</b>\n"+
               "    <font color=\"#FF0000\">I</font>\n"+
               "  <b>were</b> implemented.\n" +
               "</pre>\n";
    }    boolean typeCheck(Environment env) throws InterpreterException	{    	vTopLevelEnvironment.put("returnValue", "NOVALUE");//for method returns    	    	    	vTopLevelEnvironment.put("returnType", "NOTYPE");    	for(int i=0; i<vProgramCount; i++)    		if(!vMethodDefinitionNodes[i].typeCheck(env.mCreateNewEnvironment()))return false;    		    	return vMainMethodNode.typeCheck(env);	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -