1) It means the parser can't be executed concurrently, and it might leave non-initialized state behind.
2) It makes it harder to follow the code: static fields might create unexpected couplings.
It would be better to move the relevant state to the instance fields.
The same goes for org.javacc.parser.Options (which is fully static) and so on.
For instance,
org.javacc.parser.Main#mainProgram
starts withhttps://github.com/javacc/javacc/blob/ac4941edb86297408833b0de796b4e9962769845/src/main/java/org/javacc/parser/Main.java#L163-L166
1) It means the parser can't be executed concurrently, and it might leave non-initialized state behind. 2) It makes it harder to follow the code: static fields might create unexpected couplings.
It would be better to move the relevant state to the instance fields.
The same goes for
org.javacc.parser.Options
(which is fully static) and so on.