本文整理汇总了C++中SubstitutionList::find_value方法的典型用法代码示例。如果您正苦于以下问题:C++ SubstitutionList::find_value方法的具体用法?C++ SubstitutionList::find_value怎么用?C++ SubstitutionList::find_value使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SubstitutionList
的用法示例。
在下文中一共展示了SubstitutionList::find_value方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: matches
// @brief Returns true if the PredicateEnry matches with other PredicateEntry
// @return bool
bool PredicateEntry::matches(shared_ptr<SymbolTableEntry> other, SubstitutionList & substitution_list) const {
if (!other->is_predicate()) {
return false;
}
shared_ptr<PredicateEntry> otherp = dynamic_pointer_cast<PredicateEntry>(other);
if (_name != otherp->_name || _symbols.size() != otherp->_symbols.size()) {
return false;
}
for (unsigned int i = 0; i < _symbols.size(); ++i) {
shared_ptr<SymbolTableEntry> ci_value = substitution_list.find_value(_symbols[i]);
shared_ptr<SymbolTableEntry> oi_value = substitution_list.find_value(otherp->_symbols[i]);
shared_ptr<SymbolTableEntry> ci = substitution_list.find_non_null(_symbols[i]);
shared_ptr<SymbolTableEntry> oi = substitution_list.find_non_null(otherp->_symbols[i]);
if (!ci_value || !oi_value) {
//semantic error
return false;
}
if (!(*ci_value == *oi_value)) {
if (ci_value->is_constant() && oi_value->is_constant()) {
return false;
}
if (!ci_value->is_constant()) {
substitution_list.add(ci, oi);
} else { //!oi->is_constant()
substitution_list.add(oi, ci);
}
}
}
return true;
}
示例2: p
shared_ptr<Predicate> PredicateEntry::substitute(SubstitutionList & substitution_list) const {
vector<shared_ptr<SymbolTableEntry>> symbols;
for (auto i = _symbols.begin(); i != _symbols.end(); ++i) {
symbols.push_back(substitution_list.find_value(*i));
}
PredicateEntry p(string(_name), symbols);
ostringstream s;
s << "(" << p.text() << ")";
Parser parser(s.str());
return parser.parse_predicate();
}