Combining LLM Code Generation with Formal Specifications and Reactive Program Synthesis