diff --git a/cgrep.cabal b/cgrep.cabal
--- a/cgrep.cabal
+++ b/cgrep.cabal
@@ -1,7 +1,7 @@
 Cabal-version:       2.2
 Name:                cgrep
 Description:         Cgrep: a context-aware grep for source codes
-Version:             8.0.0
+Version:             8.1.0
 Synopsis:            Command line tool
 Homepage:            http://awgn.github.io/cgrep/
 License:             GPL-2.0-or-later
diff --git a/src/CGrep/Parser/Token.hs b/src/CGrep/Parser/Token.hs
--- a/src/CGrep/Parser/Token.hs
+++ b/src/CGrep/Parser/Token.hs
@@ -386,7 +386,9 @@
 buildFilteredToken :: TokenFilter -> (C.ByteString -> Offset -> Token) -> TokenIdx -> C.ByteString -> Token
 buildFilteredToken tf f (TokenIdx start len) txt =
     let t = f (subByteString start len txt) (fromIntegral start)
-        in if filterToken tf t then t else unspecifiedToken
+        in if filterToken tf t
+            then t
+            else unspecifiedToken
 {-# INLINE buildFilteredToken #-}
 
 
@@ -395,22 +397,12 @@
 buildToken False f (TokenIdx start len) txt = unspecifiedToken
 {-# INLINE buildToken #-}
 
-
 buildToken_ :: Bool -> Bool -> Bool -> (C.ByteString -> Offset -> Token) -> TokenIdx -> C.ByteString -> Token
-buildToken_ True  True True  f (TokenIdx start len) txt = f (subByteString start len txt) (fromIntegral start)
-buildToken_ True False False f (TokenIdx start len) txt = let t = f (subByteString start len txt) (fromIntegral start) in
-    if isTokenIdentifier t
-        then t
-        else unspecifiedToken
-buildToken_ False True False f (TokenIdx start len) txt = let t = f (subByteString start len txt) (fromIntegral start) in
-    if isTokenKeyword t
-        then t
-        else unspecifiedToken
-buildToken_ False False True f (TokenIdx start len) txt = let t = f (subByteString start len txt) (fromIntegral start) in
-    if isTokenNativeType t
-        then t
-        else unspecifiedToken
-buildToken_ _ _ _ f (TokenIdx start len) txt = unspecifiedToken
+buildToken_ i k t f (TokenIdx start len) txt =
+    if i && isTokenIdentifier tok || k && isTokenKeyword tok || t && isTokenNativeType tok
+          then tok
+          else unspecifiedToken
+    where tok = f (subByteString start len txt) (fromIntegral start)
 
 
 subByteString :: Int -> Int -> C.ByteString -> C.ByteString
