问题标签 [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.
antlr - 如何在 ANTLR 中构建一个干净的、类似于 Python 的语法?
天!
如何构建一个简单的 ANTLR 语法来处理多行表达式而不需要分号或反斜杠?
我正在尝试为表达式编写一个简单的 DSL:
总的来说,我希望我的应用程序为脚本提供一些初始命名值并提取最终结果。但是,我对语法很感兴趣。我想支持多行表达式,如下所示:
我从这样的 ANTLR 语法开始:
看起来很简单,但我已经遇到了换行的麻烦:
以图形方式,在 org.antlr.works.IDE 中:
决策可以使用多种选择匹配 NL http://img.skitch.com/20090723-ghpss46833si9f9ebk48x28b82.png
我已经踢了语法,但总是以违反预期行为而告终:
- 文件末尾不需要换行符
- 空行是可以接受的
- 从井号开始的一行中的所有内容都被丢弃为注释
- 作业以换行符结尾,而不是分号
- 如果用括号括起来,表达式可以跨越多行
我可以找到具有许多这些特征的示例 ANTLR 语法。我发现当我削减它们以将它们的表现力限制在我需要的范围内时,我最终会破坏某些东西。其他的太简单了,我在添加表现力的同时打破它们。
我应该从哪个角度来理解这个语法?你能指出任何不是琐碎或完整的图灵完备语言的例子吗?
html - 希望创建输出 HTML 的自定义域特定语言
我正在寻找创建自己的自定义域特定语言来输出 HTML。
基本上,我希望能够使用我自己的标记创建测验,但将其编译/生成为 HTML。例如:
应该输出
我知道 ANTLR 做了类似的事情,但没有 HTML 输出。还有其他建议吗?
c# - 是否有任何好的教程描述如何使用 ANTLR 解析布尔搜索字符串
我需要将关键字和运算符的布尔搜索字符串解析为要从 C# 代码执行的 SQL 查询。我认为我需要像 ANTLR 这样的东西来完成这项任务,但我不知道该怎么做。
有没有关于如何做到这一点的好教程?或者也许我需要一个不同的工具?
我的意思的一个例子如下。我需要的唯一运算符是 AND 和 OR。我也希望能够使用括号。
输入表达式:(蓝色和绿色)或黄色
输出:
SELECT * FROM table WHERE (CONTAINS(Description, "blue") AND CONTAINS(Description, "green")) OR >CONTAINS(Description, "yellow"
如果可能的话,我还想支持隐式 AND 插入。因此,如果未指定任何运算符,则默认运算符为 AND。
输入:绿色(蓝色或黄色)
输出: SELECT * FROM table WHERE CONTAINS(Description, "green") AND (CONTAINS(Description, "blue") OR >CONTAINS(Description, "yellow"))
return-value - 在 ANTLR 中处理多个返回值
我在 ANTLR 中有一个简单的规则:
title_args 为:
尝试编译时,我遇到了标题规则中的 127 错误:title_args is a non-unique reference。
我已经按照本网站中另一个类似问题的解决方案(如何处理 ANTLR 中的列表返回值)但是它似乎只适用于词法规则。
有没有特定的方法可以绕过它?
谢谢你,克里斯托斯
c# - 如何操作 C# AST?
我正在从事一个逆向工程学校项目,该项目需要翻译已编译 C# 项目的操作 AST。我看过关于“将 C# 代码翻译成 AST?”的帖子。在这个网站上,但它看起来不像我要找的那个。
据我所知,目前 C# 没有为 Java 提供类似的库类:http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc。 isv/reference/api/org/eclipse/cdt/core/dom/ast/ASTVisitor.html。如果C#中有这样的库类,这里的一切都解决了。
我已经咨询了某人,这里是可能的解决方案。但是我在制定解决方案时也遇到了问题:
- 找到另一个提供库的编译器,该库允许公开其 AST 以进行操作。但是我找不到这样的编译器。
- 使用 ANTLR Parser Generator 来制作我自己的编译器(这将是一个更加困难和更长的过程)。那里的下载提供了不同语言的示例语法,但不提供 C#(它有用各种语言编写的语法,包括 C#,但不生成 C# 语法)。因此问题是我找不到 C# 语法。
解决此问题的最短和最快方法是什么?如果我真的必须采取上述替代方案之一,我应该如何解决我面临的这些问题。
antlr - 生成代码以更正指定包的目录
我正在使用 ANTLRWorks,并使用 @header 操作指定了我的 java 包:
@header {包 com.xxx.xxx.xxx.compiler}
但是,当我生成java代码时,它是生成到根src目录而不是src/com/xxx/xxx/xxx/compiler。因此,它不能干净地编译。
如何指定正确的目录来生成代码?
.net - .NET 的好的解析器生成器(想想 lex/yacc 或 antlr)?只有构建时间?
.NET 是否有一个好的解析器生成器(想想 lex/yacc 或 antlr)?任何拥有不会吓到律师的执照的人?很多 LGPL,但我正在研究嵌入式组件,一些组织对我采用 LGPL 依赖项感到不舒服。
我听说 Oslo 可能会提供此功能,但我不确定它是构建时间依赖还是运行时依赖。谁能澄清奥斯陆将提供什么?
更新
我真正想要的是一个解析器生成器,它是一个仅构建时间的依赖项。看起来 ANTLR 有一个运行时组件。
parsing - Antlr 树重写规则
我正在尝试解析类似 的表达式a IN [3 .. 5[
,其中尖括号的方向确定区间是包含还是不包含。我希望将其重写为类似 AST
其中 NODE-TYPE 是 BTW_INCLUSIVE、BTW_EXCL_LOWER、BTW_EXCL_UPPER 或 BTW_EXCL_BOTH 之一,具体取决于尖括号的方向。
我有以下解析规则:
这有效,只是它没有创建正确的树节点类型。如何根据匹配的内容选择要创建的节点类型?
c# - 使用 ANTLR 构建自己的 C# 编译器:编译单元
我可以用 compiler_unit_return 类型的 x 做什么来提取它的根、它的类、它的方法等?我必须将其适配器提取出来吗?我怎么做?请注意,compile_unit_return 在我的 CSParser(由 ANTLR 自动生成)中是这样定义的:
但是我得到的树是对象类型。我使用调试器运行,似乎看到它属于 BaseTree 类型。但是BaseTree是一个接口!我不知道它与 BaseTree 有什么关系,也不知道如何从这棵树中提取细节。
我需要编写一个访问者,它访问了它的类、方法、变量等。 ParserRuleReturn 类从 RuleReturnScope 扩展并有一个开始和停止对象,我不知道它是什么。
此外,ANTLR 提供的 TreeVisitor 类看起来令人困惑。它需要一个适配器作为参数传递给它的构造函数(如果没有,它将使用默认的 CommonTreeAdaptor),这就是为什么我询问如何获取适配器早期的原因。还有其他问题。API可以参考http://www.antlr.org/api/CSharp/annotated.html
css - 用 ANTLR 解析 CSS - 边缘情况
我正在尝试使用 ANTLR 解析 CSS,或者至少是基础知识。不过,我的词法分析器规则遇到了一些问题。问题在于 ID 选择器和十六进制颜色值之间的歧义。为了清楚起见,使用简化的语法,考虑以下输入:
以及以下解析器规则:
和这些词法分析器标记:
这不起作用,因为#bbb 被标记为颜色标记,即使它应该是一个选择器。如果我将选择器更改为不以十六进制字符开头,它可以正常工作。我不知道如何解决这个问题。有没有办法告诉 ANTLR 仅将特定标记视为颜色标记(如果它位于某个位置)?比如说,如果它在属性规则中,我可以安全地假设它是一个颜色标记。如果不是,则将其视为选择器。
任何帮助,将不胜感激!
解决方案:原来我试图在语法中做太多事情,我可能应该在使用 AST 的代码中处理。CSS 有太多模棱两可的标记,无法可靠地拆分成不同的标记,所以我现在使用的方法基本上是标记特殊字符,如'#'、'.'、':' 和花括号,并在消费者代码。效果更好,并且更容易处理边缘情况。