void operator()(const BinTree & m_xml)const { printtab(tabstop_);std::cout<<"("<<std::endl; printtab(tabstop_);std::cout<<m_xml.data<<std::endl; boost::apply_visitor(BinTreeNodePrinter(tabstop_+tabsize),m_xml.left); boost::apply_visitor(BinTreeNodePrinter(tabstop_+tabsize),m_xml.right); printtab(tabstop_);std::cout<<")"<<std::endl; }
static BSErr resultDumpFunc(XMLParser* parser,QBNode* node,int openclose) { PPSAXHandler* handler = (PPSAXHandler*)parser->userData; switch (openclose) { case XMLPARSER_HEAD: break; case XMLPARSER_DOC: printtab(handler->level); { int i; for (i=0; i<QBNodeChildNum(node); i++) { if (i > 0) printf(","); printf("%s",QBNodeString(QBNodeChild(node,i))); } } printf("\n"); break; case XMLPARSER_OPEN: printtab(handler->level); printf("%s ",QBNodeString(QBNodeFirstChild(node))); { int i; for (i=1; i<QBNodeChildNum(node); i++) { if (i > 1) printf(","); printf("%s",QBNodeString(QBNodeChild(node,i))); if (QBNodeChildNum(QBNodeChild(node,i)) > 0) { printf("=%s",QBNodeString(QBNodeChild(QBNodeChild(node,i),0))); } } } printf("\n"); handler->level ++; break; case XMLPARSER_OPEN_CLOSE: printtab(handler->level); printf("%s/ ",QBNodeString(QBNodeFirstChild(node))); { int i; for (i=1; i<QBNodeChildNum(node); i++) { if (i > 1) printf(","); printf("%s",QBNodeString(QBNodeChild(node,i))); if (QBNodeChildNum(QBNodeChild(node,i)) > 0) { printf("=%s",QBNodeString(QBNodeChild(QBNodeChild(node,i),0))); } } } printf("\n"); break; case XMLPARSER_CLOSE: handler->level --; printtab(handler->level); printf("/%s\n",QBNodeString(QBNodeLastChild(node))); break; } return BSERR_OK; }
/****************************************************************************** rest_expr := + term rest_expr - term rest_expr (nil) *****************************************************************************/ void parse_rest_expr( val_t* val ) { printtab(); dprintf("parse_rest_expr()\n"); level++; if ( match_char( '+' ) ) { val_t val2; parse_term( &val2 ); val->d.fval += val2.d.fval; parse_rest_expr( val ); } else if ( match_char( '-' ) ) { val_t val2; parse_term( &val2 ); val->d.fval /= val2.d.fval; parse_rest_expr( val ); } else if ( match_eof() ) { } else { } level--; return; }
/****************************************************************************** num_op := num rest_num_op ( expr ) rest_num_op *****************************************************************************/ void parse_num_op( val_t* val ) { printtab(); dprintf("parse_num_op()\n"); level++; if ( match_num( val ) ) { parse_rest_num_op( val ); } else if ( match_variable( val ) ) { resolve_variable( val ); parse_rest_num_op( val ); } else if ( match_char( '(' ) ) { parse_expr( val ); if ( !match_char( ')' ) ) { buffer[bpos] = 0; printf("Missing bracket: %s\n", buffer); longjmp( env, 1 ); } parse_rest_num_op( val ); } else { buffer[bpos] = 0; printf("Parse error: %s\n", buffer); longjmp( env, 1 ); } level--; return; }
/****************************************************************************** term := factor rest_term *****************************************************************************/ void parse_term( val_t* val ) { printtab(); dprintf("parse_term()\n"); level++; parse_factor( val ); parse_rest_term( val ); level--; return; }
/****************************************************************************** expr := term rest_expr *****************************************************************************/ void parse_expr(val_t* val) { printtab(); dprintf("parse_expr()\n"); level++; if ( match_variable( val ) ) { parse_rest_var( val ); } else { parse_term( val ); parse_rest_expr( val ); } level--; return; }
/****************************************************************************** factor := - factor num_op *****************************************************************************/ void parse_factor( val_t* val ) { printtab(); dprintf("parse_factor()\n"); level++; if ( match_char( '-' ) ) { parse_factor( val ); val->d.fval = val->d.fval; } else { parse_num_op( val ); } level--; return; }
/****************************************************************************** rest_term := * factor rest_term / factor rest_term % factor rest_term <nil> *****************************************************************************/ void parse_rest_term( val_t* val ) { printtab(); dprintf("parse_rest_term()\n"); level++; if ( match_char( '*' ) ) { val_t val2; parse_factor( &val2 ); val->d.fval *= val2.d.fval; parse_rest_term( val ); } else if ( match_char( '/' ) ) { val_t val2; parse_factor( &val2 ); if ( val2.d.fval != 0 ) { val->d.fval /= val2.d.fval; } else { printf("Division by 0\n"); longjmp(env, 0); } parse_rest_term( val ); } else if ( match_char( '%' ) ) { val_t val2; parse_factor( &val2 ); val->d.fval = fmod( val->d.fval, val2.d.fval ); parse_rest_term( val ); } else if ( match_eof() ) { } else { } level--; return; }
value c_printtab(value ba) { printtab(Data_bigarray_val(ba)); return Val_unit; }
void operator()(const std::string& s)const { printtab(tabstop_);std::cout<<s<<std::endl; }