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
38
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
90
無理なく続けるサイボウズの社内勉強会
cybozuinsideout
PRO
1
1.2k
分散システムにおける 無兆候データ破損の影響について
cybozuinsideout
PRO
1
62
タンパク質構造のシミュレーションソフトウェア試行錯誤
cybozuinsideout
PRO
1
49
読みやすいアセンブリ言語
cybozuinsideout
PRO
1
44
Wasmで拡張できる軽量マークアップ⾔語Brack(前編)
cybozuinsideout
PRO
1
39
kintone開発組織のAWSエンジニアの紹介
cybozuinsideout
PRO
0
240
kintone開発組織のサービスプラットフォームチームの紹介
cybozuinsideout
PRO
0
140
サイボウズフロントエンドエキスパートチームについて / FrontendExpert Team
cybozuinsideout
PRO
6
41k
Other Decks in Technology
See All in Technology
Liquid Glass革新とSwiftUI/UIKit進化
fumiyasac0921
0
240
250627 関西Ruby会議08 前夜祭 RejectKaigi「DJ on Ruby Ver.0.1」
msykd
PRO
2
330
セキュリティの民主化は何故必要なのか_AWS WAF 運用の 10 の苦悩から学ぶ
yoh
1
190
Witchcraft for Memory
pocke
1
470
Delegating the chores of authenticating users to Keycloak
ahus1
0
130
データプラットフォーム技術におけるメダリオンアーキテクチャという考え方/DataPlatformWithMedallionArchitecture
smdmts
5
650
CI/CD/IaC 久々に0から環境を作ったらこうなりました
kaz29
1
190
Welcome to the LLM Club
koic
0
190
Snowflake Summit 2025全体振り返り / Snowflake Summit 2025 Overall Review
mtpooh
2
410
Amazon ECS & AWS Fargate 運用アーキテクチャ2025 / Amazon ECS and AWS Fargate Ops Architecture 2025
iselegant
17
5.7k
Fabric + Databricks 2025.6 の最新情報ピックアップ
ryomaru0825
1
150
生成AI時代 文字コードを学ぶ意義を見出せるか?
hrsued
1
610
Featured
See All Featured
Visualization
eitanlees
146
16k
Writing Fast Ruby
sferik
628
62k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.8k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
The Cult of Friendly URLs
andyhume
79
6.5k
Become a Pro
speakerdeck
PRO
28
5.4k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Facilitating Awesome Meetings
lara
54
6.4k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Into the Great Unknown - MozCon
thekraken
39
1.9k
Balancing Empowerment & Direction
lara
1
380
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. 展望とまとめ(後半)