添加新的赋值运算符

时间:2013-01-04 12:03:20

标签: operator-overloading variable-assignment smalltalk pharo squeak

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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