RuleTagToken* ParseTreePatternMatcher::getRuleTagToken(ParseTree* t) { if (t->children.size() == 1 && is<TerminalNode*>(t->children[0])) { TerminalNode* c = dynamic_cast<TerminalNode*>(t->children[0]); if (is<RuleTagToken*>(c->getSymbol())) { return dynamic_cast<RuleTagToken*>(c->getSymbol()); } } return nullptr; }
std::vector<ParseTree *> XPathTokenElement::evaluate(ParseTree *t) { // return all children of t that match nodeName std::vector<ParseTree *> nodes; for (auto c : t->children) { if (antlrcpp::is<TerminalNode *>(c)) { TerminalNode *tnode = dynamic_cast<TerminalNode *>(c); if ((tnode->getSymbol()->getType() == _tokenType && !_invert) || (tnode->getSymbol()->getType() != _tokenType && _invert)) { nodes.push_back(tnode); } } } return nodes; }