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
Wasmで拡張できる軽量マークアップ⾔語Brack(後編)
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Cybozu
PRO
March 14, 2025
Technology
110
1
Share
Wasmで拡張できる軽量マークアップ⾔語Brack(後編)
第14期サイボウズ・ラボユース成果発表会
https://cybozu.connpass.com/event/347931/
上野 幹太
Cybozu
PRO
March 14, 2025
More Decks by Cybozu
See All by Cybozu
kintone リサーチ副部/UXリサーチャー 業務紹介
cybozuinsideout
PRO
0
23
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
77k
私たちが『JaSST協賛』から『外部コネクト』チームになった理由
cybozuinsideout
PRO
0
160
LLMでもいつものテスト技術〜意外と半分はこれまでのテストでした〜
cybozuinsideout
PRO
1
430
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
1k
LLMアプリの品質保証
cybozuinsideout
PRO
1
450
技術広報チームに丸投げしない!「一緒につくる」スポンサー活動
cybozuinsideout
PRO
0
200
テクニカルライター (グループウェア) について
cybozuinsideout
PRO
0
170
つけまが降ってきた日
cybozuinsideout
PRO
1
640
Other Decks in Technology
See All in Technology
AIエージェント勉強会第3回 エージェンティックAIの時代がやってきた
ymiya55
0
180
「できない」のアウトプット 同人誌『精神を壊してからの』シリーズ出版を 通して得られたこと
comi190327
3
440
AIエージェント時代に必要な オペレーションマネージャーのロールとは
kentarofujii
0
230
OpenClawでPM業務を自動化
knishioka
2
350
DMBOKを使ってレバレジーズのデータマネジメントを評価した
leveragestech
0
490
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
GitHub Copilot CLI で Azure Portal to Bicep
tsubakimoto_s
0
300
TUNA Camp 2026 京都Stage ヒューリスティックアルゴリズム入門
terryu16
0
650
GitHub Advanced Security × Defender for Cloudで開発とSecOpsのサイロを超える: コードとクラウドをつなぐ、開発プラットフォームのセキュリティ
yuriemori
1
120
RGBに陥らないために -プロダクトの価値を届けるまで-
righttouch
PRO
0
130
40代からのアウトプット ― 経験は価値ある学びに変わる / 20260404 Naoki Takahashi
shift_evolve
PRO
3
480
FastMCP OAuth Proxy with Cognito
hironobuiga
3
230
Featured
See All Featured
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
110
Code Reviewing Like a Champion
maltzj
528
40k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
97
Bash Introduction
62gerente
615
210k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
140
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
190
We Have a Design System, Now What?
morganepeng
55
8.1k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Transcript
Wasmで拡張できる 軽量マークアップ言語 Brack (後編) 第14期サイボウズ・ラボユース成果発表会 2025.03.28 上野幹太 @uekann_ GitHub
自己紹介 31 @uekann @uekann_ https://uekann.com (準備中) 上野 幹太(Kanta Ueno) 🎓
所属 ・筑波大学情報学群情報科学類 B3 🐣 興味があること ・ブラックボックス最適化(CMA-ESなど) ・なんだろう...... 🍳 趣味 ・写真、スキー、散歩、音楽など
概要 32 ・開発中のマークアップ言語についてお話しします 📚 目次 マークアップ言語を自作する背景 1. ブログジェネレータの実装 2. ビルドツールの実装
3. プラグインシステムの実装 4. 展望とまとめ(前半) 5. Language Serverの導入 6. パーサの概要 7. エラートレラントなパーサの実装 8. 展望とまとめ(後半) 9.
6. Language Serverの導入 33
Language Serverとは 34 コード補完や診断、リファクタリング支援を行うバックエンド rust-analyzerなどが有名 入力補完 エラー表示 6. Language Serverの導入
https://code.visualstudio.com/api/language-extensions/language-server-extension-guide LSP (Language Server Protocol) 35 Microsoftが規定したLanguage Serverの通信仕様 (Language ServerそのものをLSPと呼ぶ風潮もありそう)
6. Language Serverの導入
LSP (Language Server Protocol) 36 Microsoftが規定したLanguage Serverの通信仕様 VSCodeでのエラー表示 Neovimでのエラー表示 6.
Language Serverの導入
LSP (Language Server Protocol) 37 Microsoftが規定したLanguage Serverの通信仕様 → BrackもLanguage Serverを作ろう!
Brackに関するドキュメントが充実していなくても、 Language Serverから得られる情報によって、 執筆体験が損なわれないようにしたい 6. Language Serverの導入
Language Serverの実装 38 作りました! 🥳 コンパイルエラー 存在しないプラグイン、コマンド 入力補完 etc... 6.
Language Serverの導入
Language Serverの実装 39 困りごと これはLanguage Serverの問題ではなく、コンパイラそのものが抱える問題 今回はLanguage Serverを実装したタイミングで表面化した 構文エラーが1つしか表示されない →
構文エラーが複数ある場合、1つ直すと別のエラーが出てくる。(つらい) 複数の構文エラーを同時にキャッチできるパーサを作ろう! 6. Language Serverの導入
7. パーサの概要 40
抽象構文木とは 41 構文としての意味を持つ木構造 言語の意味に関係ない情報を取 り除いた構文木 document stmt curly module command
arg stmt expr square 7. パーサの概要
再帰下降パーサ 42 document stmt curly { std . * Hello
} 7. パーサの概要
再帰下降パーサ 43 document stmt curly module { std . *
Hello } 7. パーサの概要
再帰下降パーサ 44 document stmt curly module command { std .
* Hello } 7. パーサの概要
再帰下降パーサ 45 document stmt curly module command arg { std
. * Hello } 7. パーサの概要
document stmt curly module command arg エラートレラントなパース 46 パースに失敗しても読み飛ばしてエラーを回収したい 7.
パーサの概要
document stmt curly module command arg エラートレラントなパース 47 パースに失敗しても読み飛ばしてエラーを回収したい ・どこまでASTを遡って
・どこまでトークンを読み飛ばして パースを再開する? ? 無限に条件分岐が必要... 7. パーサの概要
8. エラートレラントなパーサの実装 48
解決策 49 ASTを構成する際に、すでに木構造があれば解決! document stmt curly module command arg stmt
expr square 8. エラートレラントなパーサの実装
具象構文木(CST)の導入 50 document stmt curly module command arg stmt expr
square document ? stmt? curly? module? command? arg? stmt? expr? square? ゆるい規則に基づいて木構造(CST)を構成 ASTへの変換を試みる 8. エラートレラントなパーサの実装
CSTの規則 51 ・任意のトークン列から構成可能 ・正しい構文のドキュメントは正しく解釈する ・誤った構文のドキュメントも“可能な限りそれっぽい”木構造に落とす 8. エラートレラントなパーサの実装
具象構文木(CST)の導入 52 ASTのBNF(一部) CSTのBNF(一部) 規則、作りました お気持ち 上位のノードはできる限り 正しくあってほしいので、 厳しめの規則 8.
エラートレラントなパーサの実装
Language Serverでの表示 53 8. エラートレラントなパーサの実装
9. 展望とまとめ(後半) 54
55 展望(後半) ・Language Serverの機能拡充 Hover、Rename、補完... ・型チェック(?)の導入 tableコマンドなどの引数に特定のコマンドを指定したい場合などがある →コンパイラでチェックしたい 現在ASTから実行までの間に中間表現を導入することを検討し、 実装を始めているが、メリットが怪しくなってきました
・デバッグ環境、テスト環境の整備 現在毎回printデバッグをしていてつらい テストも抜けていたりする 9. 展望とまとめ(後半)
56 まとめ(後半) ・Language Serverを実装 パースエラーの表示、簡単な入力補完、引数の情報などを渡せるようになった 引数の個数が間違っている等の、パースエラー以外のコンパイルエラーを複数表示し たり、フォーマットやより賢い入力補完などは今後実装していきたい ・複数のパースエラーの検知 再帰下降パーサでは、パースに失敗した時どこまで処理を遡って再開すれば良いかわ からないので、ASTを構成することで一度別の木構造に落としておくことで、ASTへ
の変換に失敗した場合でも次にどこを見ればいいかわかるようにした 9. 展望とまとめ(後半)