问题标签 [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 投票
11 回答
956 浏览

java - 如何将条件链变成更快、更丑的代码?

我有 9 种不同的语法。其中一个将根据它正在解析的文件的第一行 txt 的内容来加载。

我正在考虑将词法分析器/解析器派生到 sep. 类,然后在我得到匹配后立即实例化它们——但不确定这是否会减慢我的速度。我想一些基准测试是有序的。

真的,速度绝对是我的目标,但我知道这是丑陋的代码。

现在代码看起来像这样:

一些澄清

1) 是的,我确实有 9 种不同的语法,我用 antlr 构建,所以它们都有自己的词法分析器/解析器对象。

2) 是的,截至目前,我们正在比较字符串,显然它将被某种整数映射替换。我还考虑将站点标识符粘贴到一个正则表达式中,但是我不相信这会加快任何速度。

3)是的,这是伪代码,所以我不会对这里的语义过于挑剔..

4) kdgregory 指出我无法创建词法分析器/解析器对的一个实例是正确的

我喜欢散列的想法,让代码看起来更好看,但我不认为它会加快我的速度。

0 投票
8 回答
1810 浏览

c++ - 用 C++ 编写的编译器的树解析器

我想找到一个树解析器生成器来帮助我为用 C++ 编写的编译器转换 AST。

经过一些快速研究后,我发现了 ANTLR(可以针对使用 C 而不是 C++)。我还发现一个网站警告不要将 ANTLR 与 C++ 一起使用:http ://www.bearcave.com/software/antlr/antlr_treeparse.html 。这篇文章也有十年的历史了,所以它的抱怨可能已经过时了。

无论如何,我想知道是否有任何替代方案,或者我是否坚持使用 ANTLR 或自己编写?

0 投票
3 回答
1797 浏览

code-generation - ANTLR:可选参数的语法测试(使用 ? 运算符)

我有一个 ANTLR 语法,并且正在用我的语言定义一个允许可选参数的函数。如何检查代码生成块中是否传入了可选参数?

我基本上是在寻找语法来做这个假设的树语法语句:

非常感谢任何有关文档的建议或指针!

0 投票
2 回答
629 浏览

java - ANTLR(field=value),这个怎么表达?

我是一个完全的词法分析器和解析器新手,所以请耐心等待。最终我希望能够表达 LDAP 样式的查询字符串,例如 '(foo=bar)'、'(!foo=bar)'、'(&(foo=bar)(!zip=zap))' 并有一个最后的树,我可以用它来创建实际的数据库查询(或其他)

所以我想从最简单的形式开始,解析 (foo=bar) 和 (!foo=bar) 之类的表达式,但我已经有一些理解问题。我只想表示字段与值之间用'='分隔,但 ANTLR 似乎一次吃掉了所有字符,因为标识符看起来很像一个值。我该怎么做才能防止这种情况发生?

0 投票
6 回答
566 浏览

parsing - 人们用解析器做什么,比如 antlr javacc?

出于好奇,我想知道人们可以用解析器做什么,它们是如何应用的,人们通常用它来创建什么?

我知道它在编程语言行业中被广泛使用,但是我认为这只是其中的一小部分,对吧?

0 投票
1 回答
1326 浏览

antlr - 令牌定义和词法分析器令牌之间的区别

在标记块中定义标记和将标记定义为词法分析器索引有什么区别?

0 投票
4 回答
1372 浏览

java - 解析维基媒体标记 - 基于 EBNF 的解析器是否不适合?

我正在尝试解析(在 Java 中)在 Wikipedia 上找到的 Wikimedia 标记。有许多现有的包可以完成这项任务,但我还没有找到特别适合我需要的包。我用过的最好的包是Mathclipse Bliki 解析器,它在大多数页面上都做得不错。

但是,此解析器不完整,无法解析某些页面或在其他页面上解析不正确。遗憾的是,代码相当混乱,因此修复这个解析引擎中的问题非常耗时且容易出错。

在尝试找到更好的解析引擎时,我研究了使用基于 EBNF 的解析器来完成此任务(特别是 ANTLR)。然而,经过一些尝试,这种方法似乎并不特别适合这项任务,因为 Wikimedia 标记相对宽松,因此不容易适应结构化语法。

然而,我对 ANTLR 和类似解析器的经验非常有限,因此可能是我的经验不足导致了问题,而不是此类解析器天生就不适合这项任务。在这些主题上有更多经验的人可以在这里权衡吗?

@Stobor:我提到过我查看了各种解析引擎,包括谷歌查询返回的解析引擎。到目前为止,我发现最好的是 Bliki 引擎。问题是用这些解析器解决问题变得非常乏味,因为它们本质上都是长链的条件和正则表达式,导致意大利面条代码。我正在寻找更类似于 EBNF 解析方法的方法,因为该方法更清晰、更简洁,因此更易于理解和发展。我看过你发布的 mediawiki 链接,这似乎证实了我的怀疑,即开箱即用的 EBNF 不适合这项任务。因此,我正在寻找一个像 EBNF 一样清晰易懂的解析引擎,但也能够处理 wiki 标记的混乱语法。

0 投票
2 回答
574 浏览

c++ - 如何设置本地测试/构建机器?

我即将开始一个新的个人项目。它的目标是成为一个非常大的,所以我认为保留某种 CVS 是个好主意。我还阅读了很多关于单元测试的有趣的东西,我想包括一些自动构建项目并在每次签入后运行一系列测试的系统。特点是:

  • 只有一名开发人员和一台机器(只有我和我的电脑!)。
  • 包括一个 CVS。
  • 包括自动化测试。
  • 该软件应该是免费的(如免费)并在 Linux 下运行。
  • 它将基于 C++ 和 ANTLR。

到目前为止,我已经为开发设置了 SVN 和 Eclipse+CDT+ANTLR,但我对自动构建+测试设置非常迷茫。要编写我一直在考虑使用 Boost.Test 或 UnitTest++ 的测试。

所以这就是我的问题的来源。我应该如何设置我的本地测试/构建机器?非常欢迎提供有价值教程的链接。

谢谢。

0 投票
2 回答
3516 浏览

whitespace - Antlr 隐藏通道空白问题

我有以下 Antlr 语法:

在 ANTLRWorks 1.2.3 解释器中,输入hi worldhi/**/worldhi /*A*/ world预期工作。

hiworld但是,不应该工作的 input也被接受。我如何使hiworld失败?如何在“hi”和“world”之间强制使用至少一个空格(或注释)?

请注意,我在此示例中仅使用了 MLCOMMENT 和 WHITESPACE 来简化,但也支持其他类型的注释。

0 投票
2 回答
1316 浏览

antlr - 解析 ANTLR AST 时跳过部分树

我正在使用 ANTLR 3 创建一个 AST。我想要两个 AST 分析器,一个用于生产代码,一个用于我们已经拥有的 Eclipse 插件。但是,该插件不需要树中的所有信息。我正在寻找的是一种无需在语法中指定所有分支即可解析树的方法。有没有办法这样做?