You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
「Scala ならそれ parser combinator でできるよ」ということでパーサーを書きました。 https://github.com/seratch/ltsv4s もっと型にマッピングしたくなる気もしますが、目的は主にログのパースですし、まずは Map とかでよいのではという感じになっています。 一行読み込む parseLine と複数行を読む parseLines の二種類がありますが、基本的にはログファイルを Stream な感じで読みながら一行ずつ parseLine で処理するのかなと思います。 scala> import com.github.seratch.ltsv4s._ import com.github.seratch.ltsv4s._ scala> val log: Map[String, String] = LTSV.parseLine("field1:v
以前、Scala の Parser を試したんですがハマってしまったので、ハマり記念ということで記事にしておこうと思います。 ちなみに、Scala のパーサコンビネータについて知りたい人は僕のこの記事よりも @kmizu さんのスライドを読んだ方が良いように思います。 ■ Scala のパーサ概要 まず import しておきたいのは scala.util.parsing.combinator.Parsers です。 主な手順は次の通り。 1.Parsers オブジェクトを作る。 2.Parsers.Parser[ Result ] のオブジェクトを作る。ここで Result はパース結果の型。 3.2.で作ったオブジェクトにパース対象のシーケンスオブジェクトを渡す。 4.3.の結果得られるものがパース結果。 ■ 簡単なトコからいきましょ まず Char のシーケンスを読んで MyData
普通の正規表現を実行してみる いきなりパーサを書くのはハードルが高そうなので、とりあえず数値だけを許可する正規表現を動かしてみる。 下記は、数値文字列を渡せばそのまま文字列を返し、数値以外の文字列を渡すと例外になる処理になる。 class SimpleRegex1 extends RegexParsers { def re = "[0-9]+".r def parse(input: String) = parseAll(re, input) } val result = new SimpleRegex1().parse("130") println(result.get) //=> 130 数値以外を渡した場合は下記のような例外になる。 val result = new Sample().parse("abc") println(result.get) //=> java.lang.Run
筑波大学第三学群情報学類を卒業したのち、現在は、筑波大学大学院システム情報工学研究科コンピュータサイエンス専攻博士後期課程3年。プログラミング言語や処理系に強い興味を持っている。現在の研究テーマは、プログラミング言語の構文解析アルゴリズム。Scala勉強会を不定期で行うなど、研究の合間にScalaの普及活動を行っている。 Scalaにはパーザコンビネータライブラリという、構文解析を行うための専用ライブラリが存在します。今回は、前回に説明したHello, World!パーザをより簡潔に書けるように修正していくほか、JSONのサブセットのパーザの実装までを解説します。 Hello, World!パーザを改良してみる strメソッド - 文字列を直接扱えるように 前回説明したリスト5のパーザは、プリミティブとして1文字にマッチするパーザしか扱えなかったため、いちいちそれを~でつないでいくのが面倒
筑波大学第三学群情報学類を卒業したのち、現在は、筑波大学大学院システム情報工学研究科コンピュータサイエンス専攻博士後期課程3年。プログラミング言語や処理系に強い興味を持っている。現在の研究テーマは、プログラミング言語の構文解析アルゴリズム。Scala勉強会を不定期で行うなど、研究の合間にScalaの普及活動を行っている。 Scalaにはパーザコンビネータライブラリという、構文解析を行うための専用ライブラリが存在します。パーザコンビネータライブラリを使うことで、特定の用途に特化した設定ファイルやDSLのパーザを手書きで書くよりも簡単に書けるようになります。 本記事では、Scalaのパーザコンビネータライブラリの基本的な使い方から、パーザコンビネータを使ったJSONのサブセットのパーザの実装までを解説します。構文解析の実装手法に関する知識は前提としませんが、構文解析とはどのようなものか、という
Using text.parsec.indent to Parse an Indentation-Sensitive Language with Haskell’s Parsec Library I’ve been working on a toy language with Job Vranish. We decided that we wanted to use indentation to represent blocking instead of braces (like Python). We’re implementing our toy in Haskell using the Parsec parser-combinator library. Luckily, there’s a companion library that handles indentation pars
This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.
Haskell で parser を書くには (初心者編) 勝手に Haskell Advent Calendar 2011 Haskell Advent Calendar 2011 にはエントリーできませんでしたけど、一人寂しく「勝手に Haskell Advent Calendar 2011」を開催して、わくわくクリスマスを待ちたいと思います。 目的: Parsec3 と attoparsec の基本的使用法, Applicative スタイルを習得する 前置き: Haskell で parser を書くにはどうすればいいのでしょうか? 私は、これを勉強すべく情報源を探しましたが、一体どこからどう始めればいいのか分からず、非常に混乱しました。「この記事を読めば大体概要が全部分かる」という情報源が日本語でも英語でも見つけられなかったからです。なので自分でまとめてみることにしました。 (私
The document describes how to build a parser for Backus-Naur Form (BNF) grammars in Haskell using the attoparsec parsing library. It defines types and parsers to represent BNF syntax, rules, expressions, lists and terms. The parsers use functions like spaces, string, text from attoparsec to parse individual components and combine them using operators like <*>, <|> to build up the full BNF grammar
コンパイラ屋にとってのFizzBuzzであるbrainfuckを(今更)Haskellで実装してみる。 Haskell実装は型レベルで書いたりピュアに書いたり色々だけど、ここではParsec3の機能を使ってパースと評価を同時にやってみる。 参考サイトHaskell で Brainf*ck interpreter Brainfuck - Wikipedia Parsec 3活用事例: Keepalived構文チェッカ ソースmodule BrainFuck where import Text.Parsec import Control.Applicative hiding ((),many,optional) import Control.Monad.Trans (liftIO) import Control.Arrow (first, second) import Control.Mona
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く