编译原理上机报告(10)

2019-08-03 11:33

}

MatchToken(Token_Type.R_BRACKET);call_match(\back(\return;

//-------------------RotStatement的递归子程序--------------------------- protected void RotStatement()throws Exception //the RotStatement is: //ROT IS double. { }

//-------------------ForStatement的递归子程序--------------------------- protected void ForStatement()throws Exception //the ForStatement is:

//FOR t FROM double TO double STEP double //DRAW (double,double) {

ExprNode start_ptr = new ExprNode(); ExprNode end_ptr = new ExprNode(); ExprNode step_ptr = new ExprNode(); ExprNode x_ptr = new ExprNode(); ExprNode y_ptr = new ExprNode(); //?????????????????????

enter(\

MatchToken(Token_Type.FOR);call_match(\MatchToken(Token_Type.T);call_match(\

MatchToken(Token_Type.FROM);call_match(\start_ptr = Expression();

MatchToken(Token_Type.TO);call_match(\

end_ptr = Expression();

ExprNode tmp = new ExprNode();

enter(\

MatchToken(Token_Type.ROT);call_match(\

MatchToken(Token_Type.IS);call_match(\tmp = Expression(); back(\return;

}

MatchToken(Token_Type.STEP);call_match(\step_ptr = Expression();

MatchToken(Token_Type.DRAW);call_match(\

MatchToken(Token_Type.L_BRACKET);call_match(\x_ptr = Expression();

MatchToken(Token_Type.COMMA);call_match(\y_ptr = Expression();

MatchToken(Token_Type.R_BRACKET);call_match(\back(\return;

//-------------------Expression的递归子程序--------------------------- protected ExprNode Expression()throws Exception { }

//-------------------Term的递归子程序--------------------------- protected ExprNode Term()throws Exception {

ExprNode left = new ExprNode(); ExprNode right = new ExprNode(); Token_Type token_tmp; ExprNode left = new ExprNode(); ExprNode right = new ExprNode(); Token_Type token_tmp;

enter(\left = Term();

while(token.type == Token_Type.PLUS||token.type == Token_Type.MINUS) { }

Tree_trace(left);

//System.out.println(\back(\

return left;

token_tmp = token.type; MatchToken(token_tmp); right = Term();

left = MakeExprNode(token_tmp,left,right);

//System.out.println(\

}

//System.out.println(\left = Factor();

//System.out.println(\

while(token.type == Token_Type.MUL||token.type == Token_Type.DIV) { }

return left;

token_tmp = token.type; MatchToken(token_tmp); right = Factor();

left = MakeExprNode(token_tmp,left,right); //System.out.println(\

//-------------------Factor的递归子程序--------------------------- protected ExprNode Factor()throws Exception {

ExprNode left = new ExprNode(); ExprNode right = new ExprNode(); //System.out.println(\if(token.type == Token_Type.PLUS) { }

else if(token.type == Token_Type.MINUS)

//若为一元减??则需要小心,要在这个时候就要转化为0.0-x { } else { }

return right;

//System.out.println(\right = Component();

//System.out.println(\MatchToken(Token_Type.MINUS); right = Factor(); left = new ExprNode();

left.OpCode = Token_Type.CONST_ID; left.content.CaseConst = 0.0;

right = MakeExprNode(Token_Type.MINUS,left,right); MatchToken(Token_Type.PLUS); //?????????????????????????????? //?????????????????????????????? right = Factor();

}

//-------------------Component的递归子程序------------------------ protected ExprNode Component()throws Exception { }

//----------------------Atom的递归子程序-------------------------- protected ExprNode Atom()throws Exception {

Token t = token;

//System.out.println(\//System.out.println(t.type); //System.out.println(t.lexeme); //System.out.println(t.value); //System.out.println(t.FunPtr); //System.out.println(\ //???

ExprNode address = new ExprNode(); ExprNode tmp = new ExprNode();

switch(token.type) {

case CONST_ID:

MatchToken(Token_Type.CONST_ID); //System.out.println(\

address = MakeExprNode(Token_Type.CONST_ID,t.value); //System.out.println(\break;

MatchToken(Token_Type.T); ExprNode left = new ExprNode(); ExprNode right = new ExprNode();

//System.out.println(\left = Atom();

//System.out.println(\if(token.type == Token_Type.POWER) { }

return left;

MatchToken(Token_Type.POWER); right = Component();

left = MakeExprNode(Token_Type.POWER,left,right);

case T:

}

}

address = MakeExprNode(Token_Type.T); break;

MatchToken(Token_Type.FUNC); MatchToken(Token_Type.L_BRACKET);

tmp = Expression(); //此时用来存放函数

address = MakeExprNode(Token_Type.FUNC,t.FunPtr,tmp); MatchToken(Token_Type.R_BRACKET); break;

MatchToken(Token_Type.L_BRACKET); address = Expression(); //round robin to Expression()

MatchToken(Token_Type.R_BRACKET); break; SyntaxError(2);

//the token is right,but not the token we expect!!

case FUNC:

case L_BRACKET:

default:

return address;

//-----------------生成语法树的一个节点---------------------------- /**

* every time,we need to allocate new node,and * return it! * */

protected ExprNode MakeExprNode(Token_Type opcode) //T

//还需要看看的?? { }

protected ExprNode MakeExprNode(Token_Type opcode,double value) //CONST_ID

//need to modify the type of token,and the value. {

//System.out.println(\ExprNode ExprPtr = new ExprNode(); ExprPtr.OpCode = opcode;

ExprPtr.content.CaseParmPtr = parameter; return ExprPtr;


编译原理上机报告(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:化工仪表实验指导书3[1].0

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: