読者です 読者をやめる 読者になる 読者になる

M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

PygmentsのRegexLexerをJavaで写経(?)してみた

f:id:m12i:20140914172913p:plain

このかんPythonの復習やらコードリーディングなんかを試みていて、その過程でもともとJavaであこれやってきた字句解析/構文解析についての関心も手伝って、構文強調ライブラリであるPygmentsのコードやリファレンスを目にする機会があった。

そのリファレンスの1ページ"Write your own lexer" 中で登場したのがRegexLexer。実装コードを眺めているうちにJavaにポーティングしたくなった。Pygments全体ではちょっと膨大すぎるけれど、このクラスに限定すれば何とかなるかもと。

結局かなり時間をかけてしまったが何となく(?)、それっぽく(?)、できたみたいなのでGithubで公開中

もともとのPythonの実装で字句解析結果はyield文で順次呼び出し元に返すしくみになっている部分は、事前にすべて解析しきって作成したリストを返すような安易な実装にするとシステム負荷や性能劣化の不安があったので、BlockingQueueを仲介役にした非同期処理に変更したりした。

そこらへん考慮をしながらつくったためか、以前RubyのJykellをJava化しようとしたときよりも苦労した感が大きい。

このオブジェクトを中核として手製の構文解析ライブラリやそれを利用した用途別のライブラリたちをまた見直しをかけてみたいなーと思っている。


TSVファイルのパースとTSVデータ操作のためのAPI - M12i.


JP1/AJS2ユニット定義情報パーサ・ライブラリ - M12i.


シンプルなクエリ処理ライブラリを作ってみた - M12i.