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

时间:2018-03-02 00:21:47

标签: smalltalk pharo

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

谢谢!

3 个答案:

答案 0 :(得分:5)

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

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

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

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

开始
Object compile: 'm ^3'

内化过程。

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

compile
  | cm |
  ast := self parse.
  self doSemanticAnalysis. 
  self callPlugins.  
  cm := ast generate: self compilationContext compiledMethodTrailer 
  ^cm

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

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

答案 1 :(得分:1)

以下是一些简单的事实:

  1. Smalltalk的评估随处可见:工作区,中 成绩单,浏览器,检查员,调试器等。 基本上,如果你被允许编辑文本,很可能你会 也可以评估它。
  2. 有4个评估命令

    • 这样做(评估时没有显示答案)
    • 打印它(评估并打印表达式旁边的答案)
    • 检查它(评估并打开检查员的结果)
    • 调试它(打开调试器,以便逐步评估表达式)。
  3. 您的表达式可以包含任何文字(数字,数组,字符串,字符等)

    17 "valid expression"
    
  4. 您的表达式可以包含任何消息。

    3 + 4.
    'Hello world' size.
    1 bitShift: 28
    
  5. 您的表达式可以使用任何全局变量

    Object new.
    Smalltalk compiler
    
  6. 您的表达可以引用selfsupertruenilfalse

    SharedRandom globalGenerator next < 0.2 ifTrue: [nil] ifFalse: [self]
    
  7. 您的表达式可以使用在您编写的窗格的上下文中声明的任何变量。例如:

    • 如果您是在班级浏览器中写作,self将绑定到当前班级
    • 如果您在检查员中写作,self将被检查对象绑定。您还可以在表达式中使用其实例变量。
    • 如果您在调试器中,您的表达式可以引用self,实例变量,消息参数,临时值等。
  8. enter image description here

    1. 最后,如果你在工作区(a.k.a.游乐场),你可以在那里使用任何临时工具,这些临时工具将自动创建并记住,而无需你声明它们。
    2. enter image description here

答案 2 :(得分:0)

尽管我已经知道,Pharo标准库没有API文档,就像您在其他编程语言中找到的那样。这似乎在Pharo用户的邮件列表中得到了证实:http://forum.world.st/Essential-Documentation-td4916861.html

...有一个ANSI标准的草稿版本:http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf

...但这似乎不包括编译器类。