タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

DSLとscalaに関するkimutanskのブックマーク (2)

  • 面倒くさいパーサの実装もDSLで書くだけ!そう、Scalaならね - Qiita

    この記事では、Scalaのパーサコンビネータを用いて、BNF風の定義を書くだけで、オブジェクトのマッピングからパースエラーのハンドリングまでできてしまう高機能なパーサを作る方法を解説します! パーサコンビネータとは? Scalaにはパーサコンビネータというライブラリがあります。BNFと似たの記法で構造を定義するだけで簡単にパーサを実装することができます。たとえば、□□□-□□□□のような形式の郵便番号をパースするコードは次のように書くことができます。 import scala.util.parsing.combinator._ object PostalCodeParser extends RegexParsers { def postalCode = """\d{3}""".r ~ "-" ~ """\d{4}""".r } println(PostalCodeParser.parseA

    面倒くさいパーサの実装もDSLで書くだけ!そう、Scalaならね - Qiita
    kimutansk
    kimutansk 2015/03/30
    こんな感じのことも出来るわけですか。オブジェクトのマッピングやエラー内容のカスタマイズも出来るのはいいですね。
  • Scala: パーサコンビネータで行数・文字数を取得しながらパースする - Qiita

    Scalaパーサコンビネータのデフォルトの振る舞いでは、パースしたトークンの何行目・何文字目といった位置情報は捨てられてしまいます。この記事では、Positional trait を使って位置情報を含んだトークンの取得方法を解説します。 パーサコンビネータの基的な使い方は、面倒くさいパーサの実装もDSLで書くだけ!そう、Scalaならね - Qiitaをご覧ください。 実装のポイント 1. Positonal traitをインポートしておく 位置情報をトークンに持たせるには Positonal traitが必要になるので、インポートしておきます。 2. トークンのcase classを作っておく トークンのcase classを作るのですが、その際ベースとなる sealed trait を作り Positonal trait を継承しておきます。更に、case classはベースとなるそ

    Scala: パーサコンビネータで行数・文字数を取得しながらパースする - Qiita
    kimutansk
    kimutansk 2015/03/30
    失敗したタイミングだけでなく、成功した場合にも位置の情報を保持することができますか。
  • 1