我想在两种语言之间写一个翻译,经过互联网上的一些阅读后,我决定选择ANTLR.我必须从头学习它,但除了消除左递归的一些麻烦,一切都很好,直到现在.
然而,今天有些人告诉我查看Happy,一个基于Haskell的解析器生成器.我没有Haskell的知识,所以我可以使用一些建议,如果Happy确实比ANTLR好,并且值得学习它.
特别值得关注的是我的翻译需要支持宏替换,我不知道如何在ANTLR中做.也许在快乐中这更容易做到?
或者如果认为其他解析器生成器更好,我会很高兴听到它们.
人们一直认为,如果他们只是得到一个解析器,他们就会在构建语言工具时得到它.那是错的.解析器带你到喜马拉雅山的山麓, 然后你需要认真开始攀登.
如果您需要为构建语言翻译器提供工业级支持,请参阅我们的 DMS软件重组工具包.DMS提供
关于OP处理宏的请求:我们的C,COBOL和C++前端通过a)传统的完全扩展方法或b)非扩展(在可行的情况下)来处理它们各自的语言预处理,以实现宏本身的解析后转换.虽然DMS作为基础并没有专门实现宏处理,但它可以支持它的构建和转换.
作为使用DMS构建的转换器的示例,请参阅将B-2轰炸机的JOVIAL转换为C的讨论 .这是> 1 MSLOC的硬实时代码的100%翻译.[可能会让你知道我们从未被允许看到正在翻译的实际节目(绝密).是的,JOVIAL有一个预处理器,是的,我们将大多数JOVIAL宏转换为等效的C版本.
[Haskell是一种很酷的编程语言,但它本身并没有做这样的事情.这不是关于语言中可表达的内容.它是关于确定需要什么样的机器来支持操作程序的任务,并花费100人年来构建它.