diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 572c9f6665b41ba8b3366a453d97a286a0cffc57..8f6cc63f68a8f519b8a447a67220617a1a8ae42a 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -2556,6 +2556,12 @@ bool Parser::parsePrimaryExpression(ExpressionAST *&node)
     case T_SLOT:
         return parseQtMethod(node);
 
+    case T_AT_STRING_LITERAL:
+    case T_AT_ENCODE:
+    case T_AT_PROTOCOL:
+    case T_AT_SELECTOR:
+        return parseObjCExpression(node);
+
     default: {
         NameAST *name = 0;
         if (parseNameId(name)) {
@@ -2570,6 +2576,30 @@ bool Parser::parsePrimaryExpression(ExpressionAST *&node)
     return false;
 }
 
+bool Parser::parseObjCExpression(ExpressionAST *&node)
+{
+    switch (LA()) {
+    case T_AT_ENCODE:
+        break;
+
+    case T_AT_PROTOCOL:
+        break;
+
+    case T_AT_SELECTOR:
+        break;
+
+    case T_LBRACKET:
+        break;
+
+    case T_AT_STRING_LITERAL:
+        break;
+
+    default:
+        break;
+    } // switch
+    return false;
+}
+
 bool Parser::parseNameId(NameAST *&name)
 {
     unsigned start = cursor();
diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h
index d99d8d27fc0a395344cb6287138d986561b24f13..9a12d7e845ce0a963a8fd20fc4c306c7967c692e 100644
--- a/src/shared/cplusplus/Parser.h
+++ b/src/shared/cplusplus/Parser.h
@@ -211,6 +211,7 @@ public:
     bool parseQtMethod(ExpressionAST *&node);
 
     // ObjC++
+    bool parseObjCExpression(ExpressionAST *&node);
     bool parseObjCClassDeclaration(DeclarationAST *&node);
     bool parseObjCInterface(DeclarationAST *&node,
                             SpecifierAST *attributes = 0);