python3如何使用,Python3 教程

  python3如何使用,Python3 教程

  最近一直在摆弄Python,想让别人学会用自己的SolidMCP等制作计算机编程语言解释器。

  当初觉得很高级,就这样分离了某开源软件的基于夸脱的计算机编程语言控制台安装,成功移植到了SolidMCP内。

  在这个过程中,我发现其实写一个蹩脚的计算机编程语言解释器并不是很难100 .票哥决定冷静下来,进行研究。然后,将研究成果记录如下。

  如何写计算机编程语言解释器

  先用计算机编程语言写原型,然后用c翻译就可以了。

  importsysimportosimportcode

  重定向输出=r c:\ redirectedpythonconsole。文本

  #重定向信道

  class my console 3360 de f write(自我,输入):

  myfile=file(重定向输出, a )。

  output=\nPython 输入

  myFile.write(输出)

  我的档案。关闭(# redirectstdouttomyconsole

  defaultStdOut=sys.stdout

  myConsole=MyConsole()

  sys。stdout=myconsoleifos。路径。存在(重定向输出) :

  OS。remove(redirectedoutput)compileinputcodetocodeobject #运行代码对象

  输入代码= 23 解释器=代码.交互解释器(

  代码对象=interpreter.com pile(输入代码)

  解释器。运行代码(代码对象) )。

  sys.stdout=myConsole

  版本c的原型

  //演示演示交互式解释交互式控制台

  voidtestInterpreter(

  {

  py _ Initialize(;//# loadcodemoduletouse interactiveinterpreterandinteractiveconsole//# utilities usetemulatepython interactiveinterprese interactiveconsolecloselyemultimesthehavior interactivepython interphon

  巴拉圭对象*模块=py导入_导入模块(代码);//constructioninteractiveinterferfromcodemodule

  py object * func=py object _ getattrstring(模块,交互式解释器);

  Py object * args=Py _ build value()()));

  py对象*解释器=py eval _ call对象(func,args);//以代码形式提供输入

  const char * source= 2 3

  py对象* source args=py _ build值(()),source);

  py object * compile func=py object _ getattrstring(解释器,编译);

  py object * code object=py eval _ call object(compile func,source args);//运行编译的字节码

  py对象*主模块=py导入_添加模块(_ _ main _ );

  巴拉圭对象*字典=py模块_获取字典(主模式);

  py object * presult=py eval _ eval code()pycodeObject *)code object,dict,dict);//最后,releaseverythingbydecremedingheirreferencecounts .//py _ de cref(主模块);

  py _ decref(presult;

  py _ decref(DICT;

  py _ de cref(代码对象;

  py _ decref(编译函数;

  py _ decref(源参数;

  py _ de cref(企业;

  py _ decref(Args;

  py _ decref(func;

  py _ Finalize(;

  }

  基本原理就是这样,剩下的事情就是重定向sys.stdout,然后处理文本编辑控件的事件。

  利用交互控制台直接用计算机编程语言书写

  计算机编程语言提供了交互式控制台来帮我做这件事。这其实也是从交互式解释程序继承的。

  那些基于PyQt的大蟒控制台一般都是这样做的。

  请参见- -

  #从activestatecoderecipes复制

  # http://代码。活动状态。com/recipes/355319-using-codeinteractiveconsole-to-embed-a-python-she/

  请参见- -

  importsysimportcodefromcodeimportinteractiveconsoleclassfilecacher: cachethestuduttextsowcanalyzeitbeforerectingit

  def _ _ init _ _(self)3360 self。reset(defreset)self):self。out=[]de fwrite(self,line ) 3360 self

  输出=\n .加入(自我退出).

  自复位(交互式类外壳): wrapperaroundpython tatcanfilterinput/outputtheshellet

  def __init__(self):

  self.stdout=sys.stdout

  自我。cache=文件缓存er(

  交互式控制台. init _ _ (self ) return

  efget_output(self):

  sys。stdout=self。cachedefreturn _ output(self):

  sys。stdout=self。stdoutdefpush(self,line):

  自我。get _ output(# youcanfilterinputherebydoingsominglike

  #行=过滤器(线) )

  interactiveconsole.push(self,line))。

  self.return_output()

  输出=自我。缓存。flush(# youcanfiltertheoutputherebydoingsominglike

  #输出=过滤器(输出)

  打印输出#订单优先级

  返回

  if __name__==__main__ :

  sh=壳() )

  先令交互(

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: