我们在Graminit.c中定义了关于Python运行时刻进行语法的相关分析时我们需要的是相关的静态数据,那么你了解Python运行时的相关顺序吗?如果你想了解其详细的应用,你就可以浏览以下的文章。
创新互联建站主要从事成都做网站、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务三江侗,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
Graminit.c中定义了Python运行时刻进行语法分析所需要的静态数据(部分数据,主要是Accelerator,会在运行时计算出来),按照如下的顺序:
- static arc arcs_0_0[3] = {
- {2, 1},
- {3, 1},
- {4, 2},
- };
- static arc arcs_0_1[1] = {
- {0, 1},
- };
- static arc arcs_0_2[1] = {
- {2, 1},
- };
- static state states_0[3] = {
- {3, arcs_0_0},
- {1, arcs_0_1},
- {1, arcs_0_2},
- };
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的数组:
- static dfa dfas[84] = {
- {256, "single_input", 0, 3, states_0,
- "\004\050\014\000\000\000\000\025\074\005\023\
310\011\020\004\000\300\020\222\006\201"},- {257, "file_input", 0, 2, states_1,
- "\204\050\014\000\000\000\000\025\074\005\023
\310\011\020\004\000\300\020\222\006\201"},- ...
Graminit.c中定义了Python运行时刻进行语法分析所需要的静态数据的顺序中我们就拿***个元素举例,256在graminit.h中可以查到代表single_input,也就是交互模式下单条语句。初始状态为0,共有3个状态,对应的状态和边的信息存在states_0中,***的一个很长的字符串代表了该非终结符的firstset,每个字节对应着label的ID。
接下来,graminit.c定义了所有的Labels:
- static label labels[168] = {
- {0, "EMPTY"},
- {256, 0},
- {4, 0},
- {267, 0},
- ...
{ 0, “EMPTY” }是一条特殊的边,表示该状态是accept状态,代表DFA的结束。{ 256, 0 } 则代表该label对应的是符号256,也就是single_input,无对应字符串描述。由于每个关键字在语法中是直接出现的,因此在Label中定义了每个关键字。
***,定义了grammar:
- grammar _PyParser_Grammar = {
- 84,
- dfas,
- {168, labels},
- 256
- };
可以看到,整个Python2.5的语法共有84条规则/DFA,168个Label,起始Label为256, single_input。以上就是对Graminit.c中定义了Python运行时刻进行语法分析所需要的静态数据(部分数据,主要是Accelerator,会在运行时计算出来),顺序的相关内容的介绍,忘你会有所收获。
网页名称:Python运行是由Graminit.c定义的相关介绍
本文链接:http://www.shufengxianlan.com/qtweb/news20/398770.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联