PygmentsのRegexLexerをJavaで写経(?)してみた
このかんPythonの復習やらコードリーディングなんかを試みていて、その過程でもともとJavaであこれやってきた字句解析/構文解析についての関心も手伝って、構文強調ライブラリであるPygmentsのコードやリファレンスを目にする機会があった。
そのリファレンスの1ページ"Write your own lexer" 中で登場したのがRegexLexer。実装コードを眺めているうちにJavaにポーティングしたくなった。Pygments全体ではちょっと膨大すぎるけれど、このクラスに限定すれば何とかなるかもと。
結局かなり時間をかけてしまったが何となく(?)、それっぽく(?)、できたみたいなのでGithubで公開中。
もともとのPythonの実装で字句解析結果はyield文で順次呼び出し元に返すしくみになっている部分は、事前にすべて解析しきって作成したリストを返すような安易な実装にするとシステム負荷や性能劣化の不安があったので、BlockingQueueを仲介役にした非同期処理に変更したりした。
そこらへん考慮をしながらつくったためか、以前RubyのJykellをJava化しようとしたときよりも苦労した感が大きい。
このオブジェクトを中核として手製の構文解析ライブラリやそれを利用した用途別のライブラリたちをまた見直しをかけてみたいなーと思っている。
TSVファイルのパースとTSVデータ操作のためのAPI - M12i.