标签: abstract-syntax-tree

javac.exe AST编程访问示例

是否可以通过编程方式访问javac.exe中的抽象语法树(AST)?你能提供一个例子吗?

java javac abstract-syntax-tree

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

字符串到抽象语法树

我想将包含有效Erlang表达式的字符串转换为其抽象语法树表示,到目前为止没有任何成功.

以下是我想做的一个例子.编译后,alling z:z().生成模块zed,通过调用zed:zed().返回lists:reverse给定列表上的应用结果.

-module(z).
-export([z/0]).

z() ->
  ModuleAST = erl_syntax:attribute(erl_syntax:atom(module),
                                   [erl_syntax:atom("zed")]),

  ExportAST = erl_syntax:attribute(erl_syntax:atom(export),
                                   [erl_syntax:list(
                                    [erl_syntax:arity_qualifier(
                                     erl_syntax:atom("zed"),
                                     erl_syntax:integer(0))])]),

  %ListAST = ?(String),  % This is where I would put my AST
  ListAST = erl_syntax:list([erl_syntax:integer(1), erl_syntax:integer(2)]),

  FunctionAST = erl_syntax:function(erl_syntax:atom("zed"),
                                    [erl_syntax:clause(
                                     [], none,
                                     [erl_syntax:application(
                                        erl_syntax:atom(lists),
                                        erl_syntax:atom(reverse),
                                        [ListAST]
                    )])]),

  Forms = [erl_syntax:revert(AST) || AST <- [ModuleAST, ExportAST, FunctionAST]],

  case compile:forms(Forms) of
    {ok,ModuleName,Binary}           -> code:load_binary(ModuleName, "z", Binary);
    {ok,ModuleName,Binary,_Warnings} -> code:load_binary(ModuleName, "z", Binary)
  end.
Run Code Online (Sandbox Code Playgroud)

String可能是"[1,2,3].",或"begin …

erlang abstract-syntax-tree

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

Ada短路控制形式

是什么意思

x AND THEN y AND z
Run Code Online (Sandbox Code Playgroud)

是吗

x AND THEN (y AND z)
Run Code Online (Sandbox Code Playgroud)

(如果x为FALSE,则y,z永远不会被评估)或

(x AND THEN y) AND z
Run Code Online (Sandbox Code Playgroud)

(如果x为FALSE,y被跳过,但可能是z被评估)在ada中?

ada abstract-syntax-tree short-circuiting

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

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
查看次数

如何使用Clang从C++字符串生成AST?

我正在尝试使用Clang来操作C++源代码,但是我在发现API时遇到了问题.

我想取一串C++源代码并从中生成一个AST; 就像是:

auto myAst = clang::parse("auto x = 1 + 1;"); 
Run Code Online (Sandbox Code Playgroud)

这有一个最小的工作示例吗?

c++ parsing clang abstract-syntax-tree

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

Julia中Python的ast.literal_eval()相当于什么?

Julia中有什么东西相当于literal_evalast(Abstract Syntax Tree)提供的Python 吗?

其(literal_eval)描述摘要:

此函数仅评估Python文字结构:字符串,字节,数字,元组,列表,字符串,集合,布尔值,以及None可用于安全地评估来自不受信任来源的字符串,而无需自行解析值.它无法评估任意复杂的表达式,例如涉及运算符或索引.

python type-conversion abstract-syntax-tree julia

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

术语解析树和派生树之间的任何差异?

当引用符合语法的文本的解析结果时,术语AST(抽象语法树),解析树和派生树由不同的人围绕.假设我们正在谈论解析计算机语言,他们的差异是否足够小,我们可以互换使用这些术语?如果没有,我们如何正确使用这些条款?

grammar parsing lex abstract-syntax-tree

9
推荐指数
2
解决办法
6085
查看次数

从C代码构建AST

如何从gcc C代码构建AST(抽象语法树)以进行一些修改,比如将一些int变量转换为float,然后再将代码重新生成(生成)到C语法.

实际上,目前,我真正需要的唯一功能是从包含几行的ac程序中提取变量及其类型的表...我认为有一个简单的解析器就是这样做的.

我有一些变量,如:

int  var_bss ;           
float var_f_bss;            
int var_data = 4;        
float var_f_data = 5;  
Run Code Online (Sandbox Code Playgroud)

功能:

int Foo(){          
   some local variables;            
}    
Run Code Online (Sandbox Code Playgroud)

代码位于单个c文件中.

我想向最终用户介绍所有变量,让他选择特定内存段中的源类型,例如.data中的int变量.然后用户可以将这些变量转换为浮点数.最后,我为用户生成相同的代码,但使用他选择的新变量类型.

c gcc abstract-syntax-tree code-translation

9
推荐指数
2
解决办法
6156
查看次数

语法树:free monad + Bound.Scope

我试图定义使用ekmett的库抽象语法类型boundfree.我有一些工作,我可以删除到以下最小的例子:

{-# LANGUAGE DeriveFunctor #-}

import Bound
import Control.Monad.Free

type Id = String

data TermF f ? =
    AppF ? ?
  | BindF Id (Scope () f ?)
  deriving Functor

newtype Term' ? = T {unT :: Free (TermF Term) ?}
type Term = Free (TermF Term')
Run Code Online (Sandbox Code Playgroud)

最后两行是,呃,不是我所希望的.它们使得PITA实际上可以利用注释(或其他)的开放递归.

是否有更好的方法将这两个库一起使用,和/或我应该放弃尝试制作Term一个免费的monad?

haskell abstract-syntax-tree free-monad

9
推荐指数
1
解决办法
175
查看次数

合成与继承属性

如何找到属性是从语法的产生中合成还是继承?

我想因为必须在问题中预定义属性 - 如果它的值取决于子节点或父节点.但有没有办法分析属性是从语法产生继承还是合成.

compiler-construction parsing abstract-syntax-tree context-free-grammar semantic-analysis

9
推荐指数
1
解决办法
2万
查看次数