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;
}
Esempio n. 2
0
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);
 }