About expressions the hardest part (imo) is parsing and generating code for conditionals like "if(a || b && c)" etc where you need to generate compare-and-branch code. There are many good books on the topic of compiler construction, I found lots of good examples in this one.

Generating native code with register allocation is another topic that is very advanced. There is the alternate path that Adobe has chosen which is to work with LLVM instead and let it generate high quality code for several different architectures.

You should publish examples of the timings you talk about because it can gather interest to your compiler if it actually does perform better than a C-compiler. Frankly I doubt it but I hold my judgment until I see it

Looks like an interesting project, good luck with it!