AST performAction(AST t) { AST s = t; AST ret; if(s->kind == ACTION_NK) { AST x = performAction(s->fields.subtrees.s1); AST y = applyNode(s->fields.subtrees.s2,x); ret = performAction(simplify(y)); } else if(s->kind == BASIC_FUNC_NK) { if(s->extra == PRILST_FK) { AST x= simplify(s->fields.subtrees.s1); while(x->kind != EMPTYLIST) { if(x->kind == ERROR_NK) ret= errorNode(x->fields.stringval); AST y = applyBasicFunc(x,"head"); AST tmp = simplify(y); printValue(simplify(tmp)); y = applyBasicFunc(x,"tail"); x = simplify(y); } ret = emptyList(); } else if(s->extra == PRINT_FK) { AST r = simplify(s->fields.subtrees.s1); printValue(r); ret = emptyList(); } else if(s->extra == PROD_FK) { ret = simplify(s->fields.subtrees.s1); } else if(s->extra == READI_FK) { char str[11]; if(fgets(str,11,stdin) != NULL) ret = numberNode(atoi(str)); else ret = errorNode("Not a valid number"); } else if(s->extra == READC_FK) { char str[2]; if(fgets(str,2,stdin) != NULL) ret = charNode(str); else ret = errorNode("Not a valid character"); } else { ret = errorNode("No action specified"); } } else if(s->kind == ERROR_NK) { ret = errorNode(s->fields.stringval); } else { ret = errorNode("No action specified"); } return ret; }
virtual void apply(osg::Group& node) { applyNode(node); }
virtual void apply(osg::Geometry& node) { applyNode(node); }
virtual void apply(osg::Node& node) { applyNode(node); }
virtual void apply(osg::MatrixTransform& node) { applyNode(node); }