There are 2 kinds of SQL keywords: reserved and non-reserved. Reserved keywords can't be used as identifiers.
In Spark SQL, we are too tolerant about non-reserved keywors. A lot of keywords are non-reserved and sometimes it cause ambiguity (IIRC we hit a problem when improving the INTERVAL syntax).
I think it will be better to just follow other databases or SQL standard to define reserved keywords, so that we don't need to think very hard about how to avoid ambiguity.