Doxygen
ExpressionParser类 参考

Recursive decent parser for Django style template expressions. 更多...

+ ExpressionParser 的协作图:

class  ExprToken
 Class representing a token within an expression. 更多...
 

Public 成员函数

 ExpressionParser (const TemplateParser *parser, int line)
 
virtual ~ExpressionParser ()
 
ExprAstPtr parse (const QCString &expr)
 

Private 成员函数

ExprAstPtr parseExpression ()
 
ExprAstPtr parseOrExpression ()
 
ExprAstPtr parseAndExpression ()
 
ExprAstPtr parseNotExpression ()
 
ExprAstPtr parseCompareExpression ()
 
ExprAstPtr parseAdditiveExpression ()
 
ExprAstPtr parseMultiplicativeExpression ()
 
ExprAstPtr parseUnaryExpression ()
 
ExprAstPtr parsePrimaryExpression ()
 
ExprAstPtr parseNumber ()
 
ExprAstPtr parseIdentifier ()
 
ExprAstPtr parseLiteral ()
 
ExprAstPtr parseIdentifierOptionalArgs ()
 
ExprAstPtr parseFilteredVariable ()
 
ExprAstFilterPtr parseFilter ()
 
bool getNextToken ()
 

Private 属性

const TemplateParserm_parser = 0
 
ExprToken m_curToken
 
int m_line = 0
 
const char * m_tokenStream
 

详细描述

Recursive decent parser for Django style template expressions.

在文件 template.cpp2010 行定义.

构造及析构函数说明

◆ ExpressionParser()

ExpressionParser::ExpressionParser ( const TemplateParser parser,
int  line 
)
inline

在文件 template.cpp2013 行定义.

2014  : m_parser(parser), m_line(line), m_tokenStream(0)
2015  {
2016  }

◆ ~ExpressionParser()

virtual ExpressionParser::~ExpressionParser ( )
inlinevirtual

在文件 template.cpp2017 行定义.

2018  {
2019  }

成员函数说明

◆ getNextToken()

bool ExpressionParser::getNextToken ( )
inlineprivate

在文件 template.cpp2344 行定义.

