返回顶部
首页 > 资讯 > 后端开发 > Python >Python中CST 和AST类有哪些相同的地方
  • 613
分享到

Python中CST 和AST类有哪些相同的地方

2023-06-17 15:06:07 613人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家介绍python中CST 和AST类有哪些相同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python CST 和AST 类似,都是语法分析所获得的中间结果。他们的不同之处在于,CST直接对应语法

这篇文章给大家介绍python中CST 和AST类有哪些相同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Python CST 和AST 类似,都是语法分析所获得的中间结果。他们的不同之处在于,CST直接对应语法分析的匹配的过程,是直接生成的,含有大量冗余信息。而AST省略了中间的冗余信息,直接对应实际的语义,也就是分析的结果。用例子说明要清楚一些:

假设有这样一个表达式a,

Python CST是这样的:(->表示从父结点到子结点)

  1. file_input -> stmt -> simple_stmt -> small_stmt -> 
    expr_stmt -> testlist -> test ->or_test ->and_test 
    ->not_test -> comparison -> expr -> xor_expr ->
     and_expr -> shift_expr -> arith_expr -> term -> 

  2. factor -> power -> atom -> (NAME, “a”) 

而AST则是:

(stmt_ty, expr_kind) -> (expr_ty, name_kind) ->(“a”)

可以看到CST表述了整个分析a的过程,从file_input一直推导到***的NAME,每一步推导都成了树的结点,而大部分信息都可以说是无用的。AST的结构要简单和直接的多,直接表明a是一个表达式语句(假定a是一个单独的语句),内容是一个标示符,值为”a”。Python的语法分析生成的是 Python CST而非AST,之后Python会调用PyAst_Fromnode将CST转换为AST。

CST的结点称为Node,其结构定义在node.h中:

typedef struct _node {  short n_type;  char *n_str;  int n_lineno;  int n_col_offset;  int n_nchildren;  struct _node *n_child;  } node;  Field  Description  n_type

结点类型,终结符定义在token.h中,而非终结符定义在graminit.h中

n_str

结点所对应的字符串的内容

n_lineno

对应的行号

n_col_offset

列号

n_nchildren

子结点的个数

n_child

子结点数组,动态分配内存

Python提供了下面的函数/宏来操作CST,同样定义在node.h中:

Pyapi_FUNC(node *) PyNode_New(int type);  PyAPI_FUNC(int) PyNode_AddChild(node *n, int type,  char *str, int lineno, int col_offset);  PyAPI_FUNC(void) PyNode_Free(node *n);    #define NCH(n) ((n)->n_nchildren)  #define CHILD(n, i) (&(n)->n_child[i])  #define RCHILD(n, i) (CHILD(n, NCH(n) + i))  #define TYPE(n) ((n)->n_type)  #define STR(n) ((n)->n_str)    #define REQ(n, type) assert(TYPE(n) == (type))  PyAPI_FUNC(void) PyNode_ListTree(node *);

关于Python中CST 和AST类有哪些相同的地方就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Python中CST 和AST类有哪些相同的地方

