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
Cybozu
PRO
March 14, 2025
Technology
1
30
Wasmで拡張できる軽量マークアップ⾔語Brack(後編)
第14期サイボウズ・ラボユース成果発表会
https://cybozu.connpass.com/event/347931/
上野 幹太
Cybozu
PRO
March 14, 2025
Tweet
Share
More Decks by Cybozu
See All by Cybozu
PSIRTでAIテストを実施するまでの道のり
cybozuinsideout
PRO
0
85
無理なく続けるサイボウズの社内勉強会
cybozuinsideout
PRO
1
1.2k
分散システムにおける 無兆候データ破損の影響について
cybozuinsideout
PRO
1
57
タンパク質構造のシミュレーションソフトウェア試行錯誤
cybozuinsideout
PRO
1
46
読みやすいアセンブリ言語
cybozuinsideout
PRO
1
38
Wasmで拡張できる軽量マークアップ⾔語Brack(前編)
cybozuinsideout
PRO
1
35
kintone開発組織のAWSエンジニアの紹介
cybozuinsideout
PRO
0
230
kintone開発組織のサービスプラットフォームチームの紹介
cybozuinsideout
PRO
0
120
サイボウズフロントエンドエキスパートチームについて / FrontendExpert Team
cybozuinsideout
PRO
6
41k
Other Decks in Technology
See All in Technology
TerraformをSaaSで使うとAzureの運用がこんなに楽ちん!HCP Terraformって何?
mnakabayashi
0
120
Snowflake Intelligenceで実現できるノーコードAI活用
takumimukaiyama
1
210
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
770
CIでのgolangci-lintの実行を約90%削減した話
kazukihayase
0
170
開発効率と信頼性を両立する Ubieのプラットフォームエンジニアリング
teru0x1
0
140
菸酒生在 LINE Taiwan 的後端雙刀流
line_developers_tw
PRO
0
130
OpenTelemetry Collector internals
ymotongpoo
5
530
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
280
Model Mondays S2E01: Advanced Reasoning
nitya
0
320
TODAY 看世界(?) 是我們在看扣啦!
line_developers_tw
PRO
0
150
Kotlinで学ぶ 代数的データ型
ysknsid25
5
1.1k
“プロダクトを好きになれるか“も QAエンジニア転職の大事な判断基準だと思ったの
tomodakengo
0
130
Featured
See All Featured
Fireside Chat
paigeccino
37
3.5k
Why Our Code Smells
bkeepers
PRO
337
57k
We Have a Design System, Now What?
morganepeng
52
7.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
Producing Creativity
orderedlist
PRO
346
40k
Gamification - CAS2011
davidbonilla
81
5.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
What's in a price? How to price your products and services
michaelherold
245
12k
Navigating Team Friction
lara
186
15k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Writing Fast Ruby
sferik
628
61k
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. 展望とまとめ(後半)