OMetaとMMetaの違い

OMetaでは先ほどの記事の通りではうまくいきません。MTestのスーパークラスをOMetaにした上で、

(MTest onString: 'a') apply: #test

とやると同じことができるようになります。

MMetaでは、

boolean ::= ‘true’ | ‘false’

のように文字列を直接書くことができていたのですが、OMetaではtokenを定めないとうまくいきません。

token :xs ::=
<spaces> <seq xs>

というのをOMetaParserあたりからもらってきて、

boolean ::=
<token 'true'> | <token 'false'>

とします。