Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Wasmで拡張できる軽量マークアップ⾔語Brack(後編)
Search
Cybozu
PRO
March 14, 2025
Technology
160
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Wasmで拡張できる軽量マークアップ⾔語Brack(後編)
第14期サイボウズ・ラボユース成果発表会
https://cybozu.connpass.com/event/347931/
上野 幹太
Cybozu
PRO
March 14, 2025
More Decks by Cybozu
See All by Cybozu
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
12
96k
新卒1年目QAが リリース基準の"なぜ"をたどってみた
cybozuinsideout
PRO
1
990
kintone リサーチ副部/UXリサーチャー 業務紹介
cybozuinsideout
PRO
0
220
私たちが『JaSST協賛』から『外部コネクト』チームになった理由
cybozuinsideout
PRO
0
640
LLMでもいつものテスト技術〜意外と半分はこれまでのテストでした〜
cybozuinsideout
PRO
1
1.2k
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
1
1.8k
LLMアプリの品質保証
cybozuinsideout
PRO
1
920
技術広報チームに丸投げしない!「一緒につくる」スポンサー活動
cybozuinsideout
PRO
0
330
テクニカルライター (グループウェア) について
cybozuinsideout
PRO
0
330
Other Decks in Technology
See All in Technology
デザインレビューは自動化できるのか?─ Flutter × Figma で UI 品質保証を考える
techiro
2
800
GCASアップデート(202607-202610)
techniczna
1
200
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
200
AIコーディングはじめました
miso
0
150
Kiro Crew 入門 (手を離しても進む仕事) | 目指せ Kiro マスター 11
inariku
PRO
3
470
登壇はいいぞ! 〜Kaigi on Railsに登壇して起きた3つの変化〜
occhi
0
110
AI AgentによるEmbedded SREの取り組み
tgidgd
1
350
Claude Codeで作ったアプリを安全に公開する/Built with Claude Japan 2026
yoshidashingo
0
190
E2Eってつらくないですか?E2Eの管理コストを下げる手段とその実践
akaboshinit
6
3k
続・ソフトウェアアーキテクトのための意思決定術: Decision Readiness, Revisited — When AI Changes the Economics of Software Architecture
snoozer05
PRO
9
2.6k
SSFの現在地 ― CAEP/RISCからAI Identityへ
oidfj
0
120
re:Invent の去年のスケジュールを公開します!
miu_crescent
PRO
0
310
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
470
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Prompt Engineering for Job Search
mfonobong
0
580
30 Presentation Tips
portentint
PRO
1
460
Into the Great Unknown - MozCon
thekraken
41
2.8k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
The Limits of Empathy - UXLibs8
cassininazir
2
770
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
880
Practical Orchestrator
shlominoach
192
12k
Producing Creativity
orderedlist
PRO
348
41k
We Have a Design System, Now What?
morganepeng
55
8.4k
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. 展望とまとめ(後半)