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的库。
eclipse哪个版本好根据我的个⼈经验,您可以使⽤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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论