16得票3回答
将Python语法限制以安全地执行用户代码。这是一种安全的方法吗?

原始问题: 如何在Python Web服务器上执行数学用户代码,最简单安全的方法是什么? 我想在Python Web服务器上运行用户提交的代码。这些代码将是简单且数学性质的。 因此,只需要 Python 的一个小子集,我的当前方法是通过遍历 Python 的抽象语法树来白名单允许的语...

16得票2回答
我如何在通用遍历解析树时访问ANTLR4中的备用标签?

当我通用地遍历语法树时,如何访问ANTLR4中的备选标签?或者,是否有一种方式可以复制ANTLR3的^运算符的功能,因为那样就可以解决问题了。 我正在尝试为任何遵循简单方法论(例如使用备选标签命名产生式)的ANTLR4语法编写AST漂亮打印机。 假设有以下语法,我希望能够漂亮打印类似3+5这样...

16得票4回答
获取结构体字段类型的简单字符串表示

使用 Go 的 ast 包,我像下面这样遍历结构体的字段列表:type Thing struct { Field1 string Field2 []int Field3 map[byte]float64 } // typ is a *ast.StructType re...

16得票2回答
如何使用jscodeshift在文件开头插入一行代码

https://astexplorer.net/#/gist/ad90272020dd0bfb15619d93cca81b66/28d3cf7178271f4f99b10bc9352daa873c2f2b20// file var a = "a" // what if this is impo...

16得票2回答
如何在语法中实现JJTree

我有一个作业是使用JavaCC为讲师提供的一门语言制作带语义分析的自顶向下解析器。我已经编写好了产生式规则,没有错误。 但我完全不知道如何在我的代码中使用JJTree,在网上搜寻了数个小时的教程也没有任何收获。 想知道是否有人可以花点时间解释如何在代码中实现JJTree呢?或者如果有隐藏的...

15得票2回答
Python 2.7中的ast.literal_eval()是否支持集合字面量?

在Python 2.7的新特性文档中提到,支持集合字面量是从Python 3.1中进行回溯移植的。然而,似乎这种支持没有扩展到ast模块的literal_eval()函数,如下所示。这是故意为之、疏忽大意,还是其他原因,以及有哪些最清晰的解决方法来创建一个字面集合从字符串表示?(我假设在Pyt...

15得票3回答
使用最少的括号对AST进行漂亮打印

我正在实现一个JavaScript AST的漂亮打印器,并想问一下是否有人知道一种“合适”的算法,可以根据运算符优先级和结合性自动添加最少的括号来加强表达式。我在谷歌上没有找到任何有用的资料。 显而易见的是,父级具有更高优先级的运算符应该被加上括号,例如: (x + y) * z // x...

15得票3回答
将AST节点转换为Python代码

假设我有以下字符串:code = """ if 1 == 1 and 2 == 2 and 3 == 3: test = 1 """ 以下代码将该字符串转换为AST。ast.parse(code) 然后我有一棵像这样的树:Module(body=[<_ast.If object ...

15得票1回答
如何处理抽象语法树中的注释?

我正在使用Parsec编写Delphi代码解析器,我的当前AST数据结构如下:module Text.DelphiParser.Ast where data TypeName = TypeName String [String] deriving (Show) type UnitName =...

15得票2回答
在C++中表示多次经过的抽象语法树(AST)?

我目前在探索设计一个编译器,该编译器将其AST转换为多个阶段。这个想法是从解析树开始,每个阶段都会转换树,直到生成的AST被优化并且包含树中每个节点所需的所有信息,以便生成中间代码(在本例中为LLVM IR)。对树进行一次遍历可能会显着改变其结构,例如通过operator precedence...