2021-10-23: 後方参照の展開の実装を公開した
やったこと
ReDoS
後方参照の展開の実装をとりあえず公開した。
https://github.com/MakeNowJust-Sandbox/20211018-unref
昨日困っていたループ中の空文字列になる場合の除去は、変換後の正規表現から空文字列になる部分とそうでない部分を分離する関数を作って (/a|b|(?=c)|(?!d)|e|f/ → /a|b/, /(?=c)|(?!d)/, /e|f/ のように動く)、空文字列でない部分だけを取り出すようにした。
感覚で実装したけど問題ないと思う。
あとは適当に Scala.js で Web UI をつけて色々試しやすくした。
何か問題のあるケースがないか探していきたい。
それと、せっかくなので Scala 3 を使ってみることにした。
途中まで普通に Scala 2 で書いていたので、気合で書き直したのだけど、結構悪くない。
というかこうも sealed class があると enum が便利だ。
インデント構文なんかは enum と合わせると match 式の見た目が定義と同じようになって悪くない。
総合的には可読性は下がる気もするけど。
というか、一箇所ミスとパーズエラーが後方にも伝搬しやすい気がするのが厄介だな。
あと Scala 3 の新しい Scaladoc の見た目は好き。Markdown で書けるのも良い。
+ とかの繰り返しの構文と文字クラス、後読みの実装も問題なくやれることを確認したら recheck の方に実装するフェーズに行こう、と思っている。
結構大変な気がしてきた。
シャニ
3rd福岡2日目以降モチベが死んでいるので今回は見送ることにする。
ここ最近もなんか色々あってなぁ、という。
ミリシタ
まだ5万ptくらいしか集まっていなくてヤバい。
さいころの方はどうにかなりそうだけど、ポイントは間に合うのだろうか‥‥。