在编译器类中查找编译和评估方法等的Pharo文档

Gre*_*olz 5 smalltalk pharo

我这里有一个令人尴尬的简单问题.我是一个小小的新手(我试图每5年左右尝试一次),而且我已经运行了Pharo 6.1.我如何寻找官方标准库文档?特别是对于编译器类?比如编译和评估方法?我没有看到如何使用帮助浏览器执行搜索,并且编译器类中的方法注释相当简洁和神秘.我也没有看到标准库API文档的明显链接:http://pharo.org/documentation.书中的"Pharo by Example"和"Deep into Pharo"似乎也没有涵盖那个类.我想这个类可能与Squeak和其他小元素类似,因此编译器类的文档链接也可能有用.

谢谢!

Lea*_*lia 5

在编写方法(或表达式)时,有几个类合作,鉴于您对该主题的兴趣,我很想在您的学习和理解中进一步激励您.

一般来说,主要类是Scanner,Parser,Compiler和Encoder.根据方言,这些名称和实现可能略有不同,但中心思想保持不变.

Scanner解析源代码的字符流并生成令牌流.然后,这些令牌由解析器解析,解析器将它们转换为AST(抽象语法树)的节点.然后编译器访问AST的节点以在语义上分析它们.这里所有变量节点都被分类:方法参数,方法临时值,共享块,块参数,块临时值等.在此分析过程中,所有变量都绑定在相应的范围内.此时,AST不再是"抽象的",因为它已经使用绑定信息进行了注释.最后,重新访问节点以生成编译方法的文字框架和字节码.

当然,我从这个总结(编译指示,块闭包等)中省略了很多东西,但考虑到这些基本思想,你现在应该准备好调试一个非常简单的例子.例如,从...开始

Object compile: 'm ^3'
Run Code Online (Sandbox Code Playgroud)

内化过程.

经过一段时间的踩踏,您将获得第一个有趣的代码,即方法OpalCompiler >> #compile.如果我们删除错误处理块,这个方法本身就说明了一遍:

compile
  | cm |
  ast := self parse.
  self doSemanticAnalysis. 
  self callPlugins.  
  cm := ast generate: self compilationContext compiledMethodTrailer 
  ^cm
Run Code Online (Sandbox Code Playgroud)

首先,我们有#parse消息,其中创建了解析节点.然后我们进行上面提到的语义分析,最后#generate:产生编码.您应该调试每个方法以深入理解编译过程.鉴于你正在处理一棵树,准备通过很多访客导航.

一旦您熟悉了主要想法,您可能需要尝试更详细的 - 简单示例,以查看进入场景的其他对象.