2

smalltalk の使用を開始し、新しい代入演算子を追加しようとしてい:>ます。

pharo で現在使用されている演算子はセレクターではないため_、代入でアンダースコアを有効にできるクラス Scanner を調べ始めました。私は同様の方法でそれをやろうとしましたが、うまくいきませんでした。

私がそれを達成する方法について何か考えや提案はありますか?

4

1 に答える 1

3

まず、 Method を見てくださいScanner>>#xColon。このメソッドは、入力でコロンが検出されるたびに呼び出されます。メソッドの先頭に次のスニペットを追加することで、新しい割り当てトークンを検出させることができます:>

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

Like this:>は、通常の割り当てとまったく同じように動作します。tokenTypeとをカスタマイズtokenすることで、新しい代入演算子をパーサーに渡し (Parser>>#expressionとを参照Parser>>#assignment:)、別の AST を構築できます (つまり、別の実行動作を実現するため)。

より高い柔軟性に関心がある場合は、Helvetiaを参照してください。Helvetia は Pharo 用の言語ワークベンチで、ホスト言語を変更し、よりモジュール化された方法でツールを適応させることができます。ディストリビューション ( ) に含まれるの 1 つは、CUSwapExample2 つの新しい代入演算子を Smalltalk に追加することです。

于 2013-01-04T17:31:39.670 に答える