Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
UNTIL. LT #0x07 n4mlz
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
n4mlz
May 17, 2025
1.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UNTIL. LT #0x07 n4mlz
n4mlz
May 17, 2025
More Decks by n4mlz
See All by n4mlz
自作OSでLinuxコンテナを動かす
n4mlz
1
3.8k
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
420
NUMA環境とコンテナランタイム ― youki における Linux Memory Policy 実装
n4mlz
1
1.5k
Featured
See All Featured
Odyssey Design
rkendrick25
PRO
2
750
Crafting Experiences
bethany
1
240
The Limits of Empathy - UXLibs8
cassininazir
1
600
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
660
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
Chasing Engaging Ingredients in Design
codingconduct
0
260
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
360
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
440
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Transcript
TypeScript 小ネタ: 型のみで実装する正規表現エンジン n4mlz GitHub: https://github.com/n4mlz Twitter: https://twitter.com/n4mlz UNTIL. LT
#0x07 2025-05-17
2 後で書く 自己紹介
3 TypeScript の型はチューリング完全 ⚫ 例: 数独チェッカー TypeScript の型 ⚫ 例:
Brainfuck インタプリタ https://github.com/gruhn/typescript-sudoku/ https://github.com/susisu/typefuck
4 TypeScript の型はチューリング完全 TypeScript の型 うおお、俺もなんか作りてえ 正規表現エンジン作るぞ
5 TypeScript の型だけで正規表現エンジン作った ⚫ Regex<Pattern, Text> により true または false
に評価される 成果物
6 準備: 論理演算の定義 ⚫ 条件型 (Conditional Types) を使用して分岐を作る 型で正規表現エンジンを作る
7 準備: 文字列操作の定義 ⚫ テンプレートリテラル型 (Template Literal Types) を使用して 先頭文字の抽出、残りの文字の抽出、文字の結合を作る
型で正規表現エンジンを作る
8 1文字に対するマッチング ⚫ Pattern も Text も1文字であると仮定しているので、 ワイルドカード (.) のみ気にすればよい
型で正規表現エンジンを作る
9 ? や * を先頭に含む文字列に対応する ⚫ ? や * がマッチした場合、その後は自身を再帰的に適用することで
「文字列」に対応 型で正規表現エンジンを作る
10 文字の終端に対応する ⚫ ? や * を含む文字列を取りまとめ、 パターンの終端が $ であるかをチェックする
型で正規表現エンジンを作る
11 マッチングの開始点を作る ⚫ 先頭が ^ でない場合: ‹Pattern› と ^.*‹Pattern› が等価であること
を利用し、任意の開始点からのマッチングに対応する (テク) ⚫ Regexp<“bc”, “abcd”> が true に評価されるようになる 型で正規表現エンジンを作る
12 完成 ⚫ 型のみで簡易的な正規表現エンジンを作ることができた 完成
13 最後に Gist に公開しています! 気になったら見ていってください https://gist.github.com/n4mlz 次はスタックマシンや一次元セルオートマトンを作りたい