// =============================================== // type-name: type-specifier // | type-specifier declarator // ; // =============================================== bool ParsedDeclaration::parseDeclaration() { std::cout << __FUNCTION__ << std::endl; bool errorCondition = parseTypeSpecifier(); if ( !errorCondition ) { Token::e token = lexer.getToken(); if ((token == Token::Asterisk) || (token == Token::Identifier ) || (token == Token::LeftParen ) || (token == Token::LeftBracket)) { errorCondition = parseDeclarator(); } if (lexer.matchToken(Token::EndOfFile) == Token::Error) { errorCondition = true; } } return errorCondition; }
void CppTree2Uml::parseSimpleDeclaration(SimpleDeclarationAST* ast) { TypeSpecifierAST* typeSpec = ast->typeSpec(); InitDeclaratorListAST* declarators = ast->initDeclaratorList(); GroupAST* storageSpec = ast->storageSpecifier(); if (storageSpec && storageSpec->text() == QLatin1String("friend")) return; m_comment = ast->comment(); if (typeSpec) parseTypeSpecifier(typeSpec); if (declarators){ QList<InitDeclaratorAST*> l = declarators->initDeclaratorList(); for (int i = 0; i < l.size(); ++i) { parseDeclaration2(ast->functionSpecifier(), ast->storageSpecifier(), typeSpec, l.at(i)); } } }