| 118 |  | //    continue; | 
| 119 |  | //} | 
| 120 |  | if (lookingAtDecimal((tokCommand & Token::negnums) != 0)) { | 
| 121 | < | float value = lexi_cast<float>(script.substr(ichToken, ichToken + cchToken)); | 
| 122 | < | ltoken.push_back(Token(Token::decimal, value));/**@todo*/ | 
| 121 | > | float value = lexi_cast<float>(script.substr(ichToken, cchToken)); | 
| 122 | > | std::cout << "encount an decimal: " << value << std::endl; | 
| 123 | > | ltoken.push_back(Token(Token::decimal, boost::any(value))); | 
| 124 |  | continue; | 
| 125 |  | } | 
| 126 |  | if (lookingAtInteger((tokCommand & Token::negnums) != 0)) { | 
| 127 | < | std::string intString = script.substr(ichToken, ichToken + cchToken); | 
| 128 | < | int val = lexi_cast<int>(intString); | 
| 129 | < | ltoken.push_back(Token(Token::integer, val, intString));/**@todo*/ | 
| 127 | > |  | 
| 128 | > | int val = lexi_cast<int>(script.substr(ichToken, cchToken)); | 
| 129 | > | std::cout << "encount an integer: " << val << std::endl; | 
| 130 | > | ltoken.push_back(Token(Token::integer,   boost::any(val))); | 
| 131 |  | continue; | 
| 132 |  | } | 
| 133 |  | } | 
| 244 |  | previousCharBackslash = ch == '\\' ? !previousCharBackslash : false; | 
| 245 |  | } | 
| 246 |  | cchToken = ichT - ichToken; | 
| 247 | + |  | 
| 248 | + |  | 
| 249 | + | std::cout << "lookingAtString: encount " << script.substr(ichToken, cchToken) << std::endl; | 
| 250 |  | return true; | 
| 251 |  | } | 
| 252 |  |  | 
| 430 |  | } | 
| 431 |  | break; | 
| 432 |  | } | 
| 433 | + |  | 
| 434 |  | cchToken = ichT - ichToken; | 
| 435 | + |  | 
| 436 | + | std::cout << "lookingAtLookupToken: encount " << script.substr(ichToken, cchToken) << std::endl; | 
| 437 |  | return true; | 
| 438 |  | } | 
| 439 |  |  | 
| 570 |  | case Token::asterisk: | 
| 571 |  | case Token::identifier: | 
| 572 |  | return clauseChemObjName(); | 
| 573 | < |  | 
| 573 | > |  | 
| 574 | > | case Token::integer : | 
| 575 | > | return clauseIndex(); | 
| 576 |  | default: | 
| 577 |  | if ((tok & Token::atomproperty) == Token::atomproperty) { | 
| 578 |  | return clauseComparator(); | 
| 618 |  | return false; | 
| 619 |  | } | 
| 620 |  |  | 
| 621 | + | boost::any floatVal; | 
| 622 | + | floatVal = val; | 
| 623 |  | return addTokenToPostfix(Token(tokenComparator.tok, | 
| 624 | < | tokenAtomProperty.tok, boost::any(val))); | 
| 624 | > | tokenAtomProperty.tok, floatVal)); | 
| 625 |  | } | 
| 626 |  |  | 
| 627 |  | bool SelectionCompiler::clauseWithin() { | 
| 634 |  | Token tokenDistance = tokenNext();       // distance | 
| 635 |  | switch(tokenDistance.tok) { | 
| 636 |  | case Token::integer: | 
| 625 | – | distance = float(tokenDistance.intValue); | 
| 626 | – | break; | 
| 637 |  | case Token::decimal: | 
| 638 |  | distance = tokenDistance.value; | 
| 639 |  | break; | 
| 719 |  |  | 
| 720 |  | } | 
| 721 |  |  | 
| 722 | + | bool SelectionCompiler::clauseIndex(){ | 
| 723 | + | Token token = tokenNext(); | 
| 724 | + | if (token.tok == Token::integer) { | 
| 725 | + | int index = boost::any_cast<int>(token.value); | 
| 726 | + | int tok = tokPeek(); | 
| 727 | + | std::cout << "Token::to is " << Token::to << ", tok = " << tok << std::endl; | 
| 728 | + | if (tok == Token::to) { | 
| 729 | + | tokenNext(); | 
| 730 | + | tok = tokPeek(); | 
| 731 | + | if (tok != Token::integer) { | 
| 732 | + | return numberExpected(); | 
| 733 | + | } | 
| 734 | + |  | 
| 735 | + | boost::any intVal = tokenNext().value; | 
| 736 | + | int first = index; | 
| 737 | + | if (intVal.type() != typeid(int)){ | 
| 738 | + | return false; | 
| 739 | + | } | 
| 740 | + | int second = boost::any_cast<int>(intVal); | 
| 741 |  |  | 
| 742 | + | return addTokenToPostfix(Token(Token::index, boost::any(std::make_pair(first, second)))); | 
| 743 | + |  | 
| 744 | + | }else { | 
| 745 | + | return addTokenToPostfix(Token(Token::index, boost::any(index))); | 
| 746 | + | } | 
| 747 | + | } else { | 
| 748 | + | return numberExpected(); | 
| 749 | + | } | 
| 750 |  | } | 
| 751 | + |  | 
| 752 | + | } |