Haskell实现Fortran Pretty Printer的开发耗时预估咨询
时间跨度完全取决于你需要覆盖的Fortran语法范围、输出质量要求,结合Haskell的语言特性和同类工具的开发经验,分三档给出参考:
最小可用版本(MVP)
仅覆盖你的DSL转译后实际会用到的Fortran语法子集,输出只要满足语法正确、能被目标Fortran编译器正常编译即可,不需要做风格统一、折行优化、特殊语法兼容。这类版本直接基于你已有的AST做模式匹配,逐节点拼接生成代码字符串,加最基础的缩进状态管理就能实现,预计投入8~20人时。Haskell的ADT模式匹配天生适配这类AST遍历逻辑,没有太高的实现门槛。生产可用版本
覆盖Fortran 77/90/95主流标准的核心语法,输出符合通用Fortran编码规范,自动处理嵌套缩进、行宽折行、续行规则、常量格式化,生成的代码可读性和人工编写的常规代码无明显差异,不会触发主流编译器的语法类警告。这类版本不需要从零写排版底层逻辑,可以直接基于Haskell生态成熟的prettyprinter组合子库搭建核心框架,只需要实现自定义AST到库Doc类型的映射,重点处理Fortran本身的语法特殊规则(比如固定格式源的列限制、老式语法的排版要求、现代Fortran的派生类型/接口/数组切片排版),预计投入40~80人时。全特性高兼容版本
支持Fortran 2003/2008及更新标准的全量语法,兼容主流编译器的常用扩展语法,支持注释保留、自定义格式化规则配置、自由/固定格式双输出、生成代码和原始DSL的位置映射等进阶特性。这类版本的核心打印逻辑占比不高,大部分工作量在边角场景兼容、测试校准、配套功能开发,需要反复对照编译器测试用例调整边界逻辑,预计投入120~200人时。
实操提示:你之前尝试第三方代码生成库未达预期,大概率是通用Fortran工具链的内置AST定义和你自己DSL解析生成的AST结构不匹配导致的,不需要完全从零造排版轮子,直接复用成熟排版库的缩进、折行、组合子能力,仅实现自身AST的映射逻辑即可,相比纯字符串拼接能减少至少30%的开发量,还能自动规避大部分缩进、折行相关的边界bug。
内容的提问来源于stack exchange,提问作者Talmsmen

