2

我开始使用 smalltalk,我正在尝试添加一个新的赋值运算符:>

pharo 中使用的当前运算符不是选择器,因此我开始研究_可以为分配启用下划线的类 Scanner。我试图以类似的方式做到这一点,但没有奏效。

您对我如何实现这一目标有任何想法或建议吗?

4

1 回答 1

3

首先,看一下 Method Scanner>>#xColon。只要在输入中遇到冒号,就会调用此方法。通过将以下代码段添加到方法的顶部,您可以使其检测到您的新分配令牌:>

aheadChar = $> ifTrue: [
  self step.
  tokenType := #leftArrow.
  self step.
  ^ token := #':=' ]

这样:>的行为与正常分配完全相同。通过自定义tokenTypetoken您可以将新的赋值运算符传递给解析器(参见Parser>>#expressionParser>>#assignment:)并构建不同的 AST(即实现不同的执行行为)。

如果您对更大的灵活性感兴趣,您可能想看看Helvetia。Helvetia 是 Pharo 的语言工作台,允许您修改宿主语言并以更加模块化的方式调整工具。分布 ( ) 中包含的示例CUSwapExample之一是向 Smalltalk 添加了两个新的赋值运算符。

于 2013-01-04T17:31:39.670 回答