我开始使用 smalltalk,我正在尝试添加一个新的赋值运算符:>
。
pharo 中使用的当前运算符不是选择器,因此我开始研究_
可以为分配启用下划线的类 Scanner。我试图以类似的方式做到这一点,但没有奏效。
您对我如何实现这一目标有任何想法或建议吗?
我开始使用 smalltalk,我正在尝试添加一个新的赋值运算符:>
。
pharo 中使用的当前运算符不是选择器,因此我开始研究_
可以为分配启用下划线的类 Scanner。我试图以类似的方式做到这一点,但没有奏效。
您对我如何实现这一目标有任何想法或建议吗?
首先,看一下 Method Scanner>>#xColon
。只要在输入中遇到冒号,就会调用此方法。通过将以下代码段添加到方法的顶部,您可以使其检测到您的新分配令牌:>
:
aheadChar = $> ifTrue: [
self step.
tokenType := #leftArrow.
self step.
^ token := #':=' ]
这样:>
的行为与正常分配完全相同。通过自定义tokenType
,token
您可以将新的赋值运算符传递给解析器(参见Parser>>#expression
和Parser>>#assignment:
)并构建不同的 AST(即实现不同的执行行为)。
如果您对更大的灵活性感兴趣,您可能想看看Helvetia。Helvetia 是 Pharo 的语言工作台,允许您修改宿主语言并以更加模块化的方式调整工具。分布 ( ) 中包含的示例CUSwapExample
之一是向 Smalltalk 添加了两个新的赋值运算符。