问题标签 [abstract-syntax-tree]
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 - 编写模板语言/VewEngine
除了完成任何真正的工作外,我还很痒。我的渴望是编写一个视图引擎,它可以从另一种语言(模板工具包/Perl)中紧密模仿模板系统。如果我有时间/做它来学习一些新的项目,这就是其中之一。
我花了一些时间研究 CoCo/R 和 ANTLR,老实说,这让我很头疼,但是一些 CoCo/R 正在陷入困境。不幸的是,大多数示例都是关于创建一个读取源代码的编译器,但没有一个似乎涵盖了如何为模板创建处理器。
是的,这些是相同的,但我无法理解如何为模板定义语言,其中大部分源代码是 html,而不是解析和运行的实际代码。
这种事情有没有好的初学者资源?我在 Spark 上做了一个 ganer,它似乎在 repo 中没有语法。
也许这太过分了,人们可以在文件中用 c# 测试替换模板语法并编译它。http://msdn.microsoft.com/en-us/magazine/cc136756.aspx#S2
如果你在我的鞋子里并且不是语言创造专家,你会从哪里开始?
c# - 获取代码文件版本差异,显示受影响的方法(名称)
我想获得两个版本的代码文件(Java/C#)之间的差异 - 并从中获得受影响的方法(名称)列表。这是否已实施?
我认为这需要对从差异返回的行进行 AST 分析。
这样做的目的是改进 checkstyle/findbugs 以仅处理 Sprint 期间触及的方法。
我查看了 eclipse 的 diff 过程:
http://dev.eclipse.org/viewsvn/index.cgi/org.eclipse.compare.tests/src/org/eclipse/compare/tests/
看起来它只适用于行号 - 而不是实际的 AST。我对 line#=>methodName 映射感兴趣。
java - 如何在基于抽象语法树的解释器中表示类
我已阅读相关问题,但似乎都没有直接解决这个问题。我正在编写一个 PHP 脚本解释器。我让 AST 为除类之外的所有内容生成适当的节点。处理类与处理函数有点不同,所以我正在寻找如何处理独立的类以及扩展其他类的类。
我看过 ANTLR,但我负担不起开销,因为这是嵌入式平台。我正在寻找的是 AST 中的类在概念上的理论,因此它们可以由解释器的执行程序部分执行。非常感谢与此问题的具体答案的良好链接。
java - 如何在 Eclipse 之外的项目中使用 java Eclipse 抽象语法树?(即不是 Eclipse 插件)
如何在 Eclipse 之外的项目中使用 java Eclipse 抽象语法树?(即不是 Eclipse 插件)
我见过的所有 Eclipse AST 示例都是针对 Eclipse 插件的。有没有一种方法(即示例)将 eclipse AST 用于非 eclipse 项目。
java - Eclipse 抽象语法树差异
给定 Eclipse 中的以下代码:
您如何使用 Eclipse 比较 API (org.eclipse.compare) 找到 AST 差异?(这可以在插件之外完成吗?)
我正在查看以下 API
http://kickjava.com/src/org/eclipse/compare/structuremergeviewer/Differencer.java.htm http://kickjava.com/src/org/eclipse/jdt/internal/ui/compare/JavaStructureCreator.java.htm http://kickjava.com/src/org/eclipse/compare/CompareUI.java.htm
任何人都可以指向示例代码(或 API - 但首选代码)。
c# - 来自行号的方法名称
给定特定类源代码(Java/C#)的行号 - 是否有一种简单的方法来获取它所属的方法的名称?(如果它在一个范围内)(大概使用抽象语法树)
(这对于将 checkstyle 的输出限制为仅触及的方法很有用)。
我假设您必须使用抽象语法树来执行 Line#-> MethodName。
python - 如何在 Python 中获得完整的 AST?
我喜欢_ast模块提供的选项,它真的很强大。有没有办法从中获取完整的 AST?
例如,如果我得到以下代码的 AST:
通过使用 :
ast对象的主体将有两个元素,一个import对象和一个expr对象。但是,我想更进一步,获取import和listdir的 AST,换句话说,我想让_ast降到可能的最低级别。
我认为这种事情应该成为可能是合乎逻辑的。问题是如何?
编辑:尽可能最低级别,我并不是说要访问“可见”的内容。我也想获得用于实现listdir的 AST :比如stat和其他可能为其执行的函数调用。
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# 语法。
解决此问题的最短和最快方法是什么?如果我真的必须采取上述替代方案之一,我应该如何解决我面临的这些问题。