SE250:lab-8:hlin079
To get start with the lab I tried to compile the file and it gave me an error. I changed:
return sp >= str && stircmp( sp, end ) == 0
return sp >= str && stricmp( sp, end ) == 0
it can compile now .Then i construct an expression using mkNode that, when passed to
prefix tree, produces the output -(-(a b)).
ParseTree* t = mkNode( ’-’, mkNode( ’-’, mkNode( ’a’, 0 ), mkNode( ’b’, 0 ), 0 ),0).;
in order to make sure it is right i wrote a main function. i aslo got a graph for the tree. <sorry i can't upload it>
.After that i construct an expression that producesn ?(>(+(a b) c) *(z +(y b)) ?(=(a 2) -(x y) -(y x))).
ParseTree* t = mkNode( '?',mkNode( '>', mkNode('+',mkNode( 'a', 0 ), mkNode( 'b', 0 ),0),mkNode('c',0),0) ,mkNode('*',mkNode( 'z',mkNode( '+', mkNode( 'y', 0 ), mkNode( 'b', 0 ), 0 ),0),0),mkNode('?',mkNode( '=',mkNode( 'a',0), mkNode( '2', 0 ),0), mkNode( '-', mkNode('x',0 ),mkNode('y', 0 ),0), mkNode( '-', mkNode('y',0 ),mkNode('x', 0 ),0),0),0);
i toke me a while to figured out which 0 goes to which. .I have a graph for that tree but i can't upload it . .Question mark has three children. The second and third children are the thing goes to the left and right hand side of colon. .I write a (recursive) function to evaluate a parse tree that consists of nodes that are either digits or the operators +, -, * and /.
eval(ParseTree *node){ if (node->name=='+'){ return eval(node->arg[0])+eval(node->arg[1]); } if (node->name=='-'){ return eval(node->arg[0])-eval(node->arg[1]); } if (node->name=='/'){ return eval(node->arg[0])/eval(node->arg[1]); } if (node->name=='*'){ return eval(node->arg[0])*eval(node->arg[1]); } if ((node->name>='0')||(node->name<='9')){ return node->name-'0'; } }
Hlin079 .