2345  {
2346  const char *p = m_tokenStream;
2347  char s[2];
2348  s[1]=0;
2349  if (p==0 || *p=='\0') return FALSE;
2350  while (*p==' ') p++; // skip over spaces
2351  char c=*p;
2352  if (*p=='\0') // only spaces...
2353  {
2354  m_tokenStream = p;
2355  return FALSE;
2356  }
2357  const char *q = p;
2358  switch (c)
2359  {
2360  case '=':
2361  if (c=='=' && *(p+1)=='=') // equal
2362  {
2364  p+=2;
2365  }
2366  break;
2367  case '!':
2368  if (c=='!' && *(p+1)=='=') // not equal
2369  {
2371  p+=2;
2372  }
2373  break;
2374  case '<':
2375  if (c=='<' && *(p+1)=='=') // less or equal
2376  {
2378  p+=2;
2379  }
2380  else // less
2381  {
2383  p++;
2384  }
2385  break;
2386  case '>':
2387  if (c=='>' && *(p+1)=='=') // greater or equal
2388  {
2390  p+=2;
2391  }
2392  else // greater
2393  {
2395  p++;
2396  }
2397  break;
2398  case '(':
2400  p++;
2401  break;
2402  case ')':
2404  p++;
2405  break;
2406  case '|':
2408  p++;
2409  break;
2410  case '+':
2412  p++;
2413  break;
2414  case '-':
2416  p++;
2417  break;
2418  case '*':
2420  p++;
2421  break;
2422  case '/':
2424  p++;
2425  break;
2426  case '%':
2428  p++;
2429  break;
2430  case ':':
2432  p++;
2433  break;
2434  case ',':
2436  p++;
2437  break;
2438  case 'n':
2439  if (strncmp(p,"not ",4)==0)
2440  {
2442  p+=4;
2443  }
2444  break;
2445  case 'a':
2446  if (strncmp(p,"and ",4)==0)
2447  {
2449  p+=4;
2450  }
2451  break;
2452  case 'o':
2453  if (strncmp(p,"or ",3)==0)
2454  {
2456  p+=3;
2457  }
2458  break;
2459  default:
2460  break;
2461  }
2462  if (p!=q) // found an operator
2463  {
2465  }
2466  else // no token found yet
2467  {
2468  if (c>='0' && c<='9') // number?
2469  {
2471  const char *np = p;
2472  m_curToken.num = 0;
2473  while (*np>='0' && *np<='9')
2474  {
2475  m_curToken.num*=10;
2476  m_curToken.num+=*np-'0';
2477  np++;
2478  }
2479  p=np;
2480  }
2481  else if (c=='_' || (c>='a' && c<='z') || (c>='A' && c<='Z')) // identifier?
2482  {
2484  s[0]=c;
2485  m_curToken.id = s;
2486  p++;
2487  while ((c=*p) &&
2488  (c=='_' || c=='.' ||
2489  (c>='a' && c<='z') ||
2490  (c>='A' && c<='Z') ||
2491  (c>='0' && c<='9'))
2492  )
2493  {
2494  s[0]=c;
2495  m_curToken.id+=s;
2496  p++;
2497  }
2498  if (m_curToken.id=="True") // treat true literal as numerical 1
2499  {
2501  m_curToken.num = 1;
2502  }
2503  else if (m_curToken.id=="False") // treat false literal as numerical 0
2504  {
2506  m_curToken.num = 0;
2507  }
2508  }
2509  else if (c=='"' || c=='\'') // string literal
2510  {
2512  m_curToken.id.resize(0);
2513  p++;
2514  char tokenChar = c;
2515  char cp=0;
2516  while ((c=*p) && (c!=tokenChar || (c==tokenChar && cp=='\\')))
2517  {
2518  s[0]=c;
2519  if (c!='\\' || cp=='\\') // don't add escapes
2520  {
2521  m_curToken.id+=s;
2522  }
2523  cp=c;
2524  p++;
2525  }
2526  if (*p==tokenChar) p++;
2527  }
2528  }
2529  if (p==q) // still no valid token found -> error
2530  {
2532  s[0]=c;
2533  s[1]=0;
2534  warn(m_parser->templateName(),m_line,"Found unknown token '%s' (%d) while parsing %s",s,c,m_tokenStream);
2535  m_curToken.id = s;
2536  p++;
2537  }
2538  TRACE(("token type=%d op=%d num=%d id=%s\n",
2540 
2541  m_tokenStream = p;
2542  return TRUE;
2543  }

引用了 Operator::And, Operator::Colon, Operator::Comma, Operator::Divide, Operator::Equal, FALSE, Operator::Filter, Operator::Greater, Operator::GreaterEqual, ExpressionParser::ExprToken::id, ExpressionParser::ExprToken::Identifier, Operator::LeftParen, Operator::Less, Operator::LessEqual, ExpressionParser::ExprToken::Literal, m_curToken, m_line, m_parser, m_tokenStream, Operator::Minus, Operator::Modulo, Operator::Multiply, Operator::Not, Operator::NotEqual, ExpressionParser::ExprToken::num, ExpressionParser::ExprToken::Number, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, Operator::Or, Operator::Plus, qPrint(), QCString::resize(), Operator::RightParen, TemplateParser::templateName(), TRACE, TRUE, ExpressionParser::ExprToken::type, ExpressionParser::ExprToken::Unknown , 以及 warn().

被这些函数引用 parse(), parseAdditiveExpression(), parseAndExpression(), parseCompareExpression(), parseFilter(), parseFilteredVariable(), parseIdentifier(), parseIdentifierOptionalArgs(), parseLiteral(), parseMultiplicativeExpression(), parseNotExpression(), parseNumber(), parseOrExpression(), parsePrimaryExpression() , 以及 parseUnaryExpression().

◆ parse()

◆ parseAdditiveExpression()

ExprAstPtr ExpressionParser::parseAdditiveExpression ( )
inlineprivate

在文件 template.cpp2143 行定义.

2144  {
2145  TRACE(("{parseAdditiveExpression(%s)\n",m_tokenStream));
2147  if (lhs)
2148  {
2151  {
2153  getNextToken();
2155  lhs = std::make_unique<ExprAstBinary>(op,std::move(lhs),std::move(rhs));
2156  }
2157  }
2158  TRACE(("}parseAdditiveExpression(%s)\n",m_tokenStream));
2159  return lhs;
2160  }

引用了 getNextToken(), m_curToken, m_tokenStream, Operator::Minus, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, parseMultiplicativeExpression(), Operator::Plus, TRACE , 以及 ExpressionParser::ExprToken::type.

被这些函数引用 parseCompareExpression().

◆ parseAndExpression()

ExprAstPtr ExpressionParser::parseAndExpression ( )
inlineprivate

在文件 template.cpp2075 行定义.

2076  {
2077  TRACE(("{parseAndExpression(%s)\n",m_tokenStream));
2078  ExprAstPtr lhs { parseNotExpression() };
2079  if (lhs)
2080  {
2083  {
2084  getNextToken();
2085  ExprAstPtr rhs { parseNotExpression() };
2086  lhs = std::make_unique<ExprAstBinary>(Operator::And,std::move(lhs),std::move(rhs));
2087  }
2088  }
2089  TRACE(("}parseAndExpression(%s)\n",m_tokenStream));
2090  return lhs;
2091  }

引用了 Operator::And, getNextToken(), m_curToken, m_tokenStream, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, parseNotExpression(), TRACE , 以及 ExpressionParser::ExprToken::type.

被这些函数引用 parseOrExpression().

◆ parseCompareExpression()

ExprAstPtr ExpressionParser::parseCompareExpression ( )
inlineprivate

在文件 template.cpp2117 行定义.

2118  {
2119  TRACE(("{parseCompareExpression(%s)\n",m_tokenStream));
2121  if (lhs)
2122  {
2125  (op==Operator::Less ||
2126  op==Operator::Greater ||
2127  op==Operator::Equal ||
2128  op==Operator::NotEqual ||
2129  op==Operator::LessEqual ||
2131  )
2132  )
2133  {
2134  getNextToken();
2135  ExprAstPtr rhs { parseNotExpression() };
2136  lhs = std::make_unique<ExprAstBinary>(op,std::move(lhs),std::move(rhs));
2137  }
2138  }
2139  TRACE(("}parseCompareExpression(%s)\n",m_tokenStream));
2140  return lhs;
2141  }

引用了 Operator::Equal, getNextToken(), Operator::Greater, Operator::GreaterEqual, Operator::Less, Operator::LessEqual, m_curToken, m_tokenStream, Operator::NotEqual, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, parseAdditiveExpression(), parseNotExpression(), TRACE , 以及 ExpressionParser::ExprToken::type.

被这些函数引用 parseNotExpression().

◆ parseExpression()

ExprAstPtr ExpressionParser::parseExpression ( )
inlineprivate

在文件 template.cpp2049 行定义.

2050  {
2051  TRACE(("{parseExpression(%s)\n",m_tokenStream));
2052  ExprAstPtr result { parseOrExpression() };
2053  TRACE(("}parseExpression(%s)\n",m_tokenStream));
2054  return result;
2055  }

引用了 m_tokenStream, parseOrExpression() , 以及 TRACE.

被这些函数引用 parse() , 以及 parsePrimaryExpression().

◆ parseFilter()

ExprAstFilterPtr ExpressionParser::parseFilter ( )
inlineprivate

在文件 template.cpp2326 行定义.

2327  {
2328  TRACE(("{parseFilter(%s)\n",qPrint(m_curToken.id)));
2329  QCString filterName = m_curToken.id;
2330  getNextToken();
2331  ExprAstPtr argExpr;
2334  {
2335  getNextToken();
2336  argExpr = parsePrimaryExpression();
2337  }
2338  ExprAstFilterPtr filter = std::make_unique<ExprAstFilter>(filterName,std::move(argExpr));
2339  TRACE(("}parseFilter()\n"));
2340  return filter;
2341  }

引用了 Operator::Colon, getNextToken(), ExpressionParser::ExprToken::id, m_curToken, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, parsePrimaryExpression(), qPrint(), TRACE , 以及 ExpressionParser::ExprToken::type.

被这些函数引用 parseFilteredVariable().

◆ parseFilteredVariable()

ExprAstPtr ExpressionParser::parseFilteredVariable ( )
inlineprivate

在文件 template.cpp2307 行定义.

2308  {
2309  TRACE(("{parseFilteredVariable()\n"));
2311  if (expr)
2312  {
2315  {
2316  getNextToken();
2317  ExprAstFilterPtr filter = parseFilter();
2318  if (!filter) break;
2319  expr = std::make_unique<ExprAstFilterAppl>(std::move(expr),std::move(filter));
2320  }
2321  }
2322  TRACE(("}parseFilteredVariable()\n"));
2323  return expr;
2324  }

引用了 Operator::Filter, getNextToken(), m_curToken, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, parseFilter(), parseIdentifierOptionalArgs(), TRACE , 以及 ExpressionParser::ExprToken::type.

被这些函数引用 parsePrimaryExpression().

◆ parseIdentifier()

ExprAstPtr ExpressionParser::parseIdentifier ( )
inlineprivate

在文件 template.cpp2264 行定义.

2265  {
2266  TRACE(("{parseIdentifier(%s)\n",qPrint(m_curToken.id)));
2267  ExprAstPtr id = std::make_unique<ExprAstVariable>(m_curToken.id);
2268  getNextToken();
2269  TRACE(("}parseIdentifier()\n"));
2270  return id;
2271  }

引用了 getNextToken(), ExpressionParser::ExprToken::id, m_curToken, qPrint() , 以及 TRACE.

被这些函数引用 parseIdentifierOptionalArgs().

◆ parseIdentifierOptionalArgs()

ExprAstPtr ExpressionParser::parseIdentifierOptionalArgs ( )
inlineprivate

在文件 template.cpp2282 行定义.

2283  {
2284  TRACE(("{parseIdentifierOptionalArgs(%s)\n",qPrint(m_curToken.id)));
2285  ExprAstPtr expr { parseIdentifier() };
2286  if (expr)
2287  {
2290  {
2291  getNextToken();
2292  ExprAstList args;
2293  args.push_back(std::unique_ptr<ExprAst>(parsePrimaryExpression()));
2296  {
2297  getNextToken();
2298  args.push_back(std::unique_ptr<ExprAst>(parsePrimaryExpression()));
2299  }
2300  expr = std::make_unique<ExprAstFunctionVariable>(std::move(expr),std::move(args));
2301  }
2302  }
2303  TRACE(("}parseIdentifierOptionalArgs()\n"));
2304  return expr;
2305  }

引用了 Operator::Colon, Operator::Comma, getNextToken(), ExpressionParser::ExprToken::id, m_curToken, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, parseIdentifier(), parsePrimaryExpression(), qPrint(), TRACE , 以及 ExpressionParser::ExprToken::type.

被这些函数引用 parseFilteredVariable().

◆ parseLiteral()

ExprAstPtr ExpressionParser::parseLiteral ( )
inlineprivate

在文件 template.cpp2273 行定义.

2274  {
2275  TRACE(("{parseLiteral(%s)\n",qPrint(m_curToken.id)));
2276  ExprAstPtr expr = std::make_unique<ExprAstLiteral>(m_curToken.id);
2277  getNextToken();
2278  TRACE(("}parseLiteral()\n"));
2279  return expr;
2280  }

引用了 getNextToken(), ExpressionParser::ExprToken::id, m_curToken, qPrint() , 以及 TRACE.

被这些函数引用 parsePrimaryExpression().

◆ parseMultiplicativeExpression()

ExprAstPtr ExpressionParser::parseMultiplicativeExpression ( )
inlineprivate

在文件 template.cpp2162 行定义.

2163  {
2164  TRACE(("{parseMultiplicativeExpression(%s)\n",m_tokenStream));
2166  if (lhs)
2167  {
2170  {
2172  getNextToken();
2174  lhs = std::make_unique<ExprAstBinary>(op,std::move(lhs),std::move(rhs));
2175  }
2176  }
2177  TRACE(("}parseMultiplicativeExpression(%s)\n",m_tokenStream));
2178  return lhs;
2179  }

引用了 Operator::Divide, getNextToken(), m_curToken, m_tokenStream, Operator::Modulo, Operator::Multiply, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, parseUnaryExpression(), TRACE , 以及 ExpressionParser::ExprToken::type.

被这些函数引用 parseAdditiveExpression().

◆ parseNotExpression()

ExprAstPtr ExpressionParser::parseNotExpression ( )
inlineprivate

在文件 template.cpp2093 行定义.

2094  {
2095  TRACE(("{parseNotExpression(%s)\n",m_tokenStream));
2096  ExprAstPtr result;
2099  {
2100  getNextToken();
2102  if (expr==0)
2103  {
2104  warn(m_parser->templateName(),m_line,"argument missing for not operator");
2105  return 0;
2106  }
2107  result = std::make_unique<ExprAstNegate>(std::move(expr));
2108  }
2109  else
2110  {
2111  result = parseCompareExpression();
2112  }
2113  TRACE(("}parseNotExpression(%s)\n",m_tokenStream));
2114  return result;
2115  }

引用了 getNextToken(), m_curToken, m_line, m_parser, m_tokenStream, Operator::Not, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, parseCompareExpression(), TemplateParser::templateName(), TRACE, ExpressionParser::ExprToken::type , 以及 warn().

被这些函数引用 parseAndExpression() , 以及 parseCompareExpression().

◆ parseNumber()

ExprAstPtr ExpressionParser::parseNumber ( )
inlineprivate

在文件 template.cpp2255 行定义.

2256  {
2257  TRACE(("{parseNumber(%d)\n",m_curToken.num));
2258  ExprAstPtr num = std::make_unique<ExprAstNumber>(m_curToken.num);
2259  getNextToken();
2260  TRACE(("}parseNumber()\n"));
2261  return num;
2262  }

引用了 getNextToken(), m_curToken, ExpressionParser::ExprToken::num , 以及 TRACE.

被这些函数引用 parsePrimaryExpression().

◆ parseOrExpression()

ExprAstPtr ExpressionParser::parseOrExpression ( )
inlineprivate

在文件 template.cpp2057 行定义.

2058  {
2059  TRACE(("{parseOrExpression(%s)\n",m_tokenStream));
2060  ExprAstPtr lhs { parseAndExpression() };
2061  if (lhs)
2062  {
2065  {
2066  getNextToken();
2067  ExprAstPtr rhs { parseAndExpression() };
2068  lhs = std::make_unique<ExprAstBinary>(Operator::Or,std::move(lhs),std::move(rhs));
2069  }
2070  }
2071  TRACE(("}parseOrExpression(%s)\n",m_tokenStream));
2072  return lhs;
2073  }

引用了 getNextToken(), m_curToken, m_tokenStream, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, Operator::Or, parseAndExpression(), TRACE , 以及 ExpressionParser::ExprToken::type.

被这些函数引用 parseExpression().

◆ parsePrimaryExpression()

ExprAstPtr ExpressionParser::parsePrimaryExpression ( )
inlineprivate

在文件 template.cpp2211 行定义.

2212  {
2213  TRACE(("{parsePrimary(%s)\n",m_tokenStream));
2214  ExprAstPtr result;
2215  switch (m_curToken.type)
2216  {
2217  case ExprToken::Number:
2218  result = parseNumber();
2219  break;
2220  case ExprToken::Identifier:
2221  result = parseFilteredVariable();
2222  break;
2223  case ExprToken::Literal:
2224  result = parseLiteral();
2225  break;
2226  case ExprToken::Operator:
2228  {
2229  getNextToken(); // skip over opening bracket
2230  result = parseExpression();
2233  {
2234  warn(m_parser->templateName(),m_line,"missing closing parenthesis");
2235  }
2236  else
2237  {
2238  getNextToken(); // skip over closing bracket
2239  }
2240  }
2241  else
2242  {
2243  warn(m_parser->templateName(),m_line,"unexpected operator '%s' in expression",
2245  abort();
2246  }
2247  break;
2248  default:
2249  warn(m_parser->templateName(),m_line,"unexpected token in expression");
2250  }
2251  TRACE(("}parsePrimary(%s)\n",m_tokenStream));
2252  return result;
2253  }

引用了 getNextToken(), ExpressionParser::ExprToken::Identifier, Operator::LeftParen, ExpressionParser::ExprToken::Literal, m_curToken, m_line, m_parser, m_tokenStream, ExpressionParser::ExprToken::Number, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, parseExpression(), parseFilteredVariable(), parseLiteral(), parseNumber(), Operator::RightParen, TemplateParser::templateName(), Operator::toString(), TRACE, ExpressionParser::ExprToken::type , 以及 warn().

被这些函数引用 parseFilter(), parseIdentifierOptionalArgs() , 以及 parseUnaryExpression().

◆ parseUnaryExpression()

ExprAstPtr ExpressionParser::parseUnaryExpression ( )
inlineprivate

在文件 template.cpp2181 行定义.

2182  {
2183  TRACE(("{parseUnaryExpression(%s)\n",m_tokenStream));
2184  ExprAstPtr result;
2186  {
2188  {
2189  getNextToken();
2190  result = parsePrimaryExpression();
2191  }
2192  else if (m_curToken.op==Operator::Minus)
2193  {
2194  getNextToken();
2196  result = std::make_unique<ExprAstUnary>(m_curToken.op,std::move(rhs));
2197  }
2198  else
2199  {
2200  result = parsePrimaryExpression();
2201  }
2202  }
2203  else
2204  {
2205  result = parsePrimaryExpression();
2206  }
2207  TRACE(("}parseUnaryExpression(%s)\n",m_tokenStream));
2208  return result;
2209  }

引用了 getNextToken(), m_curToken, m_tokenStream, Operator::Minus, ExpressionParser::ExprToken::op, ExpressionParser::ExprToken::Operator, parsePrimaryExpression(), Operator::Plus, TRACE , 以及 ExpressionParser::ExprToken::type.

被这些函数引用 parseMultiplicativeExpression().

类成员变量说明

◆ m_curToken

◆ m_line

int ExpressionParser::m_line = 0
private

在文件 template.cpp2547 行定义.

被这些函数引用 getNextToken(), parseNotExpression() , 以及 parsePrimaryExpression().

◆ m_parser

const TemplateParser* ExpressionParser::m_parser = 0
private

在文件 template.cpp2545 行定义.

被这些函数引用 getNextToken(), parseNotExpression() , 以及 parsePrimaryExpression().

◆ m_tokenStream


该类的文档由以下文件生成:
ExpressionParser::m_line
int m_line
Definition: template.cpp:2547
ExpressionParser::parseIdentifier
ExprAstPtr parseIdentifier()
Definition: template.cpp:2264
ExprAstFilterPtr
std::unique_ptr< ExprAstFilter > ExprAstFilterPtr
Definition: template.cpp:1760
Operator::Modulo
@ Modulo
Definition: template.cpp:574
Operator::Minus
@ Minus
Definition: template.cpp:574
Operator::Type
Type
Definition: template.cpp:571
Operator::GreaterEqual
@ GreaterEqual
Definition: template.cpp:574
ExpressionParser::m_curToken
ExprToken m_curToken
Definition: template.cpp:2546
QCString::isEmpty
bool isEmpty() const
Returns TRUE iff the string is empty
Definition: qcstring.h:144
ExpressionParser::ExprToken::Number
@ Number
Definition: template.cpp:2040
ExpressionParser::ExprToken::Operator
@ Operator
Definition: template.cpp:2040
ExpressionParser::parseNumber
ExprAstPtr parseNumber()
Definition: template.cpp:2255
TemplateParser::templateName
QCString templateName() const
Definition: template.cpp:1998
ExpressionParser::parseIdentifierOptionalArgs
ExprAstPtr parseIdentifierOptionalArgs()
Definition: template.cpp:2282
ExpressionParser::parseAdditiveExpression
ExprAstPtr parseAdditiveExpression()
Definition: template.cpp:2143
Operator::Or
@ Or
Definition: template.cpp:573
Operator::Comma
@ Comma
Definition: template.cpp:574
warn
void warn(const QCString &file, int line, const char *fmt,...)
Definition: message.cpp:151
ExpressionParser::ExprToken::op
Operator::Type op
Definition: template.cpp:2046
ExpressionParser::parseUnaryExpression
ExprAstPtr parseUnaryExpression()
Definition: template.cpp:2181
ExpressionParser::parseNotExpression
ExprAstPtr parseNotExpression()
Definition: template.cpp:2093
ExpressionParser::parseExpression
ExprAstPtr parseExpression()
Definition: template.cpp:2049
ExpressionParser::parseCompareExpression
ExprAstPtr parseCompareExpression()
Definition: template.cpp:2117
Operator::LessEqual
@ LessEqual
Definition: template.cpp:573
Operator::RightParen
@ RightParen
Definition: template.cpp:575
ExpressionParser::parseAndExpression
ExprAstPtr parseAndExpression()
Definition: template.cpp:2075
Operator::toString
static const char * toString(Type op)
Definition: template.cpp:579
Operator::LeftParen
@ LeftParen
Definition: template.cpp:575
ExpressionParser::ExprToken::id
QCString id
Definition: template.cpp:2045
Operator::NotEqual
@ NotEqual
Definition: template.cpp:573
Operator::Divide
@ Divide
Definition: template.cpp:574
TRACE
#define TRACE(x)
Definition: template.cpp:40
Operator::Not
@ Not
Definition: template.cpp:573
Operator::Equal
@ Equal
Definition: template.cpp:573
ExpressionParser::getNextToken
bool getNextToken()
Definition: template.cpp:2344
ExpressionParser::m_parser
const TemplateParser * m_parser
Definition: template.cpp:2545
TRUE
#define TRUE
Definition: qcstring.h:36
ExpressionParser::ExprToken::Literal
@ Literal
Definition: template.cpp:2040
ExpressionParser::ExprToken::type
Type type
Definition: template.cpp:2043
ExpressionParser::parsePrimaryExpression
ExprAstPtr parsePrimaryExpression()
Definition: template.cpp:2211
ExprAstPtr
std::unique_ptr< ExprAst > ExprAstPtr
Definition: template.cpp:1670
ExpressionParser::parseMultiplicativeExpression
ExprAstPtr parseMultiplicativeExpression()
Definition: template.cpp:2162
ExpressionParser::parseFilter
ExprAstFilterPtr parseFilter()
Definition: template.cpp:2326
ExpressionParser::ExprToken::num
int num
Definition: template.cpp:2044
ExpressionParser::ExprToken::Identifier
@ Identifier
Definition: template.cpp:2040
ExpressionParser::m_tokenStream
const char * m_tokenStream
Definition: template.cpp:2548
qPrint
const char * qPrint(const char *s)
Definition: qcstring.h:589
ExpressionParser::parseOrExpression
ExprAstPtr parseOrExpression()
Definition: template.cpp:2057
Operator::Colon
@ Colon
Definition: template.cpp:574
QCString::data
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string
Definition: qcstring.h:153
Operator::Multiply
@ Multiply
Definition: template.cpp:574
ExpressionParser::parseFilteredVariable
ExprAstPtr parseFilteredVariable()
Definition: template.cpp:2307
Operator::Plus
@ Plus
Definition: template.cpp:574
ExprAstList
std::vector< ExprAstPtr > ExprAstList
Definition: template.cpp:1671
ExpressionParser::ExprToken::Unknown
@ Unknown
Definition: template.cpp:2040
Operator::And
@ And
Definition: template.cpp:573
ExpressionParser::parseLiteral
ExprAstPtr parseLiteral()
Definition: template.cpp:2273
QCString::resize
bool resize(size_t newlen)
Resizes the string to hold newlen characters (this value should also count the 0-terminator).
Definition: qcstring.h:164
Operator::Filter
@ Filter
Definition: template.cpp:574
Operator::Less
@ Less
Definition: template.cpp:573
FALSE
#define FALSE
Definition: qcstring.h:33
QCString
This is an alternative implementation of QCString.
Definition: qcstring.h:108
Operator::Greater
@ Greater
Definition: template.cpp:573