相关疑难解决方法(0)

抽象语法树和具体语法树有什么区别?

我一直在阅读有关解释器/编译器如何工作的一些内容,而我感到困惑的一个领域是AST和CST之间的区别.我的理解是解析器生成一个CST,将它交给语义分析器,将其转换为AST.但是,我的理解是语义分析器只是确保遵循规则.我真的不明白为什么它会实际做出任何改变,使其变得抽象而不是具体.

有没有关于语义分析器的东西,或者AST和CST之间的差异有点人为?

parsing terminology abstract-syntax-tree semantic-analysis concrete-syntax-tree

74
推荐指数
6
解决办法
3万
查看次数

如何从Java源代码生成AST?

据我所知,将Java源代码解析为AST(抽象语法树)的唯一方法是使用Java编译器树API:com.sun.source.tree

我有两个问题:

  1. JDK支持哪些com.sun.source.tree?
  2. 是否有适用于所有JDK的便携式替代品?

java compiler-construction parsing

36
推荐指数
3
解决办法
3万
查看次数

从c ++代码中获取人类可读的AST

为了更好地理解C++语言和语法的一些细节,我希望能够编写一个小的C++程序,并查看编译器从中生成的AST.

看起来clang过去有这个功能(-emit-asm),但它已经删除了.

今天有一个简单的方法吗?

c++ abstract-syntax-tree

20
推荐指数
3
解决办法
1万
查看次数

Clang:AST(抽象语法树)是什么样的?

嗨,我是编译器开发的新手,我想知道AST是怎样的.我有一小段代码,我使用Clang生成AST.我没有得到太多的信息.从它的外观来看,语法树与源完全相同,除了一个结构添加到我测试的几乎任何样本中.

资源:

class A {
public:
  int *a, *b, *c;
  int i;
  void sum() {
    a = new int[5];
    b = new int[5];
    c = new int[5];
    for (i = 0; i < 5; i++) {
      a[i] = i;
      b[i] = i;
    }
    for (i = 0; i < 5; i++) {
      c[i] = a[i] + b[i];
    }
    delete[] a;   delete[] b;   delete[] c;
  }
};

class B : public A {
};

int main() {
  B bclass; 
  bclass.sum();
  return …
Run Code Online (Sandbox Code Playgroud)

c++ clang abstract-syntax-tree

10
推荐指数
2
解决办法
9813
查看次数

Java - 抽象语法树

我目前正在寻找一个Java 6/7解析器,它生成一些(可能是标准化的)表单抽象语法树.

我已经发现ANTLR有一个Java 6语法,但似乎它只生成解析树,而不是语法树.我还读过有关Java编译器API的文章 - 但是所有提到的资源都是过度设计并且记录不完整(如果它确实生成了AST,我还没发现).

你知道任何好的解析器库,可能作为标准化输出吗?

谢谢

java grammar parsing abstract-syntax-tree

10
推荐指数
1
解决办法
6613
查看次数

如何将源代码转换为基于xml的ast表示?

我想获得java和c代码的xml表示.3个月前,我问过这个问题,但解决方案对我来说并不舒服

  • srcml似乎是这个问题的一个很好的解决方案,但它不支持行号和列,但我需要该功能.
  • 关于elsa:引用:"目前正在努力将Elsa AST导出为XML文档;我们希望能够在下一个公开发布中对此进行宣传."
  • dms ......不明白.
  • 特别是对于java,有javaml支持行号.但是sourceforge页面没有列出任何文件.

问题:有可用的软件支持将ast转换为xml,它支持行号(和列)[特别是对于java和c/c ++]?是否有javaml和srcml的替代品?

ps:我不喜欢解析器生成器.我希望找到一个可以在控制台上输入的工具:./ my-xml-generator Test.java [或类似的东西] ......或者java实现也会很棒.

xml abstract-syntax-tree code-conversion

6
推荐指数
1
解决办法
7286
查看次数

我可以在不编译的情况下获得C/C++/Java代码的XML AST吗?

我想用AST代表源代码创建一个XML文件,但不编译它.到目前为止,我找不到任何充分的解决方案.这是我尝试过的:

  • 在clang中使用XML打印机clang -cc1 -ast-print-xml- 它会很好,但它已从clang删除
  • srcML工具包,理论上运行良好,但解析器很差(对于Java,它甚至不完全兼容1.5)

还有其他选择吗?

c c++ java xml abstract-syntax-tree

6
推荐指数
1
解决办法
1014
查看次数

用C++解析Java源代码

我想用 C++创建一个 Java 源代码解析功能。该应用程序的目的是在内部数据结构中生成语法树,以便我能够自行遍历数据树结构并对其进行分析。

哪些工具可以帮助我实现目标?

c++ java parsing abstract-syntax-tree semantic-analysis

5
推荐指数
1
解决办法
2211
查看次数

有没有标准的方法来存储抽象语法树文件?

我正在寻找一种方法将抽象语法树"转储"到文件中,以便可以使用编译器解析代码,然后以独立于语言和编译器的方式存储.然而,我无法找到任何被广泛认可的方式来做到这一点.这样的方式存在吗?

compilation abstract-syntax-tree

5
推荐指数
1
解决办法
1130
查看次数

XML序列化Roslyn SyntaxTree?

我正在寻找将C#转换为XML并再次反序列化回C#的选项.有人知道任何现有的解决方案吗?我假设Roslyn SyntaxTree不是Xml可序列化的.我还假设为一个syntaxtree制作一个xml-serializer是一项相当大的工作.但也许不是吗?

我为什么需要这个?我想通过xsl到syntaxtree-xml从xml模型生成代码,然后生成c#(或者可能是vb).

我不想直接从XSL生成C#(可以做但我觉得它不是理想的).我需要XSL,因为我还要从XML模型生成XAML和HTML,我也希望能够生成任何需要的代码等等.

我知道T4模板,但现在我正在寻找其他选项,原因有很多.

c# code-generation xml-serialization roslyn

5
推荐指数
1
解决办法
912
查看次数

哪些独立的Java解析器可用?

我需要一个独立的Java解析器(程序"读取".java源文件并生成AST [即表示源内容的对象]).

  • https://code.google.com/p/javaparser/但它只支持Java 1.5
  • 我知道如何以"独立"模式运行Eclipse Java解析器,但是这个解析器使用了太多的Eclipse JAR,太复杂了,并且使用了EPL许可证,这是GPL不兼容的
  • 其他IDE(IntelliJ,NetBeans,JDeveloper)和javac编译器也必须有一些Java解析器,但我找不到任何文档如何在"独立"应用程序中使用它们

有帮助吗?也许你的某些人也试过做一些独立的Java解析?

java parsing netbeans metaprogramming intellij-idea

5
推荐指数
1
解决办法
219
查看次数