Python运行的过程中不直接用到的相关函数有哪些

本篇文章给大家分享的是有关Python运行的过程中不直接用到的相关函数有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

目前成都创新互联公司已为近千家的企业提供了网站建设、域名、网络空间、网站改版维护、企业网站设计、琅琊网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

我们都知道在Python运行的过程中是需要不直接的利用到Grammar文件的相关内容进而进行相关的语法分析,过程中会依赖graminit.c/graminit.h中的数据结构来进行语法分析

前面提到了在Python的源代码目录下面有一个Grammar目录,里面只有一个文件Grammar,以BNF的语法定义了Python的全部语法。拿if语句举例来说:

  1. if_stmt: 'if' test ':' suite 
    ('elif' test ':' suite)* ['else' ':' suite] 

上面的语句可以这样理解,if语句是if关键字+逻辑表达式+ ‘:’+语句块(suite)后面跟上0至多个elif语句并以else语句结束。在最左边的if_stmt表示这一句话定义了if_stmt(非终结符),’:’右边则是if_stmt的具体对应的内容。

1. ‘’引号中的内容是实际的字符串,’if’就代表if这两个字符

2. 一般的标示符代表着非终结符,也就是某个等式的左边,if_stmt, test, suite都是非终结符,可以被扩展为等式右边的序列。

3. ()括号是原子操作符,被括号括起来的被作为单个表达式看待

4. *代表0或多个,比如在if_stmt中的(‘elif’ test ‘:’ suite)*代表一个if语句中可以有0或者多个elif子句

5. +代表1或者多个

但是,这个文件并不只是用来作为参考资料的。实际上,Python运行的时候也需要间接利用到Grammar文件的内容来进行语法分析。

Python PGEN

在Makefile.pre.in和Parser/grammar.mak中均有类似如下的代码:

  1. ###################################################
    #######################  

  2. # Grammar  

  3. GRAMMAR_H= $(srcdir)/Include/graminit.h  

  4. GRAMMAR_C= $(srcdir)/Python/graminit.c  

  5. GRAMMAR_INPUT= $(srcdir)/Grammar/Grammar  

  6. ###############################################
    ###########################  

  7. # Parser  

  8. PGEN= Parser/pgen$(EXE)  

  9. POBJS= \  

  10. Parser/acceler.o \  

  11. Parser/grammar1.o \  

  12. Parser/listnode.o \  

  13. Parser/node.o \  

  14. Parser/parser.o \  

  15. Parser/parsetok.o \  

  16. Parser/bitset.o \  

  17. Parser/metagrammar.o \  

  18. Parser/firstsets.o \  

  19. Parser/grammar.o \  

  20. Parser/pgen.o  

  21. PARSER_OBJS= $(POBJS) Parser/myreadline.o Parser/tokenizer.o  

  22. PGOBJS= \  

  23. Objects/obmalloc.o \  

  24. Python/mysnprintf.o \  

  25. Parser/tokenizer_pgen.o \  

  26. Parser/printgrammar.o \  

  27. Parser/pgenmain.o  

  28. PGENOBJS= $(PGENMAIN) $(POBJS) $(PGOBJS)  

  29. ###################################################
    #########################  

  30. # Special rules for object files  

  31. $(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)  

  32. -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)  

  33. $(PGEN): $(PGENOBJS)  

  34. $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)  

这段代码负责生成pgen,然后调用pgen以Grammar作为输入,生成graminit.h/graminit.c。PGEN是Python自带的语法分析数据生成的工具,负责分析Grammar然后生成对应的graminit.c/graminit.h。然后,Python运行过程中会依赖graminit.c/graminit.h中的数据结构来进行语法分析。

以上就是Python运行的过程中不直接用到的相关函数有哪些,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


当前文章:Python运行的过程中不直接用到的相关函数有哪些
标题链接:http://scjbc.cn/article/pipgge.html

其他资讯