「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のサブセットのパーザの実装までを解説します。構文解析の実装手法に関する知識は前提としませんが、構文解析とはどのようなものか、という
なんびとたりとも俺の前は走らせねぇ ガチバトルです。 rapidjson - A fast JSON parser/generator for C++ with both SAX/DOM style API - Google Project Hosting Rapidjson is an attempt to create the fastest JSON parser and generator. Small but complete. Support... https://code.google.com/p/rapidjson/ fastest をうたうとは度胸があるなーと思いながら、半信半疑で試してみました。 rapidjson も picojson 同様に、ヘッダファイルだけあればコンパイル出来る C++ 向け JSON パーサ(およびシリアライザ)です。 まずは rapidjso
ECMAScript tools composable modules and transpiler infrastructure Yusuke Suzuki (a.k.a Constellation) self introduction ECMAScript engine iv / lv5 (written in C++) owner Esprima committer Escodegen owner Esmangle owner background ECMAScript everywhere ECMAScript is now widely used client side server side databases And ECMAScript tools are also developed widely ECMAScript tools tools UglifyJS closu
前回は JSMN というのを試したけど、今度も matsuu さんのブクマから。。。 parson Lightweight json parser and reader written in C. http://kgabis.github.com/parson/ 特徴は 軽い (2ファイルだけ) 単純なAPI ドット記法による json 値のアドレッシング (C言語の構造体やOO言語のオブジェクトに似た感じ。例: "objectA.objectB.value") C89 コンパティブル テストスーツ 前回の JSMN とは違い、メモリを動的に確保するタイプ。DOM の様にルートノードから探索を始め、最終的にルートノードを指定してメモリを開放する。 今回もtwitterのタイムラインをパースしよう。 #include <assert.h> #include <string.h> #inclu
で、esprima とか関連のツール群は Mozilla の Parser API の AST 形式をサポートしています。詳細はここのへんかな。 https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API で、escodegen があるということは Parser API 形式の AST をはけば、そこから JS を生成できるってことですね。しかも escodegen は source-map の生成にも対応しているので、エラーの処理もらくちんで、実行時エラーがおきても、「ああ、JSでかいておけばよかった。。」とはならない(という未来がくることになっています) CoffeeScriptRedux というカッフィースクリプトのあたらし版をつくってるプロジェクトでは実際に CoffeeScript code => [parse
以下のようなコードを実行すると console.log([ [1,1,8] [2,1,16] ]);このような結果になる。 [ undefined ]アレレーってなってたんだけど kazuho さんにきいたところ、 [1,1,8][2,1,16] => ([1,1,8])[(2,1,16)] => ([1,1,8])[16] => undefinedってことでした。 こんな時、Perl Monger ならとりあえず B::Deparse することによって解決の糸口をさがすんだけど、そういうの EcmaScript でどうすんすかね、ってなことを kazuho さんにきいたところ、esprima っていう es のパーサーがあるよって教えてもらったので、AST はとりだせたんだけど、AST をみても埒があかないので、AST からソースにおとす君がないかなーとさがしたところ const なんと
Esprima is a high performance, standard-compliant ECMAScript parser written in ECMAScript (also popularly known as JavaScript). Features Full support for ECMAScript 2019 (ECMA-262 10th Edition) Sensible syntax tree format, with optional node location info Experimental support for JSX, a syntax extension for React Heavily tested (~1600 tests with full code coverage) API Esprima can be used to perfo
Apache Tika - a content analysis toolkit The Apache Tika™ toolkit detects and extracts metadata and text from over a thousand different file types (such as PPT, XLS, and PDF). All of these file types can be parsed through a single interface, making Tika useful for search engine indexing, content analysis, translation, and much more. You can find the latest release on the download page. Please see
The Apache Tika toolkit detects and extracts metadata and structured text content from various documents. Apache Tikaの初のメジャーリリースとなる「Apache Tika 1.0」が公開された。Apache TikaはJavaで開発されたドキュメント分析およびメタデータ抽出ツールキット。さまざまなドキュメント形式に対応しており、対象データからメタデータの抽出を実施する。Tikaは以前はApache Luceneのサブプロジェクトだったが、現在ではApacheソフトウェアファウンデーション直下のプロジェクトとして扱われている。 Apache Tikaが対応しているドキュメントはHTML、XHTML、OOXML、ODF、Microsoft Office (OLE 2、OOXML)
JavaScript syntax tree visualization with Esprima Apr 4, 2012 2 min read #code #esprima #javascript #parser One little feature I added to Esprima parser demo was syntax tree visualization (using YUI TreeView). While it is already possible to see the JSON version of the parsed AST, often a much more visual representation improves the syntax analysis workflow. It is also more educational. An example
http://tokuhirom.github.com/nanoircparser/ C++ で 1ファイルでうごく IRC の protocol parser を書いたので github にアップしておきました。 IRC のクライアントライブラリは、イベントのハンドリングが主で、ライブラリになっていなくても手でくみたてればわりと十分だったりするので、面倒な protocol parser の部分だけさくっとかいてみました。 ベンチマークはとっていませんが、速度はそれなりにでてるんじゃないかとおもいます。client side で気軽にうごかすボット、みたいなシーンを想定しているので、わりと富豪的な実装になっていますけれど。 今回、工夫した点としては re2c を利用してパーズしてます。このおかげで非常に見通しがいいコードになってます。RFC にのっている BNF のほとんどそのままなので
Parses Javascript into an Abstract Syntax Tree (AST). Initially intended as frontend to hjsmin. Note: Version 0.5.0 breaks compatibility with prior versions, the AST has been reworked to allow round trip processing of JavaScript. [Skip to Readme]
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く