I like it!
I think it is a good idea to have bitwise operators in the grammar.
Perhaps they can exist in the grammar and raise errors if the
implementation does not support bitwise arithmetic. Similar comment for
fixnum and flonum arithmetic.
I will note that `||` *is* a valid identifier, it is the empty symbol
equivalent to (string->symbol ""). It could be used for bitwise or.
I think customization would be cool (like with Artyom). One way to do it
would be to make a macro-generating macro that takes the custom infix
operators (and possibly prefix operators, like maybe `sin` in `(expr sin
(2 + 2))`) and outputs a new `expr` macro. Or in a future R7RS-large
version it could be extensible with syntax-case and identifier
properties like in SRFI-262.
If you mention SRFI-261 you should give the library a name for
SRFI-261/97 style named imports. I recommend "expr".
I find the grammar to be pretty straight-forward, although it might be
better to re-write like how the R4RS did expression transformations
(https://standards.scheme.org/official/r4rs.pdf ยง7.3).
Some changes I think would be good:
* "implies" becomes "->".
* "not" becomes "!".
* "<>" then becomes "!=" and "not eqv" becomes "!eqv"
* "eqv" becomes "eqv?"