我在一本编译器devise书中find了这两个术语,我想知道它们各自的含义,以及它们的不同之处。 我在互联网上search,发现parsing树也被称为具体语法树(CST)。
我正在尝试在Python中操作另一个脚本的脚本,要修改的脚本具有如下结构: class SomethingRecord(Record): description = 'This records something' author = 'john smith' 我使用ast来定位description行号,并且使用一些代码来根据行号更改原始文件和新描述string。 到现在为止还挺好。 现在唯一的问题是偶尔的description是一个多行string,例如 description = ('line 1' 'line 2' 'line 3') 要么 description = 'line 1' \ 'line 2' \ 'line 3' 而且我只有第一行的行号,而不是下面的行。 所以我的单线替代品就可以做到了 description = 'new value' 'line 2' \ 'line 3' 代码被破坏 我认为,如果我知道description任务的开始和结束/行数的行号,我可以修复我的代码来处理这种情况。 如何使用Python标准库获取这些信息?
有没有人有一个简单的例子,使用ast.NodeVisitor走Python 2.6中的抽象语法树? 访问和generic_visit之间的区别,我不清楚,我找不到任何使用谷歌codesearch或谷歌的例子。
抽象语法树..我总是听说在Github上编译成SpiderMonkey AST。 那么,这是JS语法树的实际标准吗? 还有V8,V8是否使用了同样的AST? 我怎么玩?
我对AST是什么有一个总体的了解,但我想知道如何构build一个。 如果给你一个语法和一个分析树,你怎么构buildAST? 如果给你一个语法和expression方式,你怎么做呢?
它们是由编译过程的不同阶段产生的吗? 或者他们只是同一个事物的不同名称?
我想以编程方式编辑python源代码。 基本上我想读一个.py文件,生成AST ,然后回写修改后的python源代码(即另一个.py文件)。 有很多方法可以使用标准的python模块(如ast或compiler来parsing/编译python源代码。 但是,我不认为他们中的任何一个都支持修改源代码的方法(例如,删除这个函数声明),然后回写修改的python源代码。 更新:我想这样做的原因是我想写一个Python的突变testing库 ,主要是通过删除语句/expression式,重新运行testing,看看什么样的rest。
我一直在寻找一个关于这一点,我找不到有用的东西,真的帮助我build立一个AST。 我已经知道ANTLR4并不像ANTLR3那样build立AST。 每个人都说:“嗨,使用游客!”,但我怎么能做到这一点,我找不到任何例子或更详细的解释… 我有一个语法必须像C,但用葡萄牙语(葡萄牙语编程语言)写的每个命令。 我可以使用ANTLR4轻松生成分析树。 我的问题是:我现在需要做什么来创build一个AST? 顺便说一句,我正在使用Java和IntelliJ … 编辑1:我能得到的最接近的是使用这个话题的答案: 是否有一个简单的例子,使用antlr4从java源代码创build一个AST并提取方法,variables和注释? 但它只打印访问方法的名称.. 由于第一次尝试不适合我,因为我期望,我试图从ANTLR3使用本教程 ,但我不知道如何使用StringTamplate,而不是ST … 阅读这本书The Definitive ANTLR 4 Reference我也找不到任何与AST有关的东西。 编辑2:现在我有一个类来创buildDOT文件,我只需要弄清楚如何正确使用访问者
我一直在读关于解释器/编译器是如何工作的,而且我感到困惑的一个领域是AST和CST之间的区别。 我的理解是,parsing器创build一个CST,把它交给语义分析器,把它变成一个AST。 不过,我的理解是,语义分析器只是确保遵循规则。 我真的不明白为什么它会做任何改变,使其抽象而不是具体。 有什么我错过了关于语义分析器的东西,还是AST和CST之间的区别有些人造?
我正在为C做一个静态分析器。我使用ANTLR来完成词法分析器和分析器,其中生成Java代码。 ANTLR是否通过options {output=AST;}自动为我们构buildAST? 还是我必须自己做树? 如果是这样,那么如何吐出AST上的节点呢? 我目前认为AST上的节点将用于制作SSA,然后是数据stream分析,以便制作静态分析器。 我在正确的道路上?