ScalaのパーサコンビネータでHTML風テキストを解析する
HTMLの開始タグと終了タグがちゃんと対応してるか確認するパーサコンビネータを書いてみました。 まあ、似たようなことやるなら、既存のライブラリやら、XMLとして文字列をロードすればいいと思いますけどね。
タグの対応をチェックする上で肝要なのは、^?
関数です。
http://www.scala-lang.org/api/2.10.2/#scala.util.parsing.combinator.Parsers$Parser
こいつは、第一引数にパーシャルファンクション、第二引数にString
を返す関数を渡すと、
パーシャルファンクションにマッチしなかった場合、パースエラーにしてくれます。
なので、エラーになっている行がわかるわけです。
^?
関数を使えば、より複雑な構文をパースすることができますね!