Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 /* 27 * =========================================== 28 * 29 * Filename: CexmcASTEval.cc 30 * 31 * Description: abstract syntax tree for c 32 * 33 * Version: 1.0 34 * Created: 17.07.2010 15:46:01 35 * Revision: none 36 * Compiler: gcc 37 * 38 * Author: Alexey Radkov (), 39 * Company: PNPI 40 * 41 * =========================================== 42 */ 43 44 #ifdef CEXMC_USE_CUSTOM_FILTER 45 46 #include <numeric> 47 #include <boost/variant/get.hpp> 48 #include <G4SystemOfUnits.hh> 49 #include "CexmcASTEval.hh" 50 51 52 namespace 53 { 54 const std::string CexmcCFVarEvent( "event 55 const std::string CexmcCFVarOpCosThetaSCM 56 const std::string CexmcCFVarEDT( "edt" ); 57 const std::string CexmcCFVarTPT( "tpt" ); 58 const std::string CexmcCFVarMon( "mon" ); 59 const std::string CexmcCFVarMonED( "monED 60 const std::string CexmcCFVarVclED( "vclED 61 const std::string CexmcCFVarVcrED( "vcrED 62 const std::string CexmcCFVarClED( "clED" 63 const std::string CexmcCFVarCrED( "crED" 64 const std::string CexmcCFVarClEDCol( "clE 65 const std::string CexmcCFVarCrEDCol( "crE 66 const std::string CexmcCFVarBpMonPosL( "b 67 const std::string CexmcCFVarBpMonPosW( "b 68 const std::string CexmcCFVarBpMonDirL( "b 69 const std::string CexmcCFVarBpMonDirW( "b 70 const std::string CexmcCFVarBpMonMom( "bp 71 const std::string CexmcCFVarBpMonTid( "bp 72 const std::string CexmcCFVarBpTgtPosL( "b 73 const std::string CexmcCFVarBpTgtPosW( "b 74 const std::string CexmcCFVarBpTgtDirL( "b 75 const std::string CexmcCFVarBpTgtDirW( "b 76 const std::string CexmcCFVarBpTgtMom( "bp 77 const std::string CexmcCFVarBpTgtTid( "bp 78 const std::string CexmcCFVarOpTgtPosL( "o 79 const std::string CexmcCFVarOpTgtPosW( "o 80 const std::string CexmcCFVarOpTgtDirL( "o 81 const std::string CexmcCFVarOpTgtDirW( "o 82 const std::string CexmcCFVarOpTgtMom( "op 83 const std::string CexmcCFVarOpTgtTid( "op 84 const std::string CexmcCFVarNpTgtPosL( "n 85 const std::string CexmcCFVarNpTgtPosW( "n 86 const std::string CexmcCFVarNpTgtDirL( "n 87 const std::string CexmcCFVarNpTgtDirW( "n 88 const std::string CexmcCFVarNpTgtMom( "np 89 const std::string CexmcCFVarNpTgtTid( "np 90 const std::string CexmcCFVarOpdp1TgtPosL( 91 const std::string CexmcCFVarOpdp1TgtPosW( 92 const std::string CexmcCFVarOpdp1TgtDirL( 93 const std::string CexmcCFVarOpdp1TgtDirW( 94 const std::string CexmcCFVarOpdp1TgtMom( 95 const std::string CexmcCFVarOpdp1TgtTid( 96 const std::string CexmcCFVarOpdp2TgtPosL( 97 const std::string CexmcCFVarOpdp2TgtPosW( 98 const std::string CexmcCFVarOpdp2TgtDirL( 99 const std::string CexmcCFVarOpdp2TgtDirW( 100 const std::string CexmcCFVarOpdp2TgtMom( 101 const std::string CexmcCFVarOpdp2TgtTid( 102 const std::string CexmcCFVarOpdpVclPosL( 103 const std::string CexmcCFVarOpdpVclPosW( 104 const std::string CexmcCFVarOpdpVclDirL( 105 const std::string CexmcCFVarOpdpVclDirW( 106 const std::string CexmcCFVarOpdpVclMom( " 107 const std::string CexmcCFVarOpdpVclTid( " 108 const std::string CexmcCFVarOpdpVcrPosL( 109 const std::string CexmcCFVarOpdpVcrPosW( 110 const std::string CexmcCFVarOpdpVcrDirL( 111 const std::string CexmcCFVarOpdpVcrDirW( 112 const std::string CexmcCFVarOpdpVcrMom( " 113 const std::string CexmcCFVarOpdpVcrTid( " 114 const std::string CexmcCFVarOpdpClPosL( " 115 const std::string CexmcCFVarOpdpClPosW( " 116 const std::string CexmcCFVarOpdpClDirL( " 117 const std::string CexmcCFVarOpdpClDirW( " 118 const std::string CexmcCFVarOpdpClMom( "o 119 const std::string CexmcCFVarOpdpClTid( "o 120 const std::string CexmcCFVarOpdpCrPosL( " 121 const std::string CexmcCFVarOpdpCrPosW( " 122 const std::string CexmcCFVarOpdpCrDirL( " 123 const std::string CexmcCFVarOpdpCrDirW( " 124 const std::string CexmcCFVarOpdpCrMom( "o 125 const std::string CexmcCFVarOpdpCrTid( "o 126 const std::string CexmcCFVarIpSCM( "ipSCM 127 const std::string CexmcCFVarIpLAB( "ipLAB 128 const std::string CexmcCFVarNpSCM( "npSCM 129 const std::string CexmcCFVarNpLAB( "npLAB 130 const std::string CexmcCFVarOpSCM( "opSCM 131 const std::string CexmcCFVarOpLAB( "opLAB 132 const std::string CexmcCFVarNopSCM( "nopS 133 const std::string CexmcCFVarNopLAB( "nopL 134 const std::string CexmcCFVarIpId( "ipId" 135 const std::string CexmcCFVarNpId( "npId" 136 const std::string CexmcCFVarOpId( "opId" 137 const std::string CexmcCFVarNopId( "nopId 138 const std::string CexmcCFVarConst_eV( "eV 139 const std::string CexmcCFVarConst_keV( "k 140 const std::string CexmcCFVarConst_MeV( "M 141 const std::string CexmcCFVarConst_GeV( "G 142 const std::string CexmcCFVarConst_mm( "mm 143 const std::string CexmcCFVarConst_cm( "cm 144 const std::string CexmcCFVarConst_m( "m" 145 } 146 147 148 const G4double CexmcASTEval::constants[] = { 149 150 151 CexmcASTEval::CexmcASTEval( const CexmcEventFa 152 const CexmcEventSO 153 evFastSObject( evFastSObject_ ), evSObject 154 { 155 } 156 157 158 CexmcAST::BasicEval::ScalarValueType CexmcAST 159 const 160 { 161 const CexmcAST::Function & fun( boost::ge 162 163 164 if ( fun == "Sum" ) 165 { 166 CexmcEnergyDepositCalorimeterCollectio 167 GetEDCollectionValue( ast.children[ 0 168 169 G4double result( 0. ); 170 171 for ( CexmcEnergyDepositCalorimeterCol 172 k( edCol.b 173 { 174 result += std::accumulate( k->begi 175 } 176 177 return result; 178 } 179 180 bool evalResult( false ); 181 ScalarValueType result( GetBasicFunScalar 182 183 if ( evalResult ) 184 return result; 185 186 throw CexmcException( CexmcCFUnexpectedFun 187 188 return 0; 189 } 190 191 192 CexmcAST::BasicEval::ScalarValueType CexmcAST 193 const 194 { 195 if ( evFastSObject == NULL || evSObject == 196 throw CexmcException( CexmcCFUninitial 197 198 /* Variables with initialized address */ 199 200 /* bound to CexmcAST::Variable:addr */ 201 202 const double * const * addr( boost::get< 203 204 if ( addr ) 205 { 206 if ( *addr ) 207 return **addr; 208 } 209 else 210 { 211 const int * const & addr_( boost::get 212 213 if ( addr_ ) 214 return *addr_; 215 } 216 217 /* found in varAddrMap */ 218 219 VarAddrMap::const_iterator found( varAddr 220 221 if ( found != varAddrMap.end() ) 222 { 223 const CexmcEnergyDepositCalorimeterCol 224 boost::get< const CexmcEnergyD 225 226 if ( addr_ ) 227 { 228 if ( *addr_ ) 229 { 230 if ( ( *addr_ )->size() == 0 ) 231 throw CexmcException( Cexm 232 if ( var.index1 == 0 || var.in 233 throw CexmcException( Cexm 234 return ( *addr_ )->at( var.ind 235 } 236 } 237 else 238 { 239 const bool * const & addr__( boos 240 241 if ( addr__ ) 242 return int( *addr__ ); 243 } 244 } 245 246 /* Variables without address */ 247 248 if ( var.name == CexmcCFVarTPT ) 249 { 250 return int( evSObject->targetTPOutputP 251 CexmcInvalidTrackId ); 252 } 253 254 throw CexmcException( CexmcCFUnexpectedVar 255 256 return 0; 257 } 258 259 260 void CexmcASTEval::GetEDCollectionValue( cons 261 CexmcEnergyDepositCalo 262 { 263 if ( evSObject == NULL ) 264 throw CexmcException( CexmcCFUninitial 265 266 const CexmcAST::Subtree * ast( boost::get 267 268 if ( ast ) 269 { 270 const CexmcAST::Function & fun( boost 271 272 273 if ( fun == "Inner" ) 274 { 275 GetEDCollectionValue( ast->childre 276 edCol.pop_back(); 277 edCol.erase( edCol.begin() ); 278 for ( CexmcEnergyDepositCalorimete 279 k( edCol.begin() ) 280 { 281 k->pop_back(); 282 k->erase( k->begin() ); 283 } 284 return; 285 } 286 if ( fun == "Outer" ) 287 { 288 GetEDCollectionValue( ast->childre 289 if ( edCol.size() < 3 ) 290 return; 291 for ( CexmcEnergyDepositCalorimete 292 k( edCol.begin() + 293 { 294 if ( k->size() < 3 ) 295 continue; 296 k->erase( k->begin() + 1, k->e 297 } 298 return; 299 } 300 } 301 else 302 { 303 const CexmcAST::Leaf & leaf( boos 304 305 const CexmcAST::Variable & var( boost 306 307 308 if ( var.index1 != 0 || var.index2 != 309 throw CexmcException( CexmcCFUnexp 310 311 VarAddrMap::const_iterator found( var 312 313 if ( found == varAddrMap.end() ) 314 throw CexmcException( CexmcCFUnexp 315 316 const CexmcEnergyDepositCalorimeterCol 317 boost::get< const CexmcEnergyD 318 319 if ( ! addr ) 320 { 321 throw CexmcException( CexmcCFUnexp 322 } 323 else 324 { 325 if ( *addr ) 326 edCol = **addr; 327 return; 328 } 329 } 330 } 331 332 333 void CexmcASTEval::BindAddresses( CexmcAST::S 334 { 335 if ( evFastSObject == NULL || evSObject == 336 return; 337 338 for ( std::vector< CexmcAST::Node >::itera 339 340 { 341 CexmcAST::Subtree * subtree( boost::g 342 343 if ( subtree ) 344 { 345 BindAddresses( *subtree ); 346 } 347 else 348 { 349 CexmcAST::Leaf & leaf( boost: 350 CexmcAST::Variable * var( boost:: 351 352 if ( ! var ) 353 continue; 354 355 const int * const * intVarAddr( 356 boost::get 357 if ( intVarAddr ) 358 { 359 if ( *intVarAddr ) 360 continue; 361 } 362 else 363 { 364 const double * const & double 365 boost::get 366 if ( doubleVarAddr ) 367 continue; 368 } 369 370 VarAddrMap::const_iterator found( 371 372 if ( found != varAddrMap.end() ) 373 continue; 374 375 do 376 { 377 if ( var->name == CexmcCFVarEv 378 { 379 var->addr = &evFastSObject 380 break; 381 } 382 if ( var->name == CexmcCFVarOp 383 { 384 var->addr = &evFastSObject 385 break; 386 } 387 if ( var->name == CexmcCFVarED 388 { 389 varAddrMap.insert( VarAddr 390 &evFastSObj 391 break; 392 } 393 if ( var->name == CexmcCFVarMo 394 { 395 varAddrMap.insert( VarAddr 396 &evFastSObject->edD 397 break; 398 } 399 if ( var->name == CexmcCFVarMo 400 { 401 var->addr = &evSObject->mo 402 break; 403 } 404 if ( var->name == CexmcCFVarVc 405 { 406 var->addr = &evSObject->ve 407 break; 408 } 409 if ( var->name == CexmcCFVarVc 410 { 411 var->addr = &evSObject->ve 412 break; 413 } 414 if ( var->name == CexmcCFVarCl 415 { 416 var->addr = &evSObject->ca 417 break; 418 } 419 if ( var->name == CexmcCFVarCr 420 { 421 var->addr = &evSObject->ca 422 break; 423 } 424 if ( var->name == CexmcCFVarCl 425 { 426 varAddrMap.insert( VarAddr 427 &evSObject->ca 428 break; 429 } 430 if ( var->name == CexmcCFVarCr 431 { 432 varAddrMap.insert( VarAddr 433 &evSObject->ca 434 break; 435 } 436 if ( var->name == CexmcCFVarBp 437 { 438 var->addr = GetThreeVector 439 evSObject->monitor 440 break; 441 } 442 if ( var->name == CexmcCFVarBp 443 { 444 var->addr = GetThreeVector 445 evSObject->monitor 446 break; 447 } 448 if ( var->name == CexmcCFVarBp 449 { 450 var->addr = GetThreeVector 451 evSObject->monitor 452 break; 453 } 454 if ( var->name == CexmcCFVarBp 455 { 456 var->addr = GetThreeVector 457 evSObject->monitor 458 break; 459 } 460 if ( var->name == CexmcCFVarBp 461 { 462 var->addr = &evSObject->mo 463 break; 464 } 465 if ( var->name == CexmcCFVarBp 466 { 467 var->addr = &evSObject->mo 468 break; 469 } 470 if ( var->name == CexmcCFVarBp 471 { 472 var->addr = GetThreeVector 473 evSObject->targetT 474 var->index1 ); 475 break; 476 } 477 if ( var->name == CexmcCFVarBp 478 { 479 var->addr = GetThreeVector 480 evSObject->targetT 481 var->index1 ); 482 break; 483 } 484 if ( var->name == CexmcCFVarBp 485 { 486 var->addr = GetThreeVector 487 evSObject->targetT 488 var->index1 ); 489 break; 490 } 491 if ( var->name == CexmcCFVarBp 492 { 493 var->addr = GetThreeVector 494 evSObject->targetT 495 var->index1 ); 496 break; 497 } 498 if ( var->name == CexmcCFVarBp 499 { 500 var->addr = &evSObject->ta 501 break; 502 } 503 if ( var->name == CexmcCFVarBp 504 { 505 var->addr = &evSObject->ta 506 break; 507 } 508 if ( var->name == CexmcCFVarOp 509 { 510 var->addr = GetThreeVector 511 evSObject->targetT 512 var->index1 ); 513 break; 514 } 515 if ( var->name == CexmcCFVarOp 516 { 517 var->addr = GetThreeVector 518 evSObject->targetT 519 var->index1 ); 520 break; 521 } 522 if ( var->name == CexmcCFVarOp 523 { 524 var->addr = GetThreeVector 525 evSObject->targetT 526 var->index1 ); 527 break; 528 } 529 if ( var->name == CexmcCFVarOp 530 { 531 var->addr = GetThreeVector 532 evSObject->targetT 533 var->index1 ); 534 break; 535 } 536 if ( var->name == CexmcCFVarOp 537 { 538 var->addr = &evSObject->ta 539 break; 540 } 541 if ( var->name == CexmcCFVarOp 542 { 543 var->addr = &evSObject->ta 544 break; 545 } 546 if ( var->name == CexmcCFVarNp 547 { 548 var->addr = GetThreeVector 549 evSObject->targetT 550 var->index1 ); 551 break; 552 } 553 if ( var->name == CexmcCFVarNp 554 { 555 var->addr = GetThreeVector 556 evSObject->targetT 557 var->index1 ); 558 break; 559 } 560 if ( var->name == CexmcCFVarNp 561 { 562 var->addr = GetThreeVector 563 evSObject->targetT 564 var->index1 ); 565 break; 566 } 567 if ( var->name == CexmcCFVarNp 568 { 569 var->addr = GetThreeVector 570 evSObject->targetT 571 var->index1 ); 572 break; 573 } 574 if ( var->name == CexmcCFVarNp 575 { 576 var->addr = &evSObject->ta 577 break; 578 } 579 if ( var->name == CexmcCFVarNp 580 { 581 var->addr = &evSObject->ta 582 break; 583 } 584 if ( var->name == CexmcCFVarOp 585 { 586 var->addr = GetThreeVector 587 evSObject->targetTPOut 588 589 var->index1 ); 590 break; 591 } 592 if ( var->name == CexmcCFVarOp 593 { 594 var->addr = GetThreeVector 595 evSObject->targetTPOut 596 597 var->index1 ); 598 break; 599 } 600 if ( var->name == CexmcCFVarOp 601 { 602 var->addr = GetThreeVector 603 evSObject->targetTPOut 604 605 var->index1 ); 606 break; 607 } 608 if ( var->name == CexmcCFVarOp 609 { 610 var->addr = GetThreeVector 611 evSObject->targetTPOut 612 613 var->index1 ); 614 break; 615 } 616 if ( var->name == CexmcCFVarOp 617 { 618 var->addr = &evSObject-> 619 targetTPOutputParticle 620 break; 621 } 622 if ( var->name == CexmcCFVarOp 623 { 624 var->addr = &evSObject-> 625 targetTPOutputParticle 626 break; 627 } 628 if ( var->name == CexmcCFVarOp 629 { 630 var->addr = GetThreeVector 631 evSObject->targetTPOut 632 633 var->index1 ); 634 break; 635 } 636 if ( var->name == CexmcCFVarOp 637 { 638 var->addr = GetThreeVector 639 evSObject->targetTPOut 640 641 var->index1 ); 642 break; 643 } 644 if ( var->name == CexmcCFVarOp 645 { 646 var->addr = GetThreeVector 647 evSObject->targetTPOut 648 649 var->index1 ); 650 break; 651 } 652 if ( var->name == CexmcCFVarOp 653 { 654 var->addr = GetThreeVector 655 evSObject->targetTPOut 656 657 var->index1 ); 658 break; 659 } 660 if ( var->name == CexmcCFVarOp 661 { 662 var->addr = &evSObject-> 663 targetTPOutputParticle 664 break; 665 } 666 if ( var->name == CexmcCFVarOp 667 { 668 var->addr = &evSObject-> 669 targetTPOutputParticle 670 break; 671 } 672 if ( var->name == CexmcCFVarOp 673 { 674 var->addr = GetThreeVector 675 evSObject->vetoCou 676 var->index1 ); 677 break; 678 } 679 if ( var->name == CexmcCFVarOp 680 { 681 var->addr = GetThreeVector 682 evSObject->vetoCou 683 var->index1 ); 684 break; 685 } 686 if ( var->name == CexmcCFVarOp 687 { 688 var->addr = GetThreeVector 689 evSObject->vetoCou 690 var->index1 ); 691 break; 692 } 693 if ( var->name == CexmcCFVarOp 694 { 695 var->addr = GetThreeVector 696 evSObject->vetoCou 697 var->index1 ); 698 break; 699 } 700 if ( var->name == CexmcCFVarOp 701 { 702 var->addr = &evSObject->ve 703 break; 704 } 705 if ( var->name == CexmcCFVarOp 706 { 707 var->addr = &evSObject->ve 708 break; 709 } 710 if ( var->name == CexmcCFVarOp 711 { 712 var->addr = GetThreeVector 713 evSObject->vetoCou 714 var->index1 ); 715 break; 716 } 717 if ( var->name == CexmcCFVarOp 718 { 719 var->addr = GetThreeVector 720 evSObject->vetoCou 721 var->index1 ); 722 break; 723 } 724 if ( var->name == CexmcCFVarOp 725 { 726 var->addr = GetThreeVector 727 evSObject->vetoCou 728 var->index1 ); 729 break; 730 } 731 if ( var->name == CexmcCFVarOp 732 { 733 var->addr = GetThreeVector 734 evSObject->vetoCou 735 var->index1 ); 736 break; 737 } 738 if ( var->name == CexmcCFVarOp 739 { 740 var->addr = &evSObject->ve 741 break; 742 } 743 if ( var->name == CexmcCFVarOp 744 { 745 var->addr = &evSObject->ve 746 break; 747 } 748 if ( var->name == CexmcCFVarOp 749 { 750 var->addr = GetThreeVector 751 evSObject->calorim 752 var->index1 ); 753 break; 754 } 755 if ( var->name == CexmcCFVarOp 756 { 757 var->addr = GetThreeVector 758 evSObject->calorim 759 var->index1 ); 760 break; 761 } 762 if ( var->name == CexmcCFVarOp 763 { 764 var->addr = GetThreeVector 765 evSObject->calorim 766 var->index1 ); 767 break; 768 } 769 if ( var->name == CexmcCFVarOp 770 { 771 var->addr = GetThreeVector 772 evSObject->calorim 773 var->index1 ); 774 break; 775 } 776 if ( var->name == CexmcCFVarOp 777 { 778 var->addr = &evSObject->ca 779 break; 780 } 781 if ( var->name == CexmcCFVarOp 782 { 783 var->addr = &evSObject->ca 784 break; 785 } 786 if ( var->name == CexmcCFVarOp 787 { 788 var->addr = GetThreeVector 789 evSObject->calorim 790 var->index1 ); 791 break; 792 } 793 if ( var->name == CexmcCFVarOp 794 { 795 var->addr = GetThreeVector 796 evSObject->calorim 797 var->index1 ); 798 break; 799 } 800 if ( var->name == CexmcCFVarOp 801 { 802 var->addr = GetThreeVector 803 evSObject->calorim 804 var->index1 ); 805 break; 806 } 807 if ( var->name == CexmcCFVarOp 808 { 809 var->addr = GetThreeVector 810 evSObject->calorim 811 var->index1 ); 812 break; 813 } 814 if ( var->name == CexmcCFVarOp 815 { 816 var->addr = &evSObject->ca 817 break; 818 } 819 if ( var->name == CexmcCFVarOp 820 { 821 var->addr = &evSObject->ca 822 break; 823 } 824 if ( var->name == CexmcCFVarIp 825 { 826 var->addr = GetLorentzVect 827 evSObject->productionM 828 var->index1 ); 829 break; 830 } 831 if ( var->name == CexmcCFVarIp 832 { 833 var->addr = GetLorentzVect 834 evSObject->productionM 835 var->index1 ); 836 break; 837 } 838 if ( var->name == CexmcCFVarNp 839 { 840 var->addr = GetLorentzVect 841 evSObject->productionM 842 var->index1 ); 843 break; 844 } 845 if ( var->name == CexmcCFVarNp 846 { 847 var->addr = GetLorentzVect 848 evSObject->productionM 849 var->index1 ); 850 break; 851 } 852 if ( var->name == CexmcCFVarOp 853 { 854 var->addr = GetLorentzVect 855 evSObject->productionM 856 var->index1 ); 857 break; 858 } 859 if ( var->name == CexmcCFVarOp 860 { 861 var->addr = GetLorentzVect 862 evSObject->productionM 863 var->index1 ); 864 break; 865 } 866 if ( var->name == CexmcCFVarNo 867 { 868 var->addr = GetLorentzVect 869 evSObject->productionM 870 var->index1 ); 871 break; 872 } 873 if ( var->name == CexmcCFVarNo 874 { 875 var->addr = GetLorentzVect 876 evSObject->productionM 877 var->index1 ); 878 break; 879 } 880 if ( var->name == CexmcCFVarIp 881 { 882 var->addr = 883 &evSObject->production 884 break; 885 } 886 if ( var->name == CexmcCFVarNp 887 { 888 var->addr = &evSObject->pr 889 break; 890 } 891 if ( var->name == CexmcCFVarOp 892 { 893 var->addr = &evSObject->pr 894 break; 895 } 896 if ( var->name == CexmcCFVarNo 897 { 898 var->addr = 899 &evSObject->production 900 break; 901 } 902 if ( var->name == CexmcCFVarCo 903 { 904 var->addr = &constants[ 0 905 break; 906 } 907 if ( var->name == CexmcCFVarCo 908 { 909 var->addr = &constants[ 1 910 break; 911 } 912 if ( var->name == CexmcCFVarCo 913 { 914 var->addr = &constants[ 2 915 break; 916 } 917 if ( var->name == CexmcCFVarCo 918 { 919 var->addr = &constants[ 3 920 break; 921 } 922 if ( var->name == CexmcCFVarCo 923 { 924 var->addr = &constants[ 4 925 break; 926 } 927 if ( var->name == CexmcCFVarCo 928 { 929 var->addr = &constants[ 5 930 break; 931 } 932 if ( var->name == CexmcCFVarCo 933 { 934 var->addr = &constants[ 6 935 break; 936 } 937 } while ( false ); 938 } 939 } 940 } 941 942 943 void CexmcASTEval::ResetAddressBinding( Cexmc 944 { 945 for ( std::vector< CexmcAST::Node >::itera 946 947 { 948 CexmcAST::Subtree * subtree( boost::g 949 950 if ( subtree ) 951 { 952 ResetAddressBinding( *subtree ); 953 } 954 else 955 { 956 CexmcAST::Leaf & leaf( boost: 957 CexmcAST::Variable * var( boost:: 958 959 if ( var ) 960 var->addr = ( const int * ) NU 961 } 962 } 963 } 964 965 #endif 966 967