标签: abstract-syntax-tree

是否可以获得OCaml程序的AST?

我希望能够获得给定OCaml程序的AST(例如,我想走AST并生成代码的检测版本或进行某种转换).任何OCaml工具都支持此功能吗?

ocaml abstract-syntax-tree camlp4

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

如何将CoffeeScript AST编译为CoffeeScript而不是JavaScript?

是否可以将AST转换为CoffeeScript而不是JavaScript?我正在工作的项目基本上需要将所有CoffeeScript转换为AST,分析AST,然后将部分AST转换回CoffeeScript.我知道关于原始代码的转换将是"有损的",但这没关系.

我真的想避免将这些部分编译成JavaScript然后再回到CoffeeScript.

abstract-syntax-tree coffeescript

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

语义规则/抽象语法树规则

首先,语义规则和抽象语法树规则是一样的吗?

现在,如果我有语言规范,并且我有CFG,那么我该如何构建抽象语法树规则.任何来源都表示赞赏.谢谢.

c abstract-syntax-tree semantic-analysis

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

Groovy可以复制类签名但修改实现

我想要精确复制groovy脚本的接口,但是将所有方法转发给invokeMethod或methodMissing等方法.

这与我在这里的其他问题有关(但我放弃了"轻松"部分),这解释了为什么我实际上不能使用invokeMethod或ProxyMetaClass - 简而言之,因为我的方法是从java调用而没有groovy的grooviness适用于该调用.

所以我一直试图复制类签名并将调用转发给原始类.

这可能涉及AST转换,但我仍然试图将我的大脑包围在那些,任何使用AST做这样的事情(或任何其他想法)的例子将不胜感激.

java groovy abstract-syntax-tree

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

将Eclipse JDT ITypeBinding转换为Type

我正在寻找将org.eclipse.jdt.core.dom.ITypeBinding实例转换为实例的一般方法org.eclipse.jdt.core.dom.Type.虽然我觉得应该有一些API调用来做到这一点,但我找不到一个.

根据具体类型,似乎有多种方法可以手动执行此操作.

ITypeBinding如果Type没有所有这些特殊情况,是否有任何一般方法可以获得并得到一个?拿a String和返回a Type也是可以接受的.

更新

从目前为止的反应来看,似乎我必须处理所有这些特殊情况.这是第一次尝试这样做.我确信这不是完全正确的,所以请仔细审查:

public static Type typeFromBinding(AST ast, ITypeBinding typeBinding) {
    if( ast == null ) 
        throw new NullPointerException("ast is null");
    if( typeBinding == null )
        throw new NullPointerException("typeBinding is null");

    if( typeBinding.isPrimitive() ) {
        return ast.newPrimitiveType(
            PrimitiveType.toCode(typeBinding.getName()));
    }

    if( typeBinding.isCapture() ) {
        ITypeBinding wildCard = typeBinding.getWildcard();
        WildcardType capType = ast.newWildcardType();
        ITypeBinding bound = wildCard.getBound();
        if( bound != null ) {
            capType.setBound(typeFromBinding(ast, bound)),
                wildCard.isUpperbound());
        }
        return capType; …
Run Code Online (Sandbox Code Playgroud)

java eclipse abstract-syntax-tree eclipse-jdt

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

Haskell解析器为AST数据类型,赋值

我一直在搜索互联网几天,试图回答我的问题,我终于承认失败了.
我得到了一个语法:

Dig ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Int ::= Dig | Dig Int
Var ::= a | b | ... z | A | B | C | ... | Z
Expr ::= Int | - Expr | + Expr Expr | * Expr Expr | Var | let Var = Expr in Expr

我被告知要使用这种语法解析,评估和打印表达式
,其中运算符* + -具有正常含义
.具体任务是编写函数parse :: String …

parsing haskell abstract-syntax-tree

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

将ast.Num转换为decimal.Decimal以获得python中的精度

我正在编写一个解析器来解析简单的算术公式:它只需要(和限制)来支持数字和变量上的+ - */.例如:

100.50*num*discount
Run Code Online (Sandbox Code Playgroud)

它基本上用于计算产品价格.

这是用python编写的,我想简单地使用python自己的解析器.这个想法首先解析输入AST,然后走在AST,以限制一小部分的AST的节点类型,比如:ast.BinOp,ast.Add,ast.Num,ast.Name等...

目前它运作良好,除了ast中的浮点数不精确.所以我想将ast的ast.Num节点转换成一些节点ast.Call(func=ast.Name(id='Decimal'), ...).但问题是:ast.Num只包含一个n已解析的浮点数字段.在源代码中获取原始数字文字并不容易:如何获取对应于Python AST节点的源代码

有什么建议吗?

python floating-point decimal abstract-syntax-tree

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

VisitDecl与TraverseDecl(Clang RecursiveASTVisitor)

我已经阅读了此链接,但仍不完全了解TraverseDecl和VisitDecl(及其用例)之间有什么区别http://clang.llvm.org/doxygen/classclang_1_1RecursiveASTVisitor.html

编写RecursiveASTVisitor时应重写哪个方法?

c++ static-analysis clang abstract-syntax-tree llvm-clang

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

menhir - 将AST节点与源文件中的令牌位置相关联

我正在使用Menhir解析DSL.我的解析器使用精心设计的嵌套类型集合构建AST.在以后的类型检查和为用户生成的错误报告中的其他传递期间,我想参考它发生的源文件位置.这些不是解析错误,它们在解析完成后生成.

一个天真的解决方案是为所有AST类型配备额外的位置信息,但这将使得与它们一起工作(例如构建或匹配)不必要的笨拙.这样做的既定做法是什么?

error-handling ocaml abstract-syntax-tree menhir

5
推荐指数
2
解决办法
397
查看次数

Haskell AST Annotation with Fix

我正在努力在Haskell中创建一个AST.我想添加不同的注释,例如类型和位置信息,所以我最终使用了fixplate.但是,我在网上找不到任何例子,我遇到了一些困难.

我按照fixplate的推荐设置了我的AST(有些条纹):

data ProgramF a
  = Unary a
          Operator
  | Number Int
  | Let { bindings :: [(Identifier, a)]
        , body :: a }

type Program = Mu ProgramF
Run Code Online (Sandbox Code Playgroud)

接下来添加标签我创建了另一种类型,以及一个基于树遍历添加标签的函数.

type LabelProgram = Attr ProgramF PLabel

labelProgram :: Program -> LabelProgram
labelProgram =
  annMap (PLabel . show . fst) . (snd . synthAccumL (\i x -> (i + 1, (i, x))) 0)
Run Code Online (Sandbox Code Playgroud)

但是,除此之外,我遇到了一些问题.例如,我正在尝试编写一个对AST进行一些转换的函数.因为它需要一个标签来运行,我已经制作了类型LabelProgram -> Program,但我认为我在做错了.下面是一部分函数的片段(一个更简单的部分):

toANF :: LabelProgram -> Program
toANF (Fix (Ann label (Let {bindings, …
Run Code Online (Sandbox Code Playgroud)

haskell abstract-syntax-tree recursive-datastructures fixpoint-combinators

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