Support escaping inm grammar rules

Change-Id: I87e01605be27f165cfb4eaee69315c312e51f326
diff --git a/parser/grammar_parser_test.go b/parser/grammar_parser_test.go
index f7fefc9..c6f96d1 100644
--- a/parser/grammar_parser_test.go
+++ b/parser/grammar_parser_test.go
@@ -67,6 +67,28 @@
 				},
 			},
 		},
+		{
+			name:           "Special symbol",
+			input:          "[$\\(]",
+			defaultFoundry: "opennlp",
+			defaultLayer:   "p",
+			expected: &SimpleTerm{
+				SimpleKey: &KeyTerm{
+					Key: "$(",
+				},
+			},
+		},
+		{
+			name:           "Multiple escaped characters",
+			input:          "[\\&\\|\\=]",
+			defaultFoundry: "opennlp",
+			defaultLayer:   "p",
+			expected: &SimpleTerm{
+				SimpleKey: &KeyTerm{
+					Key: "&|=",
+				},
+			},
+		},
 	}
 
 	for _, tt := range tests {
@@ -81,6 +103,12 @@
 			}
 			require.NoError(t, err)
 			require.NotNil(t, grammar.Token, "Expected token expression")
+
+			// For testing purposes, unescape the key in the simple term
+			if grammar.Token.Expr.First.Simple.SimpleKey != nil {
+				grammar.Token.Expr.First.Simple.SimpleKey.Key = unescapeString(grammar.Token.Expr.First.Simple.SimpleKey.Key)
+			}
+
 			assert.Equal(t, tt.expected, grammar.Token.Expr.First.Simple)
 		})
 	}