45 const size_t startPos =
m_pos;
46 const wxUniChar curCh =
curChar();
51 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::LPAR, startPos };
54 else if( curCh ==
')' )
56 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::RPAR, startPos };
59 else if( curCh ==
'*' )
61 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::MUL, startPos };
64 else if( curCh ==
'/' )
66 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::DIV, startPos };
69 else if( curCh ==
'=' )
71 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::EQUAL, startPos };
74 else if( curCh ==
'<' )
79 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::LESS_EQUAL, startPos };
81 else if( nextCh ==
'>' )
84 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::NOT_EQUAL, startPos };
88 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::LESS, startPos };
92 else if( curCh ==
'>' )
97 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::GREATER_EQUAL, startPos };
101 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::GREATER, startPos };
105 else if( curCh ==
'&' && nextCh ==
'&' )
108 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::LOW_AND, startPos };
111 else if( curCh ==
'|' && nextCh ==
'|' )
114 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::LOW_OR, startPos };
117 else if( curCh ==
'\'' )
119 std::cout <<
"start const string" << std::endl;
120 wxString constString;
121 while(
m_it !=
m_expr.end() && nextCh !=
'\'' )
123 constString += nextCh;
126 std::cout <<
"end const string: " << constString << std::endl;
133 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::CONST_STRING, startPos, constString };
136 else if( curCh ==
'+' && !wxIsdigit( nextCh ) )
138 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::ADD, startPos };
141 else if( curCh ==
'-' && !wxIsdigit( nextCh ) )
143 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::SUB, startPos };
146 else if( curCh ==
'+' || curCh ==
'-' || wxIsdigit( curCh ) )
148 wxString digitString = curCh;
149 while( wxIsdigit( nextCh ) )
151 digitString += nextCh;
156 digitString.ToLong( &value );
158 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::CONST_INT, startPos, value };
163 wxString identString = curCh;
164 while( wxIsalnum( nextCh ) )
166 identString += nextCh;
170 if( identString.IsSameAs( wxT(
"True" ),
false ) )
172 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::CONST_TRUE, startPos };
174 else if( identString.IsSameAs( wxT(
"False" ),
false ) )
176 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::CONST_FALSE, startPos };
178 else if( identString.IsSameAs( wxT(
"Div" ),
false ) )
180 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::INTEGRAL_DIV, startPos };
182 else if( identString.IsSameAs( wxT(
"Mod" ),
false ) )
184 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::MOD, startPos };
186 else if( identString.IsSameAs( wxT(
"And" ),
false ) )
188 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::AND, startPos };
190 else if( identString.IsSameAs( wxT(
"Or" ),
false ) )
192 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::OR, startPos };
194 else if( identString.IsSameAs( wxT(
"Xor" ),
false ) )
196 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::XOR, startPos };
198 else if( identString.IsSameAs( wxT(
"Not" ),
false ) )
200 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::NOT, startPos };
202 else if( identString.IsSameAs( wxT(
"Between" ),
false ) )
204 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::BETWEEN, startPos };
206 else if( identString.IsSameAs( wxT(
"Like" ),
false ) )
208 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::LIKE, startPos };
212 m_nextToken = { ALTIUM_RULE_TOKEN_KIND::IDENT, startPos, identString };
const ALTIUM_RULE_TOKEN & Peek() const
ALTIUM_RULE_TOKEN m_currentToken
const ALTIUM_RULE_TOKEN & Next()
ALTIUM_RULE_TOKEN m_nextToken
wxString::const_iterator m_it