diff --git a/src/language/PEGGrammar.hpp b/src/language/PEGGrammar.hpp
index 60f23afd6bb5144ae6111f024d0b52c0eee3ea74..56a650baa1dcd24687d99e61c920d6d547081fb1 100644
--- a/src/language/PEGGrammar.hpp
+++ b/src/language/PEGGrammar.hpp
@@ -148,12 +148,12 @@ struct postfix_expression : seq< primary_expression, star<postfix_operator> > {}
 struct unary_expression : sor< seq< unary_operator, unary_expression >,
                                postfix_expression > {};
 
-struct and_op : seq< sor<TAO_PEGTL_STRING("&&"), and_kw>, ignored > {};
-struct or_op : seq< sor<TAO_PEGTL_STRING("||"), or_kw>, ignored > {};
+struct and_op : seq< and_kw, ignored > {};
+struct or_op : seq< or_kw, ignored > {};
 
-struct xor_op : seq< sor< one< '^' >, xor_kw>, ignored >{};
-struct bitand_op : seq< sor< seq< one< '&' >, not_at< one< '&' > > >, bitand_kw>, ignored >{};
-struct bitor_op : seq< sor< seq< one< '|' >, not_at< one< '|' > > >, bitor_kw>, ignored >{};
+struct xor_op : seq< xor_kw, ignored >{};
+struct bitand_op : seq< bitand_kw, ignored >{};
+struct bitor_op : seq< bitor_kw, ignored >{};
 
 struct eqeq_op : seq< TAO_PEGTL_STRING("=="), ignored > {};
 struct not_eq_op : seq< TAO_PEGTL_STRING("!="), ignored > {};
diff --git a/tests/test_ASTBuilder.cpp b/tests/test_ASTBuilder.cpp
index 56d39839572e197c7ac03f27eeeb46fa58c8ebd6..8807bfc6817d58444be3ae3dc8863a065a06853a 100644
--- a/tests/test_ASTBuilder.cpp
+++ b/tests/test_ASTBuilder.cpp
@@ -165,7 +165,7 @@ string s; s = "foo";
       SECTION("all operators mix")
       {
         std::string_view data = R"(
-1+2 and 3<= 2 * 4 - 1 == 2 or 2>=1 / 5 ^ 6 & 7 && 2 || 1 | 2 <3 >7 xor -2 bitand 2 bitor + true - not false;
+1+2 and 3<= 2 * 4 - 1 == 2 or 2>=1 / 5 xor 6 bitand 7 and 2 or 1 bitor 2 <3 >7 xor -2 bitand 2 bitor + true - not false;
 )";
 
         std::string_view result = R"(