2009-09-01 84 views
5

我想在两种语言之间编写翻译器,并且在互联网上阅读了一些内容后,我决定和ANTLR一起去。我必须从头学习它,但除了消除左递归的一些麻烦之外,一切都很顺利。ANTLR vs. Happy与其他解析器生成器

但是,今天有人告诉我要检查一下基于Haskell的解析器生成器Happy。我没有Haskell的知识,所以我可以使用一些建议,如果Happy比ANTLR好,并且值得学习。

具体而言,我所关心的是我的翻译人员需要支持宏观替代,我不知道ANTLR该怎么做。也许在快乐这很容易做到?

或者如果认为其他解析器生成器更好,我很乐意听到它们。

+0

如果你能说,你现在可以提供的最有用的信息是回答“什么是源语言和目标语言?” – 2009-09-03 03:09:52

+0

@ 280Z28他们是内部创建的语言。它们有点类似于Java,区别在于类可以包含宏定义,然后在宏需要扩展的方法中。 – Gabriel 2009-09-04 07:04:21

+1

同时我发现我的问题比我最初想象的要简单。我设法在词法分析器中与ANTLR做到这一点,所以现在不需要紧急学习快乐或其他发生器。 – Gabriel 2009-09-04 07:06:52

回答

5

人们一直认为,如果他们只是得到一个语法分析器,他们在构建语言工具时就会得到 。这只是错误的。解析器让你到喜马拉雅山的 然后你需要开始认真攀登。

如果您需要建筑语言翻译的工业级支持,请参阅我们的 DMS Software Reengineering Toolkit。 DMS提供

  • 基于Unicode的词法分析器
  • 全上下文解析器(左递归?没问题!任意超前吗?没问题。不明确的语法吗?没问题)为C,C#
  • 全前端, COBOL,Java和C++,JavaScript的,... (包括完整的预处理器的C和C++)
  • 的AST的自动构建构建符号表的任意范围规则
  • ATTRIB
  • 支持ute语法评估,以构建利用树结构的分析器
  • 支持控制和数据流分析(以及完整的C,Java和COBOL的实现),
  • 源到源转换使用源和目标语言
  • AST到源代码以漂亮的方式,重现目标语言文字

关于OP的请求来处理宏:我们的C,COBOL和C++前端被处理各自的语言预处理)传统的全面扩展方法或b)非扩展(在实际情况下)以实现解析后转换宏的本身。虽然DMS作为基础并没有专门实施宏观处理,但它可以支持其构建和转换。

作为使用DMS构建的翻译器的示例,请参阅 converting JOVIAL to C for the B-2 bomber的讨论。这是100%翻译为> 1 MSLOC硬 实时代码。 [让你知道我们从未被允许看到正在翻译的实际节目(绝密)。是的,JOVIAL有一个预处理器,是的,我们将大部分JOVIAL宏转换为等效的C版本。

[Haskell是一个很酷的编程语言,但它本身并没有这样做。 这不是关于语言中表达的内容。它关于计算需要什么机器来支持操作程序的任务,而花费100人年来构建它。]

+1

@Ira Baxter - 这是个小世界,你离我很远。 :o – 2009-09-03 03:05:24

+0

糟糕,点击“这是一个很棒的评论”上的“向上”按钮。你从我的呃逆中受益。从我的用户注册页面查找我的电子邮件地址并向我发送介绍性说明;在这里可能是一些有趣的谈话。 – 2009-09-03 03:36:05

+1

这太棒了。不过,我认为你在开源社区找不到像这样的东西。 – Gabriel 2009-09-04 07:08:26

相关问题