📄 programnode.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 + -