空白などの区切り文字を使用せずに、いくつかのキーワードで入力を分割しようとしています。
object MyParser extends JavaTokenParsers {
def expr = (text | keyword).+
def text = ".+".r ^^ ("'"+_+"'")
def keyword = "ID".r ^^ ("["+_+"]")
}
val p = MyParser
p.parse(p.expr, "fooIDbar") match {
case p.Success(r, _) => r foreach print
case x => println(x.toString)
}
これにより、以下のように出力されます。
>> 'hogeIDfuga'
でも本当にやりたいのはこういうこと。
>> 'hoge'[ID]'fuga'
text
すべてのキャラクターを飲み込ん
でいるようです。text
[を含まない ]を表現しようとしましkeyword
たが、できませんでした。正規表現またはスカラパーサーで表現する方法は? または他の解決策はありますか?