My Parser Project
CommandAPIを用いて生成したプロセスの標準入出力を管理するプログラムを書いていて、 その実験用に登場した「DesperatelyRustyToolBox」が 独自のコマンドラインを持つプログラムであった。
このプログラムをもっと拡張できるよう、高度な構文解析が必要と考えて登場したのがこのプロジェクト。
他にも登場経緯はあるが割愛。
自分用標準構成
自分用とあるが、実際rustで開発するにあたって必要であるカスタム型、便利ツール、開発方法、モデルを定義したもの。
要素は以下の通り
- CI/CDを実現するためにGithubActionsを積極採用
cargo build
とcargo test
を自動化。さらに、cargo doc
も自動化。
mainにマージされた時はクリーンなコードを保てる。 - テスト駆動開発で開発を行う
せっかくCI/CDでテストの自動化を行ったんだから、書かないわけにはいかない。
公式にもある通り、テスト駆動開発で目標の見える化を実現。 - エラートレイトを実装したオリジナルのカスタムエラー型を用意
ちゃんとsourceまであるならsourceまで実現。
エラー発生箇所の特定を容易にするだけでなく、
From
の実装で?
シュガーシンタックスに対応、コードがより見やすく。 - 一般的なブランチモデルを採用
いわゆる
git flow
に基づいたブランチモデルを採用する。
また、名前規則やコメント規則等々も今後まとめていきたい。
最終目標
このプロジェクトを使い回していけるように頑張りたい。
参考とか
- Rust でパーサコンビネータを作ってみる/nojima様
パーサーコンビネータの基本のきがここに載ってます。とても参考になります。
当プロジェクトでは部分的に実装を変えたりしてるが、ほとんど参考にして作ってます。 - BNFや構文解析についてのメモ
四則演算パーサー実装時に参考にしました。