SmaCCメモ(4)

SmaCCチュートリアルから...

{}で括った部分は、パージングで構文にマッチしたときに実行されるSmalltalkコードだ。''でくくった番号がパーズノードに対応する。トークンにマッチした場合はノードにはSmaCCTokenが格納されていて#valueメソッドでトークン文字列が得られる。

Expression : 
          Expression "+" Number {'1' + '3'}
          | Number {'1'} ;
Number :  {'1' value asNumber} ;

named expressionsを使うと上記のような数字ではなくSmalltalk変数として扱える。

Expression : 
          Expression 'expression' "+" Number 'number' {expression + number}
          | Number 'number' {number} ;
Number :  'numberToken' {numberToken value asNumber} ;

次の5つのディレクティブがある。詳細は後で調べる。

%nonassoc
%left
%right
%start
%id