diff --git a/lisa-utils/src/main/scala/lisa/utils/Parser.scala b/lisa-utils/src/main/scala/lisa/utils/Parser.scala
index 7b6eda220c7b1141ddb8435289cecf9f3e6c7161..279590a9b4698ec8fcb67ddbaeab8595f56e0fc1 100644
--- a/lisa-utils/src/main/scala/lisa/utils/Parser.scala
+++ b/lisa-utils/src/main/scala/lisa/utils/Parser.scala
@@ -153,6 +153,7 @@ object Parser {
     // TODO: add positions ==> ranges to tokens
     type Position = Unit
 
+    private val allowedIdentifierCharacters = elem(_.isLetter) | elem(_.isDigit) | oneOf("_\\@#$%^&*><:|_+-=")
     private val schematicSymbol = "'"
 
     private val lexer = Lexer(
@@ -174,11 +175,11 @@ object Parser {
       elem(';') |> SemicolonToken,
       elem('⊢') | word("|-") |> SequentToken,
       many1(whiteSpace) |> SpaceToken,
-      word(schematicSymbol) ~ many1(elem(_.isLetter) | elem('_') | elem(_.isDigit) | elem('\'')) |> { cs =>
+      word(schematicSymbol) ~ many1(allowedIdentifierCharacters) |> { cs =>
         // drop the '
         SchematicToken(cs.drop(1).mkString)
       },
-      many1(elem(_.isLetter) | elem('_') | elem(_.isDigit)) |> { cs => ConstantToken(cs.mkString) }
+      many1(allowedIdentifierCharacters) |> { cs => ConstantToken(cs.mkString) }
     ) onError { (cs, _) =>
       throw ParserException(s"Unexpected input: ${cs.mkString}")
     }