タグ

parserに関するhiroyukimのブックマーク (14)

  • Java でちょっとしたパーサーを実装するときは ANTLR4 が便利 - tokuhirom's blog

    Java でちょっとしたDSLパーサーを実装するときはANTLR4 が最近もデファクトスタンダードなのかなあ。と思っています。 ANTLR4 はパーサージェネレーターです。BNF っぽい記法で書いたらいい感じに生成してくれます。手書きパーサーとかに比べると管理しやすい気がします。 gradle はコアプラグインに antlr プラグインがあるので簡単に利用できます。 https://docs.gradle.org/current/userguide/antlr_plugin.html group 'com.example' apply plugin: 'java' apply plugin: 'antlr' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { antlr "org.antlr:an

  • Big Sky :: C言語から分かりやすいAPIで扱える JSON パーサ「cJSON」

    おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。 最速と言われる JSON パーサ「rapidjson」が当に爆速なのか試してみた。 C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。 C言語から使えるJSONパーサ、JSMNを試してみた。 何も見ずにC++でjsonパーサが書けるか試してみた。 ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い! C言語から使えるJSONパーサ、jansson がとても直感的で良い Big Sky :: C++ で STL フレンドリに扱えるJSONパーサ「json.hpp」 結

    Big Sky :: C言語から分かりやすいAPIで扱える JSON パーサ「cJSON」
    hiroyukim
    hiroyukim 2017/05/10
    json parserコレクターになってる
  • Writing An Interpreter In Goを読んだ

    Thorsten Ballによる“Writing An Interpreter In Go”を読んだ. 技術界隈のブログを見ているとたまにSteve Yeggeの「If you don’t know how compilers work, then you don’t know how computers work」という言葉に出会う.その度に学生のときにコンパイラの授業を受けなかったこと後悔し,社会人になって挑戦しようとして挫折したことを思い出して悲しい気持ちになる.@rui314さんのCコンパイラをスクラッチから開発してみたを読んではかっこいいなと思いつつ僕には無理だなあと心が折れていた. どの言語を書いていてもコンパイラ(もしくはInterpreter)は切っても離せないものであり内部の動きがどうなっているかを知っておきたいという欲求はプログラマーなら誰しもあると思う(少なくとも僕に

  • JavaScriptでパーサコンビネータのコンセプトを理解する(「正規表現だけに頼ってはいけない」の続き) - id:anatooのブログ

    前回の記事の続き。前回は、正規表現が使えない時はパーサコンビネータを使ってみると良いということを書いた。 パーサコンビネータのためのライブラリは、以下のように各言語ごとにいくつかある。 JavaScript - Parsimmon Ruby - rparsec treetop Python - parsy PHP - PHPPEG 各言語でいくつかあるのだが、正規表現と違ってパーサコンビネータには統一的な書き方があるわけではないし、ライブラリによって使い方も様々である。なので、今まで正規表現だけ使ってきた開発者がちょっと使ってみようと思っても、使い方がよくわからずに面らってしまうことがある。 パーサコンビネータはテキストをパースするための非常に強力な仕組みだが、その背後にある考え方を理解しなければこれらのパーサコンビネータのライブラリを使う際の障害になるだろう。逆に言うと、それさえ理解で

    JavaScriptでパーサコンビネータのコンセプトを理解する(「正規表現だけに頼ってはいけない」の続き) - id:anatooのブログ
  • groonga/mroongaのトークナイザー(tokenizer)の挙動を追ってみる - Y-Ken Studio

    トークナイズ機能は、全文検索機能に無くてはならない機能です。 欧米圏であれば、最低限スペース区切りに対応していれば実用的に使えます。 しかし、中国語、日語、韓国語への対応をする場合には、CJK対応言われる実装が必要です。 汎用的な分かち書き(トークナイズ)方法としては、n-gram方式があり、uni-gramやbi-gram、tri-gramが有名です。 n-gramは汎用ではありますが、機械的に分解するが故に精度があまり高くなく、語彙の部分一致検索でしかありません。 そこで、品詞毎にトークナイズの出来る、MeCabやJumanといった形態素解析エンジンの出番となります。 mroongaでは、groonga-tokenizer-mecabというパッケージを追加することで、形態素解析エンジンのMeCabに対応します。 その他、Bigramの独自拡張にも対応しているようなので、それぞれどのよ

    groonga/mroongaのトークナイザー(tokenizer)の挙動を追ってみる - Y-Ken Studio
  • argparseの使い方とoptparseとの違い - Qiita

    以前、OptParserの使い方として記事を書いたが、どうやらargparse.ArgumentParserの方がなういらしい なのでargparse.ArgumentParserの使い方のメモ # -*- coding:utf-8 -*- from optparse import OptionParser from argparse import ArgumentParser if __name__ == '__main__': """ コマンドエラー時に表示する文字列 """ desc = u'{0} [Args] [Options]\nDetailed options -h or --help'.format(__file__) # %progは出力できない # usage = u'%prog [Args] [Options]\nDetailed options -h or --he

    argparseの使い方とoptparseとの違い - Qiita
  • [セキュリティ]XMLをparseするアプリのセキュリティ|2009-06-21 - T.Teradaの日記

    「XML」「セキュリティ」という単語でWeb検索すると、多くヒットするのはXMLデジタル署名やXML暗号などを説明したWebページです。 日の日記では、それとはちょっと違うテーマ(XXEと呼ばれる攻撃)について書きます。 脆弱なコードと攻撃方法 さっそく脆弱性があるサンプルプログラムです。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import org.w3c.dom.*; import org.apache.xerces.parsers.*; import org.xml.sax.*; public class Test1 extends HttpServlet { public void service(HttpServletRequest request, HttpServletRe

    [セキュリティ]XMLをparseするアプリのセキュリティ|2009-06-21 - T.Teradaの日記
  • argparseを使ってみた - そこはかとなく書くよ。

    追記: t2yさんが翻訳してくださいました。 argparseコマンドラインオプションと引数の解析 python 2.7からコマンドラインの引数を解釈するargparseモジュールが標準で入りました。 従来使われてきたoptparseは廃止されます。ただし、広く使われているところから他の廃止されるモジュールとは異なり消されることはなく、警告も標準では出ません。 optparseからargparseに移行する理由や廃止の進め方はPEP 389に記載されています。 以下にPEP 389の和訳を(訳に自信がない場所がありますが)行ないましたので参考にしてください。 http://www.tdoc.info/PEP-ja/389.html というわけで、ざっとargparseの使い方を勉強したのでここに公開します。間違ってたらご指摘ください。 なお、ちゃんとしたドキュメントは http://doc

    argparseを使ってみた - そこはかとなく書くよ。
  • Scala の Parser を試したらハマったのでまとめておく。 - 偏見プログラマの語り!

    以前、Scala の Parser を試したんですがハマってしまったので、ハマり記念ということで記事にしておこうと思います。 ちなみに、Scala のパーサコンビネータについて知りたい人は僕のこの記事よりも @kmizu さんのスライドを読んだ方が良いように思います。 ■ Scala のパーサ概要 まず import しておきたいのは scala.util.parsing.combinator.Parsers です。 主な手順は次の通り。 1.Parsers オブジェクトを作る。 2.Parsers.Parser[ Result ] のオブジェクトを作る。ここで Result はパース結果の型。 3.2.で作ったオブジェクトにパース対象のシーケンスオブジェクトを渡す。 4.3.の結果得られるものがパース結果。 ■ 簡単なトコからいきましょ まず Char のシーケンスを読んで MyData

    Scala の Parser を試したらハマったのでまとめておく。 - 偏見プログラマの語り!
  • Scalaのパーサーコンビネータをつかってみました - Qiita

    はじめに Scalaのパーサーコンビネータをつかってみました。ここでは英文を解析したいと思います。しかし、汎用的な構文解析は難しいので、特定の英文を解析します。特定の英文以外は解析できないので、少し間抜けなパーサです。 仕様 このパーサーは特定の英文を解析します。次のような英文は解析できますが、それ以外の英文は解析できません。 I LOVE YOU I LOVE MUSIC WE LOVE YOU WE LOVE MUSIC 実装 字句解析はライブラリが処理しています。構文解析は演算子を使って実装しました。ここでは意味解析についてはふれていません。 import scala.util.parsing.combinator._ object App { def main(args : Array[String]) : Unit = { GrammarParser("I LOVE YOU")

    Scalaのパーサーコンビネータをつかってみました - Qiita
  • ScalaでWebスクレイピングしようとしたメモ | mwSoft

    概要 極力Scalaの標準機能を使って、HTMLスクレイピングしてみようと思っていろいろ試したメモ。手探り状態なので、かなりうだうだとしています。 HTMLパーサはいろんな意味で手に負えないので、Validator.nu HTML Parserを使用。 前書き Scalaは標準でXPathっぽくXMLを扱う機能が用意されている。ので、Webスクレイピングという用途にはわりと向いていると思う。 フルセットのXPathのような多様な指定ができるわけではないので、専用のライブラリを使った方がかゆいところに手は届く部分も多いけど、細かいライブラリの使い方を勉強しなくても、普段使ってるScalaのCollectionみたいな気分で要素を操作できるのは、なかなかに心地良い。 ScalaのXML操作の基 ScalaでXMLを扱う場合は、scala.xml配下のXML、Elem、Node、NodeSe

  • Perl で簡単にパーザを書く - tokuhirom's blog

    パーザを書こうという場合、Parse::RecDecsent のようなモジュールを使うのが一般的だが、Perl5 の正規表現は強力すぎるため、そんなものに頼らなくても超絶簡単にパーザを実装することが可能だ。 以下に、四則演算のパーザを示す。 use 5.018000; package Calc { use Carp (); sub parse { local $_ = $_[1]; _parse_expr(); } sub err { my ($msg) = @_; my $ret = join('', $_, "\n", (" " x pos()) . "^\n", $msg, "\n", ); Carp::croak $ret; } sub _parse_expr { my @nodes; until (/\G\s*\z/gc) { my $m = _parse_add() or do

  • Bison 1.28: Bison構文解析器のアルゴリズム

    URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=bison-ja&node=Algorithm" "bison/Bison構文解析器のアルゴリズム"へのコメント(無し) Bison構文解析器は、トークンを読むと、トークンの意味値とともにスタックに積みます。 このスタックを構文解析器スタック(parser stack)と呼びます。 トークンをスタックに積むことを、伝統的に シフト(shifting)と呼びます。 たとえば、中間記法電卓が、`1 + 5 *'をすでに読んでいて、 `3'を受け取ったと仮定します。 スタックには4個の要素があり、トークンそれぞれがシフトされています。 しかし、スタックに常に読み込まれたトークンそれぞれに対する 要素があるわけではありません。 最後のn個のトークンとグループが文法規則に当てはまる場合には、 それらは規則

  • Parse::RecDescent 使ってみた - amari3の日記

    最近、字句解析やら構文解析に興味があるので、perl の強力なパーサ Parse::RecDescent を使ってみた。まずは簡単に足し算の文法を考えてみる。 バッカス・ナウア記法を使って書いていますが、勉強を始めたばかりなので誤りがあるかもしれません。 expression ::= atom + expression | atom atom ::= [0-9]+ expression の定義 atom + expression もしくは atom atom の定義 0〜9の1回以上の繰り返し これを、Parse::RecDescent を使って実装したのが、以下のソースコードとなる。 #!/usr/bin/env perl use strict; use warnings; use feature qw/say/; use Parse::RecDescent; my $grammar =

    Parse::RecDescent 使ってみた - amari3の日記
  • 1