编译器前端实现