For the use case outside expressions, the "<" is supposed to be disambiguated by the previous token which is a reserved declarator token ("local" at start of a statement). If there was annotations to use in expressions, we would have then to prefix that notation with a declarator token.
I really don't see the interest of not using a common convention that just uses a single character.
Note that with the addition of the ">", it supposes that there may be parameters after the annotation token (only "toclose", or "const" for now). But I still see a use of such annotations inb expressions, notably for debugging info, optimization hints, floatting point evaluation mode (strict or relaxed mode, signaling or non-signaling NaNs, IEEE rounding mode...), control of parallelism or multithreading (relaxed or strict evaluation order of subexpressions, notably with function calls, or with operands of commutative or associative operations, or for allowing local declaration inside expressions with a limitation of scope (e.g in "(local a=1)+a": where does the scope of a terminates ?)
Controling the scope of "toclose" variables in expressions is also useful, to determine more precisely when the finalizer is allowed to run.
Or may be this can be controled by allowing blocks of instructions to have a return value, by enclosing them in parentheses and using the return statement at end of block, such as:
x = (begin local a = 1; return a end) + 2 --[[ mostly equivalent to x=3 ]].
In that case we can use statement starting with declarators like "local" optionnaly fowllowed by one or more annotations:
x = (begin local <const> a = 1; return a end) + 2 --[[ mostly equivalent to x=3 ]].