问题标签 [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 回答
2637 浏览

antlr - 假人的 ANTLR 和 DSL 解析:空白处理

我正在尝试开发一个用于软件配置的迷你 DSL,使用 antlworks 进行原型设计。典型的来源如下所示:

现在,我从来没有上过关于解析的正式课程,所以我通过 antlworks 的试错和一些 BNF 语法的基础知识来完成所有这些工作。我经常遇到的一个问题是空格和换行符处理。我定义了类似的东西

但是空格处理非常有问题,它在各种情况下都会中断。这样做的标准方法是什么?是否有任何资源可以快速学习这种东西(比如在 antlr 中构建一个带有条件和变量的计算器——我发现的 antlr 语法要么是简单的语言,要么是成熟的语言)。

0 投票
1 回答
9091 浏览

java - Java 正则表达式语法的 ANTLR 语法

我目前正在研究正则表达式的测试框架,我需要能够将 Java 正则表达式解析为 AST,以便能够生成与给定正则表达式匹配的示例字符串。

我查看了 的实现,java.util.regex.Pattern但代码看起来相当笨拙(我想强调的是速度而不是可读性),所以我决定使用 ANTLR 从头开始​​编写正则表达式解析器。

在我开始抨击自己之前,我想知道是否有人知道正则表达式的现成 ANTLR 语法。

0 投票
2 回答
5060 浏览

return-value - 如何处理 ANTLR 中的列表返回值

在 ANTLR 中解决此问题的正确方法是什么:

我有一个简单的语法规则,比如一个包含任意数量元素的列表。

如果我想为列表分配一个返回值,并且该值是生产中返回值的实际列表,那么正确的方法是什么?我正在娱乐的替代方案是:

  • 在全局范围内创建我自己的堆栈以跟踪这些列表
  • 尝试检查我下面的树节点并以这种方式提取信息
  • 以某种巧妙而酷炫的方式访问它,我希望能找到我可以从与规则相关联的操作中轻松访问此类列表的方法。

我想问题是:酷孩子是怎么做到的?

(仅供参考,我正在使用 ANTLR 的 python API,但如果你用另一种语言打我,我可以处理)

0 投票
7 回答
5500 浏览

c++ - ANTLR 解析器生成器最适合内存受限的 C++ 应用程序吗?

我正在寻找一个好的解析器生成器,可用于在我们的大型商业应用程序中读取自定义文本文件格式。目前,这种特定的文件格式是使用手工递归解析器读取的,但格式已经增长和复杂化,以至于这种方法变得无法管理。

似乎最终的解决方案是为这种格式构建一个适当的语法,然后使用像 yacc 这样的真正的解析器生成器来读取它,但我无法决定使用哪个这样的生成器,或者即使它们值得麻烦一点也不。我看过 ANTLR 和 Spirit,但我们的项目有超出早期答案的特定限制,这让我想知道它们是否适合我们。特别是,我需要:

  • 使用 MSVC 生成 C 或 C++ 代码的解析器。ANTLR 3 不支持 C++;它声称可以生成直接的 C,但是关于让它实际工作的文档有点令人困惑。
  • 严重限制内存使用。在我们的应用程序中,内存非常宝贵,即使是微小的泄漏也是致命的。我需要能够覆盖解析器的内存分配器以使用我们的自定义 malloc(),或者至少我需要给它一个连续的池,它从中提取所有内存(并且我可以在之后解除分配整体)。我可以为解析器可执行文件本身腾出大约 200kb 的空间,但是它在解析中分配的任何动态堆都必须在之后被释放。
  • 很好的表现。这不太重要,但我们应该能够在 3ghz 处理器上在一秒钟内解析 100kb 的文本。
  • 必须是无 GPL 的。我们不能使用 GNU 代码。

我喜欢 ANTLRworks 的 IDE 和调试工具,但看起来让它的 C 目标真正与我们的应用程序一起工作将是一项艰巨的任务。在我开始讨论之前,ANTLR 是适合这项工作的工具吗?

有问题的文本格式类似于:

0 投票
4 回答
368 浏览

antlr - 编写模板语言/VewEngine

除了完成任何真正的工作外,我还很痒。我的渴望是编写一个视图引擎,它可以从另一种语言(模板工具包/Perl)中紧密模仿模板系统。如果我有时间/做它来学习一些新的项目,这就是其中之一。

我花了一些时间研究 CoCo/R 和 ANTLR,老实说,这让我很头疼,但是一些 CoCo/R 正在陷入困境。不幸的是,大多数示例都是关于创建一个读取源代码的编译器,但没有一个似乎涵盖了如何为模板创建处理器。

是的,这些是相同的,但我无法理解如何为模板定义语言,其中大部分源代码是 html,而不是解析和运行的实际代码。

这种事情有没有好的初学者资源?我在 Spark 上做了一个 ganer,它似乎在 repo 中没有语法。

也许这太过分了,人们可以在文件中用 c# 测试替换模板语法并编译它。http://msdn.microsoft.com/en-us/magazine/cc136756.aspx#S2

如果你在我的鞋子里并且不是语言创造专家,你会从哪里开始?

0 投票
7 回答
105003 浏览

c# - 如何将字符串转换为其等效的 LINQ 表达式树?

这是原始问题的简化版本。

我有一个名为 Person 的类:

...让我们说一个例子:

我想在我最喜欢的文本编辑器中将以下内容写成字符串......

我想获取这个字符串和我的对象实例并评估 TRUE 或 FALSE - 即在对象实例上评估 Func<Person, bool>。

以下是我目前的想法:

  1. 在 ANTLR 中实现基本语法以支持基本的比较和逻辑运算符。我正在考虑在此处复制 Visual Basic 优先级和一些功能集:http: //msdn.microsoft.com/en-us/library/fw84t893 (VS.80).aspx
  2. 让 ANTLR 从提供的字符串创建合适的 AST。
  3. 走 AST 并使用Predicate Builder框架动态创建 Func<Person, bool>
  4. 根据需要根据 Person 的实例评估谓词

我的问题是我完全烤过头了吗?有什么选择吗?


编辑:选择的解决方案

我决定使用动态 Linq 库,特别是 LINQSamples 中提供的动态查询类。

下面的代码:

结果是 System.Boolean 类型,在本例中为 TRUE。

非常感谢 Marc Gravell。

包括System.Linq.Dynamic nuget 包,此处的文档

0 投票
1 回答
810 浏览

java - 在 ANTLR 2.7 中构建 C# 示例需要帮助

我需要构建 ANTLR v 2.7.7 附带的 CSHARP V1 示例。

命令:
D:\Comp\antlr\examples\csharp\csharp_v1>nant

我得到以下输出:

D:\Comp\antlr\examples\csharp\csharp_v1>D:\Comp\nant\bin\nant NAnt 0.85 (Build 0.85.2478.0; release; 10/14/2006) Copyright (C) 2001-2006 Gerry Shaw http://nant.sourceforge.net

Buildfile: file:///D:/Comp/antlr/examples/csharp/csharp_v1/csharp_v1.build Target framework: Microsoft .NET Framework 2.0 Target(s) specified: test

[tstamp] Monday, May 11, 2009 11:21:20 PM. [echo] Building project: 'CSharp v1 Grammar Sample for ANTLR' generate: [exec] java.lang.NoClassDefFoundError: antlr/Tool [exec] Caused by: java.lang.ClassNotFoundException: antlr.Tool [exec] at java.net.URLClassLoader$1.run(Unknown Source) [exec] at java.security.AccessController.doPrivileged(Native Method) [exec] at java.net.URLClassLoader.findClass(Unknown Source) [exec] at java.lang.ClassLoader.loadClass(Unknown Source) [exec] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) [exec] at java.lang.ClassLoader.loadClass(Unknown Source) [exec] at java.lang.ClassLoader.loadClassInternal(Unknown Source) [exec] Could not find the main class: antlr.Tool. Program will exit. [exec] Exception in thread "main"

