Our policy is that we only provide technical support for the latest version of the tool. That is the version that you can download at https://javacc.com/download/javacc-full.jar.
Alternatively, your own build is fine as long as it is built from the latest version of the code, e.g. your jarfile is the result of:
git clone https://github.com/javacc21/javacc21.git cd javacc21 ant full-jar
Of course, the jarfile you get that way will typically be not very different (if at all) from the pre-built one you can directly download. However, in some cases, it will be an even somewhat more advanced version of the code, so obviously, we are interested in any feedback based on that. So that is fine too!
The point is that there is no support for older versions. This project simply has no concept of a stable version vs. a development version or any of that.
There is also a strong expectation (though it's not an absolute requirement) that if you want technical support, you will make a good faith effort to use the latest JavaCC 21 features and syntax in your grammars. That is because this is how new features get battle tested in the real world. (Duh…)
In our view, this should not be considered onerous because, in the cases where you have a choice of expressing whatever construct in your grammar using legacy syntax, or using the newer features, you will pretty much invariably be better off using the newer features. So, using the latest feature set is helpful to us, and you will be better off also. (In other words, it is win-win!)