问题标签 [antlr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
880 浏览

regex - RegEx 或 Antlr,应该选择哪一个?

我们一直在使用正则表达式来满足我们的语法要求。然而,大约有 20 多种模式需要支持,当模式开始变得递归时,维护 RegEx 变得非常困难。我们尝试迁移到 ANTLR,并查看了我们需要的以下两个关键点。

性能 迁移某些表达式时,性能似乎是一个问题。对于某些表达式,带有已编译程序集的 RegEx 大约快 2 倍或 3 倍。

可管理性 ANTLR 语法似乎更容易管理和开发。容纳新的表达式/结构比 RegEx 简单得多。

有没有人有类似的迁移经历。我们应该看看它还是使用 RegEx?

0 投票
3 回答
3504 浏览

.net - Is it possible to successfully merge transitive assembly references with ILMerge?

I'm trying to use ILMerge to internalize some transitively referenced assemblies into an assembly I'm referencing to eliminate conflicts with those transitive dependencies elsehwere in my project.

In particular, I'm referencing Antlr3.StringTemplate (hereafter referred to as AS, available here: http://www.stringtemplate.org/download.html). It references Antlr3.Runtime.Debug (ARD) and Antlr3.Runtime (AR). ARD itself also references AR. In ASCII-art, that's:

Because another assembly I'm using, NHibernate 2.1, depends on different, incompatible version of AR, I wanted to use ILMerge to merge and internalize AR into AS. In theory, I think this should work; however, I'm having trouble executing the theory.

No matter what permutations and options I try, I end up with an error of the following form:

ILMerge.Merge: The assembly 'Antlr3.Runtime.Debug' was not merged in correctly. It is still listed as an external reference in the target assembly.

Is what I'm trying to accomplish with ILMerge even possible?

0 投票
1 回答
3867 浏览

parsing - ANTLR vs. Happy vs. 其他解析器生成器

我想写一个两种语言之间的翻译器,在互联网上阅读了一些内容后,我决定使用 ANTLR。我不得不从头开始学习它,但除了消除左递归的一些麻烦之外,到目前为止一切都很好。

然而,今天有人告诉我去看看 Happy,一个基于 Haskell 的解析器生成器。我没有 Haskell 知识,所以我可以使用一些建议,如果 Happy 确实比 ANTLR 更好并且值得学习的话。

具体来说,我担心的是我的翻译器需要支持宏替换,我还不知道如何在 ANTLR 中做到这一点。也许在Happy中这更容易做到?

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

0 投票
3 回答
1422 浏览

error-handling - 规则失败时强制 antlr3 立即退出

我有这样的规则:

RuntimeObject不幸的是,它在构造函数中抛出异常,因为$label.text它是 null。检查调试输出和其他一些事情表明与“标签”的匹配实际上失败了,但 Antlr 运行时“有用地”继续匹配以提供更有用的错误消息(http://www.antlr.org /blog/antlr3/error.handling.tml)。

好的,我可以看到这在某些情况下是如何有用的,但是我怎样才能告诉 Antlr 停止这样做呢?v2的defaultErrorHandler=false选项似乎消失了。

0 投票
2 回答
3145 浏览

parsing - 如何为类似 JSP/ASP/PHP 的语言编写 ANTLR 解析器?

我是解析器生成器的新手,我想知道 JSP/ASP/PHP 等嵌入式语言的 ANTLR 语法可能是什么样子,但不幸的是,ANTLR 站点不提供任何此类语法文件。

更准确地说,我不知道如何定义一个匹配所有内容的 AnyText 标记(包括在代码块之外没有任何意义的关键字)并且仍然能够在块内正确识别它们。

例如,以下片段应标记为:AnyText、BlockBegin、Keyword、BlockEnd、AnyText。

也许还有另一个更适合我需要的解析器生成器。到目前为止,我只尝试过 ANTLR,因为它在 stackoverflow 上非常受欢迎:)

提前谢谢了!

0 投票
1 回答
229 浏览

parsing - 如何在 ANTLR 中“减去”词法分析器规则?

假设我有两个规则,如下所示:

现在假设我想制定一个名为printable_no_newlines. 我想通过这样减去来做到这newline_characters一点printable_characters

该语法在 ANTLR3 中不起作用,但有谁知道在不重新输入整个规则的情况下模拟它的最佳方法是什么?

0 投票
2 回答
8875 浏览

compiler-construction - ANTLR 运算符优先级

ANTLR 中如何实现运算符优先级?

我目前正在使用 XText/Antlr 包。

编辑:

我做了 sepp2k 建议的操作,运算符优先级现在可以使用,但是像 3 +* 这样的东西现在也可以使用。操作员基本上是“掉入”树中。

另外,我在 ANTLR 的网站上尝试了 C 语法,在 ANTLRworks 中也发生了同样的事情。

有谁知道是什么问题?

0 投票
1 回答
221 浏览

antlr - ANTLR 递归歧义问题

在上述情况下,“或”可以通过

表达式->BINARYOP

或者

表达式->一元运算->表达式->二进制运算

是否有系统的方法来消除上述歧义?

0 投票
3 回答
8389 浏览

antlr - ANTLR 表达式语法

我正在尝试实现表达式处理语法(处理嵌套括号和东西)。到目前为止,我有以下内容,但他们无法处理某些情况(成功/失败情况出现在以下代码块之后)。有谁知道发生了什么?

注意:varname +=varname = stuff 只是 XText 中一些额外的 AST 生成助手。暂时不用担心他们。

这是解析/失败的列表:

0 投票
2 回答
1344 浏览

maven-2 - 如何使用 maven-gunit-plugin 生成 JUnit 源

我已将 maven 配置为通过maven-gunit-plugin运行gunit(一个 ANTLR 语法单元测试工具)。然而,gunit 有两种不同的模式。第一种模式使 gunit 充当解释器,读取 *.gunit(或 *.testsuite)文件,解释它并显示结果。可以这样配置:

第二种模式使 gunit 生成可以由 JUnit 运行的源代码。如何指示 maven-gunit-plugin 生成 JUnit 源而不是充当解释器?

几点注意事项:

  • 我可以将测试阶段更改为“生成测试源”以使 maven 插件在正确的时间运行。
  • 我在 maven-gunit-plugin 上找不到任何有用的文档
  • 我见过人们使用exec-maven-plugin来运行带有特定命令行选项的 gunit,但我不打算这样做。

编辑/解决方案:

在阅读了各种回复后,我下载了 ANTLR 源代码,其中包括 maven-gunit-plugin。该插件不支持junit生成。事实证明,gunit-maven-plugin 的 codehaus 快照和 exec 插件是目前唯一的选择。