diff --git a/lib/command.c b/lib/command.c
index 922e7b5..c70391d 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -506,15 +506,7 @@
 
   token = XCALLOC(MTYPE_CMD_TOKENS, sizeof(*token));
   token->type = TOKEN_TERMINAL;
-  if (cmd[0] == '[')
-    token->terminal = TERMINAL_OPTION;
-  else if ((cmd[0] >= 'A' && cmd[0] <= 'Z') || (cmd[0] == '<'))
-    token->terminal = TERMINAL_VARIABLE;
-  else if (cmd[0] == '.')
-    token->terminal = TERMINAL_VARARG;
-  else if (cmd[0] == '<')
-    token->terminal = TERMINAL_RANGE;
-  else if (strcmp (cmd, "A.B.C.D") == 0)
+  if (strcmp (cmd, "A.B.C.D") == 0)
     token->terminal = TERMINAL_IPV4;
   else if (strcmp (cmd, "A.B.C.D/M") == 0)
     token->terminal = TERMINAL_IPV4_PREFIX;
@@ -522,6 +514,14 @@
     token->terminal = TERMINAL_IPV6;
   else if (strcmp (cmd, "X:X::X:X/M") == 0)
     token->terminal = TERMINAL_IPV6_PREFIX;
+  else if (cmd[0] == '[')
+    token->terminal = TERMINAL_OPTION;
+  else if (cmd[0] == '.')
+    token->terminal = TERMINAL_VARARG;
+  else if (cmd[0] == '<')
+    token->terminal = TERMINAL_RANGE;
+  else if (cmd[0] >= 'A' && cmd[0] <= 'Z')
+    token->terminal = TERMINAL_VARIABLE;
   else
     token->terminal = TERMINAL_LITERAL;
 
@@ -1341,9 +1341,7 @@
 
   /* We have to record the input word as argument if it matched
    * against a variable. */
-  if (token->terminal == TERMINAL_VARARG
-      || token->terminal == TERMINAL_VARIABLE
-      || token->terminal == TERMINAL_OPTION)
+  if (TERMINAL_RECORD (token->terminal))
     {
       if (push_argument(argc, argv, word))
         return MATCHER_EXCEED_ARGC_MAX;
@@ -1585,9 +1583,7 @@
                 {
                   word_token = vector_slot(keyword_vector, j);
                   if ((word_token->type == TOKEN_TERMINAL
-                       && (word_token->terminal == TERMINAL_VARARG
-                           || word_token->terminal == TERMINAL_VARIABLE
-                           || word_token->terminal == TERMINAL_OPTION))
+                       && TERMINAL_RECORD (word_token->terminal))
                       || word_token->type == TOKEN_MULTIPLE)
                     {
                       if (push_argument(argc, argv, NULL))
@@ -1873,14 +1869,12 @@
 	      switch (type)
 		{
 		case exact_match:
-		  if (!(cmd_token->terminal == TERMINAL_OPTION
-                        || cmd_token->terminal == TERMINAL_VARIABLE)
+		  if (!TERMINAL_RECORD (cmd_token->terminal)
 		      && strcmp (command, str) == 0)
 		    match++;
 		  break;
 		case partly_match:
-		  if (!(cmd_token->terminal == TERMINAL_OPTION
-                        || cmd_token->terminal == TERMINAL_VARIABLE)
+		  if (!TERMINAL_RECORD (cmd_token->terminal)
 		      && strncmp (command, str, strlen (command)) == 0)
 		    {
 		      if (matched && strcmp (matched, str) != 0)
@@ -1929,8 +1923,7 @@
 		    }
 		  break;
 		case extend_match:
-		  if (cmd_token->terminal == TERMINAL_OPTION
-                      || cmd_token->terminal == TERMINAL_VARIABLE)
+		  if (TERMINAL_RECORD (cmd_token->terminal))
 		    match++;
 		  break;
 		case no_match:
@@ -1951,18 +1944,8 @@
   const char *dst = token->cmd;
 
   /* Skip variable arguments. */
-  switch (token->terminal)
-    {
-      case TERMINAL_OPTION:
-      case TERMINAL_VARIABLE:
-      case TERMINAL_VARARG:
-      case TERMINAL_IPV4:
-      case TERMINAL_IPV4_PREFIX:
-      case TERMINAL_RANGE:
-        return NULL;
-      default:
-        break;
-    }
+  if (TERMINAL_RECORD (token->terminal))
+    return NULL;
 
   /* In case of 'command \t', given src is NULL string. */
   if (src == NULL)
diff --git a/lib/command.h b/lib/command.h
index 3a95df9..a36a524 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -165,6 +165,9 @@
   TERMINAL_IPV6_PREFIX,
 };
 
+/* argument to be recorded on argv[] if it's not a literal */
+#define TERMINAL_RECORD(t) ((t) >= TERMINAL_OPTION)
+
 /* Command description structure. */
 struct cmd_token
 {
