2010-02-01から1ヶ月間の記事一覧

IPA辞書から無駄な項目を省く(MeCab)

MeCabのサイトからダウンロードできるIPA辞書には、無駄な項目(単語)が若干含まれている。 ※ '無駄'とは普通の形態素解析しか行わない限り。N-Best解などの結果を使いたい場合は別。 # IPA辞書のダウンロードディレクトリに移動 $ cd mecab-ipadic-2.7.0-200…

errno文字列表現取得関数

sbclを使って、errnoの値に対応するメッセージを簡単に取得する方法。 sb-int:strerror関数を使う。 ;; errno=22の場合 > (sb-int:strerror 22) --> "Invalid argument" ;; errno=2の場合 > (sb-int:strerror 2) --> "No such file or directory"

コムソート

llvmのチュートリアルの続きを読もうと思ったら、今はドキュメント関連のページがエラーで見れなくなっていたので、代わりに前から少し気になっていたコムソートを実装してみることにする。 参考サイト: コムソート - Wikipedia(最終更新 2009年11月29日 (日…

llvm : tutorial : jit

チュートリアル第四章『4. Kaleidoscope: Adding JIT and Optimizer Support — LLVM 3.4 documentation』の2。タイトルにはJITとあるが、僕のこれまでの進め方ではチュートリアル通りのJITは実現できないので、似たような動作をする方法でごまかす。 実装 …

Thunderbirdのメール(メッセージ)を検索・選択するURLプロトコルの追加方法

昨晩から、自分では使わないThunderbirdの拡張機能周りを何故かいろいろ調べていたので、そのメモ。 やりたいこと HTMLに記述された次のようなリンクが記述されているとする。 <a href="mailmsg://HelloWorld">件名に「HelloWorld」を含むメールを検索する</a> このリンクをクリックすると、thun…

llvm : tutorial : optimize

チュートリアル第四章『4. Kaleidoscope: Adding JIT and Optimizer Support — LLVM 3.4 documentation』。 タイトルの通り、ここではJIT(を用いたRead-Eval-Print-Loop)とoptimizeがKaleidoscopeに加わっている。 前者は少しやっかいなので、分割して今回は…

llvm : tutorial : code generation

llvmのチュートリアルの続き。 今回はパースして得られた抽象構文木から、llvmの(llvm IRの?)コードを生成する。 概要? オリジナルのチュートリアルでは、コード生成にC++のビルダクラスが使われているが、common lisp用のそういったモジュールは用意されて…

llvm : tutorial : lexer,parser

llvmに関する基本的な(?)ドキュメントには一通り目を通した感じなので、次は『LLVM Tutorial』に沿って、Kaleidoscopeという言語を実装してみることにする。 上記チュートリアルでは実装言語として、C++及びOCamlが用いられていたが、自分はcommon lispが一…

equal-case

equal等値なキーを扱えるようにしたcase。 主にstring型に対して適用することを想定。 ;; TODO: 重複キーのチェック(警告)をつけるべき (defmacro equal-case (expr &rest clauses) (let ((v (gensym))) `(let ((,v ,expr)) (cond ,@(stable-sort (mapcar (l…

llvm : 例外処理

llvm(2.6)での例外処理。 例外処理のドキュメン*1は一応用意されているのだが、簡潔かつ実例が皆無なので、試すのに結構苦労した。 以下は、その簡単なまとめとメモ。 llvmでの例外処理の種類 llvmであらかじめサポートされている(?)例外処理の方法は三つ。 …