Python运行是由Graminit.c定义的相关介绍

开发 后端
本文是以介绍Python运行时。我们所要做的一些相关的实际应用,如果你对Python运行的相关实际操作感兴趣的话,你就可以浏览以下的文章。

我们在Graminit.c中定义了关于Python运行时刻进行语法的相关分析时我们需要的是相关的静态数据,那么你了解Python运行时的相关顺序吗?如果你想了解其详细的应用,你就可以浏览以下的文章。

Graminit.c中定义了Python运行时刻进行语法分析所需要的静态数据(部分数据,主要是Accelerator,会在运行时计算出来),按照如下的顺序:

 

  1. static arc arcs_0_0[3] = {  
  2. {2, 1},  
  3. {3, 1},  
  4. {4, 2},  
  5. };  
  6. static arc arcs_0_1[1] = {  
  7. {0, 1},  
  8. };  
  9. static arc arcs_0_2[1] = {  
  10. {2, 1},  
  11. };  
  12. static state states_0[3] = {  
  13. {3, arcs_0_0},  
  14. {1, arcs_0_1},  
  15. {1, arcs_0_2},  
  16. };  

 

Arc_0_0代表DFA0中从状态0出发的所有arc,arcs_0_1代表DFA0中从状态1出发的所有arc,依此类推。Arcs_0_0中Arc { 2, 1 }代表一条边从状态0开始到状态1,Label为2(可以在后面查到label2代表NEWLINE,即换行符)。States_0记录了DFA0中所有的状态节点上面的所有边。

当定义完所有的DFA的状态和边的信息之后,接下来定义了所有的DFA的数组:

 

  1. static dfa dfas[84] = {  
  2. {256, "single_input", 0, 3, states_0,  
  3. "\004\050\014\000\000\000\000\025\074\005\023\
    310\011\020\004\000\300\020\222\006\201"},  
  4. {257, "file_input", 0, 2, states_1,  
  5. "\204\050\014\000\000\000\000\025\074\005\023
    \310\011\020\004\000\300\020\222\006\201"},  
  6. ...  

 

Graminit.c中定义了Python运行时刻进行语法分析所需要的静态数据的顺序中我们就拿***个元素举例,256在graminit.h中可以查到代表single_input,也就是交互模式下单条语句。初始状态为0,共有3个状态,对应的状态和边的信息存在states_0中,***的一个很长的字符串代表了该非终结符的firstset,每个字节对应着label的ID。

接下来,graminit.c定义了所有的Labels:

 

  1. static label labels[168] = {  
  2. {0, "EMPTY"},  
  3. {256, 0},  
  4. {4, 0},  
  5. {267, 0},  
  6. ...  

 

{ 0, “EMPTY” }是一条特殊的边,表示该状态是accept状态,代表DFA的结束。{ 256, 0 } 则代表该label对应的是符号256,也就是single_input,无对应字符串描述。由于每个关键字在语法中是直接出现的,因此在Label中定义了每个关键字。

***,定义了grammar:

 

  1. grammar _PyParser_Grammar = {  
  2. 84,  
  3. dfas,  
  4. {168, labels},  
  5. 256  
  6. };   

 

可以看到,整个Python2.5的语法共有84条规则/DFA,168个Label,起始Label为256, single_input。以上就是对Graminit.c中定义了Python运行时刻进行语法分析所需要的静态数据(部分数据,主要是Accelerator,会在运行时计算出来),顺序的相关内容的介绍,忘你会有所收获。

【编辑推荐】

  1. Python语言中常用的四种工具的介绍
  2. Python语言功能中的宏编程语言的实际操作方案介绍
  3. Python unicode ascii编码在windows中的实际应用
  4. mod_python在性能上要优于传统CGI的缘由
  5. Python中文转换url编码的实际操作步骤介绍

 

责任编辑:佚名 来源: 博客园
相关推荐

2010-03-25 14:27:52

Python语法

2010-03-26 16:17:24

Python嵌入

2009-08-25 14:42:41

由C++转向C#

2009-08-05 18:28:05

C#异常处理

2010-03-25 14:13:11

Python运行

2010-03-11 16:50:27

Python应用

2010-01-18 10:16:58

学习C++

2010-03-22 17:30:18

Python对象

2010-03-18 16:19:02

Java自定义线程池

2020-09-28 08:12:59

CC++时间

2009-12-24 15:22:10

WPF继承自定义窗口

2010-03-19 11:04:20

python模块

2010-03-19 18:36:39

python开发环境

2010-03-25 16:51:12

Python程序

2010-03-17 17:40:23

Python编程语言

2009-09-01 15:25:01

C#位域

2010-02-01 17:31:06

C++类成员

2009-09-01 15:08:07

C#命名规范

2010-02-01 17:19:30

C++运行机制

2009-08-04 12:56:51

C#自定义事件
点赞
收藏

51CTO技术栈公众号