本文链接: https://lsjlt.com/news/290219.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python中CST 和AST类有哪些相同的地方
    这篇文章给大家介绍Python中CST 和AST类有哪些相同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python CST 和AST 类似,都是语法分析所获得的中间结果。他们的不同之处在于,CST直接对应语法...
    99+
    2023-06-17
  • Python 和 JS 有哪些相同之处
    【嵌牛导读】Python 是一门运用很广泛的语言,自动化脚本、爬虫,甚至在深度学习领域也都有 Python 的身影。作为一名前端开发者,也了解 ES6 中的很多特性借鉴自 Python (比如默认参数、解构...
    99+
    2022-06-04
    之处 有哪些 Python
  • css3和css的相同点和不同点有哪些
    本文小编为大家详细介绍“css3和css的相同点和不同点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“css3和css的相同点和不同点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起...
    99+
    2024-04-02
  • Laravel和Python中的数据类型有哪些相似之处?
    Laravel和Python是两种非常常用的编程语言,它们都有着丰富的数据类型。本文将会介绍Laravel和Python中一些相似的数据类型,以及它们的用法和区别。 字符串类型 字符串是Laravel和Python中最基本的数据类型之一...
    99+
    2023-10-20
    数据类型 数组 laravel
  • Python类的相关知识有哪些
    小编给大家分享一下Python类的相关知识有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、什么是类类(class),作为代码的父亲,可以说它包裹了很多有趣...
    99+
    2023-06-15
  • PipedInputStream与PipedOutputStream有哪些不同的地方
    今天就跟大家聊聊有关PipedInputStream与PipedOutputStream有哪些不同的地方,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java 管道介绍在java中,...
    99+
    2023-05-31
    pipedinputstream pipedoutputstream npu
  • PipedReader与PipedWriter有哪些不同的地方
    这篇文章将为大家详细讲解有关PipedReader与PipedWriter有哪些不同的地方,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PipedWriter与PipedReader的区别1...
    99+
    2023-05-31
    pipedwriter ipedreader
  • classpath与path有哪些不同的地方
    这期内容当中小编将会给大家带来有关classpath与path有哪些不同的地方,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。详解path和classpath的区别path的作用path是系统用来指定可执行...
    99+
    2023-05-31
    path classpath
  • Log4j与Log4j2有哪些不同的地方
    这篇文章将为大家详细讲解有关Log4j与Log4j2有哪些不同的地方,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。log4j是Apache的一个开源项目,我们不去考究它的起源时间,但是据我了...
    99+
    2023-05-31
    log4j log4j2 og
  • PHP中与类名相同的方法是哪个
    这篇文章主要介绍了PHP中与类名相同的方法是哪个,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在PHP中,类名与方法名可以相同,如果方法名和类名相同,且没有“__constr...
    99+
    2023-06-15
  • python中定义类的方法有哪些
    本篇内容主要讲解“python中定义类的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python中定义类的方法有哪些”吧!python中的3种定义类方法:普通方法类方法(@class...
    99+
    2023-06-21
  • 服务器和云服务器的相同点和不同点有哪些
    云服务器和云服务器是两个不同的概念,它们的相同点和不同点如下: 相同点: - 云服务器都是由云主机或者云计算服务提供商创建,是一个虚拟机,能够在云平台上进行快速、便捷、可靠的计算和存储。 - 云服务器提供高性能、高可用性、高扩展性和弹性等...
    99+
    2023-10-27
    不同点 服务器 相同点
  • volatile和原子类的异同点有哪些
    这篇文章主要讲解了“volatile和原子类的异同点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“volatile和原子类的异同点有哪些”吧!vola...
    99+
    2024-04-02
  • C#结构和类的不同点有哪些
    这篇文章主要讲解了“C#结构和类的不同点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#结构和类的不同点有哪些”吧!C#结构是堆栈对象,不能在堆上创建它;C#结构可以继承接口,但是不...
    99+
    2023-06-18
  • Java中抽象类和接口的不同点有哪些
    这篇文章主要讲解了“Java中抽象类和接口的不同点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中抽象类和接口的不同点有哪些”吧!在Java语言中, abstract clas...
    99+
    2023-06-17
  • IDE 中的 Java 和 JavaScript 同步方法有哪些?
    当开发者在使用集成开发环境(IDE)进行 Java 或 JavaScript 开发时,同步方法是不可或缺的一部分。同步方法是一种确保多个线程在访问共享资源时不会产生竞争条件的技术。在本文中,我们将讨论 IDE 中的 Java 和 JavaS...
    99+
    2023-07-03
    javascript ide 同步
  • 服务器和云服务器的相同点有哪些
    云服务器和云服务器是两个不同的概念,它们的相同点包括以下几点: 相同用途:云服务器和云服务器是同一个软件或应用程序的不同版本或分支。它们都可以提供虚拟化、高可用性和弹性伸缩等功能。 相同的技术支持:云服务器提供商通常会提供一个公共的云服...
    99+
    2023-10-26
    服务器 相同点 有哪些
  • 重定向和同步对象在 Python 中的实现方式有哪些不同?
    在 Python 中,重定向和同步对象是两个非常常见的概念。它们都可以用来处理多线程、多进程或异步编程中的并发问题。虽然它们的目的是相似的,但是它们的实现方式却有所不同。在本文中,我们将讨论重定向和同步对象在 Python 中的实现方式有哪...
    99+
    2023-07-24
    重定向 对象 同步
  • Python ChineseCalendar包主要类和方法有哪些
    这篇文章主要介绍“Python ChineseCalendar包主要类和方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python ChineseCalendar包主要...
    99+
    2023-07-05
  • JavaScript数组过滤相同元素的方法有哪些
    这篇文章主要介绍了JavaScript数组过滤相同元素的方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法一:比较内层循环变量的值...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作