cc 和java的最大区别是什么,更好的是ANTLR还是JavaCC?

更好的是ANTLR还是JavaCC?

问题是文档/易学性,日食集成,工具,社区支持和性能(大致顺序)。

Jason asked 2020-07-22T12:34:16Z

8个解决方案

28 votes

您不应该排除其他几种选择:

JParsec是解析器组合器框架,它使您可以完全从代码构造解析器。

Scala的解析器组合器框架解决了类似的问题。 但是,Scala的语法使所有这些都更具可读性。

然后还有John Metsker为他的《用Java构建解析器》一书完成的解析器组合框架。 我不记得图书馆的确切位置,但是过去它至少在Internet上四处飘动。 它也解决了同样的问题:您没有在单独的非Java文件中定义语法和标记定义; 相反,全都是Java。

Fortress,Sun多年来一直在使用的编程语言,现在似乎是建立在以下工具包之上的:Rats。 我没有太多信息,但是我认为如果他们将其用于新的编程语言,它可能具有一些有趣的功能。

总的来说,我的印象是代码生成器的时代已经过去了。 如果我愿意成为您,那么我将使用Scala的解析器组合器工具包。 基本上,任何支持Scala的IDE都“支持”此解析器组合器框架。 AFAICT的性能很好。

顺便说一下,作为Eclipse插件,ANTLR具有相当不错的IDE支持(但也许IntelliJ中还有一些功能-我不记得了。)因此,如果您选择在外部定义词法分析器和解析器的经典方法, 我认为,如果您使用自己的语言,那么ANTLR应该是您的选择。 它在Java开发人员中占有最大的份额,提供工具支持,并且有ANTLR的作者撰写的精彩著作。 我认为其他任何工具包都不能声称这一点。

Wilfred Springer answered 2020-07-22T12:35:57Z

11 votes

关于您提到的问题,我建议JavaCC是一个更好的选择。 对于Java开发人员来说,学习起来更快,更容易(语法与普通Java非常相似),文档全面,并且Eclipse集成足够。

Daniel answered 2020-07-22T12:36:17Z

10 votes

ANTLR具有更全面的功能:它是开箱即用的编译器,包括词法分析,解析,AST,树转换和代码生成。

对于JavaCC,它不是解析器生成器,而是编译器。 AST支持通过另一个名为JJTree的库提供。

jamesh answered 2020-07-22T12:36:41Z

8 votes

大致来说,实际上对您而言最重要的是该符号在您眼中的便捷性和直观性。

话虽如此,我已经完成了ANTLR和JavaCC的项目,并且发现ANTLR在大多数情况下都是非常重要的。

Charlie Martin answered 2020-07-22T12:37:06Z

6 votes

ANTLR与JavaCC相比的一个具体优势是它具有Java以外的其他语言的生成器。 这可能会使将语言移植到其他地方变得更加容易。

SingleNegationElimination answered 2020-07-22T12:37:26Z

4 votes

我在上面第二个果酱。

ANTLR具有更全面的功能: 开箱即用的编译器 编译器-词法分析,解析,AST,树 转换和代码生成。

对于JavaCC,它更多是一个解析器 生成器比编译器编译。 AST支持通过以下方式提供 另一个名为JJTree的库。

根据我的个人经验,您可以使用ANTLR做更多的事情,包括在规则之间以及通过所有子规则传递参数,这在制作复杂的解析器(例如C#解析器)时会很有帮助。 同样,规则重写也是一种经典。 它可以帮助您轻松格式化理想的AST。

但是,它真的很重。 对于一个简单的项目,您可能永远不会使用这些功能。 Javacc更酷。

Winston Chen answered 2020-07-22T12:38:04Z

2 votes

我已经有一段时间没有使用解析器生成器了,但是几年前当我对它们感兴趣时,我记得最喜欢SableCC。 它在面向对象的解析器生成方面实现了一些有趣的想法,这些想法可能已经或可能没有被备选方案所接受。

Suppressingfire answered 2020-07-22T12:38:24Z

2 votes

我用SableCC为Maple或MuPAD等CAS语言编写了一个编译器,将其转换为单一语言为Maxima(用于CAS能力)和LaTeX(用于显示)。 SableCC的AST是严格的面向对象,很容易扩展它以生成差异语言。 如果你想要将一种语言编译为多种其他语言,只需尝试一下即可。

verylazyboy answered 2020-07-22T12:38:44Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值