BUILD FAILED - 0 non-fatal error(s), 11 warning(s)

D:\Comp\antlr\examples\csharp\csharp_v1\csharp_v1.build(52,10): External Program Failed: java.exe (return code was 1)

Total time: 0.2 seconds.

我让 nANT 在其他版本中正常工作。

我不是 java 人...任何帮助都会有所帮助。

亲切的问候,

0 投票
1 回答
435 浏览

antlr - ANTLR 相当于野牛 REJECT 动作?

我正在尝试解析一个Name=Value对列表,其中值可以包含除空格以外的任何内容(即值可以包含等号)。
该名称仅限于通常的标识符字符。

问题是,“价值”标记匹配一切。例如,对于输入:

解析器会将整个输入与“值”标记匹配(并抛出一个MismatchedTokenException)。

bison中,有可能将状态分配给标记(或者这只是用于非终结符?),以便它们只有在显式转换到该状态后才变得“有资格”进行匹配。

编辑考虑一下,这在野牛中也不起作用-令牌拆分已经发生(在flex中);但是,我认为有一种方法可以REJECT标记,迫使flex尝试次优匹配。

这是我的 ANTLR 语法。

0 投票
1 回答
554 浏览

parsing - ANTLR:在也可以使用其他数字文字时解析 2 位数字

我正在为中等大小的语言编写语法,并且正在尝试实现形式的时间文字hh:mm:ss

但是,每当我尝试解析时,例如,12:34:56timeLiteral都会在数字上得到不匹配的令牌异常。有谁知道我可能做错了什么?

以下是当前定义的相关规则:

0 投票
4 回答
11462 浏览

c# - 在 C# 中行走 ANTLR AST 的教程?

有人知道在 C# 中使用 ANTLR 生成的 AST 的教程吗?我能找到的最接近的是this,但它并不是很有帮助。

我的目标是遍历基于我正在研究的领域特定语言生成的树,并使用这些树来输出生成的 C# 代码。

基于 Java 的教程也会有所帮助——任何提供如何遍历 ANTLR AST 的清晰示例的内容。