35得票1回答
在C语言中表示抽象语法树

我正在使用C语言实现一个简单玩具语言的编译器,我已经有了工作中的扫描器和解析器,并且对AST(抽象语法树)的概念函数/构建有一定的背景。我的问题与在C中表示AST的特定方式有关。我在不同的在线文本/资源中经常遇到三种风格: 每种节点类型一个结构体。 这个方法有一个基本节点"class"(结...

13得票1回答
clang:自定义属性在AST中不可见

我按照官方手册描述,在clang中实现了自定义属性: http://clang.llvm.org/docs/InternalsManual.html#how-to-add-an-attribute 因此,我将以下代码添加到Attr.td中:def MyAttr: InheritableAttr...

8得票2回答
Python AST,ast.NodeTransformer,TypeError:stmt缺少必需字段'lineno'。

我很想学点有用的东西,因为现在我一直在盲目地摸索。 问题出在Python的ast.NodeTransformer上。我想知道是否可以通过这种方式向现有类添加一个函数,而不会发疯。 以下是我迄今为止的做法。 import ast, inspect, cla # cla is a name o...

7得票1回答
从方法对象获取方法调用及其参数

使用Python的inspect模块,我已经找到了一个方法对象,现在需要逐步查看该方法中的源代码,以查找对某些其他方法的调用并获取它们的参数。 例如,在以下类中: def my_method(): print('hello') foobar('apple', 'pear',...

10得票3回答
解决JavaScript函数中的外部作用域引用以进行序列化

var foo = (function(){ var x = "bar"; return function(){ console.log(x); }; })(); console.log(foo.toString()); // function() {console.lo...

17得票7回答
为什么解析JSON应该优先使用json.loads而不是ast.literal_eval?

我有一个字典存储在数据库字段中,以字符串形式存储。我尝试将其解析为字典,但是json.loads会给我一个错误。 为什么json.loads会失败而ast.literal_eval可以成功?哪个更可取?>>> c.iframe_data u"{u'person': u'An...

10得票3回答
如何解释链式比较操作的抽象语法树?

比较运算符可以在Python中链接,例如x < y < z应该给出(x < y) and (y < z)的结果,除了保证只评估y一次。 此操作的抽象语法树如下所示:>>> ast.dump(ast.parse('0 < 1 < 2'),...

7得票1回答
变体 vs 继承

假设我正在编写某种编程语言的编译器,常见做法是使用抽象语法树(AST)作为内部表示。我可以看到两种设计方法: 使用 boost::variant 使用继承 由于节点层次结构是固定的,所以boost::variant就足够了。 我的问题是,从可维护性和运行时效率的角度来看,每种方法的优...

8得票2回答
什么是抽象语法树?它是否必要?

我一直对编译器/解释器的设计和实现感兴趣(只有5年来),它总是被认为是幕后的“魔法”,没有人真正谈论它(我知道至少有2个操作系统开发论坛,但我不知道任何关于编译器/解释器/语言开发的社区)。无论如何,最近我决定开始自己动手,并希望扩展我的整个编程知识(而且这很有趣:)。因此,基于我有限的阅读材...

15得票3回答
解析树和推导树有什么区别吗?

AST(抽象语法树)、解析树和推导树这些术语在不同人士的口中,是指解析符合语法规则的文本所得到的结果。假设我们正在讨论计算机语言的解析,这些术语之间的差异是否足够微小,以至于我们可以互换使用这些术语?如果不能,我们应该如何正确地使用这些术语?