bool ParserCompoundIdentifier::parseImpl(Pos & pos, Pos end, ASTPtr & node, Pos & max_parsed_pos, Expected & expected) { Pos begin = pos; ASTPtr id_list; if (!ParserList(ParserPtr(new ParserIdentifier), ParserPtr(new ParserString(".")), false) .parse(pos, end, id_list, max_parsed_pos, expected)) return false; String name; const ASTExpressionList & list = static_cast<const ASTExpressionList &>(*id_list.get()); for (const auto & child : list.children) { if (!name.empty()) name += '.'; name += static_cast<const ASTIdentifier &>(*child.get()).name; } node = std::make_shared<ASTIdentifier>(StringRange(begin, pos), name); /// В children запомним идентификаторы-составляющие, если их больше одного. if (list.children.size() > 1) node->children.insert(node->children.end(), list.children.begin(), list.children.end()); return true; }
int compile_chain(string filename) { cout << "[ Compiling... ]" << endl; InputPtr input = Input::open_file(filename); if (input != nullptr) { ScannerPtr scanner = ScannerPtr(new Scanner(input)); SemanticAnalyzerPtr analyzer = SemanticAnalyzerPtr(new SemanticAnalyzer(filename)); ParserPtr parser = ParserPtr(new Parser(scanner, analyzer)); parser->parse(); parser->get_analyzer()->generate_all(); report_msg_type("Success", "Compilation terminated successfully"); } else { return -1; } cout << "[ End ]" << endl; return 0; }
StringIndexPtr FieldCacheImpl::getStringIndex(IndexReaderPtr reader, const String& field) { return VariantUtils::get< StringIndexPtr >(caches.get(CACHE_STRING_INDEX)->get(reader, newLucene<Entry>(field, ParserPtr()))); }
Collection<String> FieldCacheImpl::getStrings(IndexReaderPtr reader, const String& field) { return VariantUtils::get< Collection<String> >(caches.get(CACHE_STRING)->get(reader, newLucene<Entry>(field, ParserPtr()))); }
FieldCacheRangeFilterPtr FieldCacheRangeFilter::newStringRange(const String& field, const String& lowerVal, const String& upperVal, bool includeLower, bool includeUpper) { return newLucene<FieldCacheRangeFilterString>(field, ParserPtr(), lowerVal, upperVal, includeLower, includeUpper); }