I have finally finished the grammar (and LALR(1) parser) for language X! The final version is here: Grammar
I have managed to change the syntax for static initializers back to how it was originally (without the class name).
There will probably still be small changes, since I’m not sure exactly how the tokenizer will work, and it will be difficult to tell the difference between a version number (integers separated by dots) and a floating point number. But apart from that, I have now written a full grammar for this programming language.
The next thing to do is to write a tokenizer, and after that work can start on the rest of the compiler. It will eventually compile down to LLVM bitcode as an intermediary to native code; this will allow it to run anywhere LLVM can, without any machine-specific code generation or optimization in the compiler.
However, semantic analysis of the code will have to be done before this, and the code needs to go through at least one more intermediary representation before it can be converted to LLVM bitcode, so (unless you want to help work on it) you can expect the project to take a while.