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
Goのパーサ作ってvscode拡張作ってみた!
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ほりしょー
July 31, 2023
Technology
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goのパーサ作ってvscode拡張作ってみた!
「めぐろLT#5」にて発表
https://meguro-lt.connpass.com/event/288483/
ほりしょー
July 31, 2023
Transcript
11 slides
ほりしょー Go のパーサを作って VSCode 拡張作ってみた!
ほりしょー(堀崎祥) ラクスル23 新卒入社 ハコベル所属 サーバーサイドエンジニア Go / Ruby / DDD
自己紹介
なに作ったの?
Go Getter Setter Go のstruct からGetter, Setter を自動生成 してくれるVSCode 拡張
VSCode Marketplace GitHub
なぜ作ったのか? 既存拡張では 自動入力できない 構文が存在 生成コードの テンプレートを 用意したい Go の言語仕様を おさらいしたい
1 2 3
なぜ作ったのか? 入力フォーマット を自由に設定 したい 既存拡張では 自動入力できない 構文が存在 Go の言語仕様を おさらいしたい
1 2 今日は ← → の話 3 独自パーサ 言語仕様
パーサ VSCode 拡張 独自パーサの話 既存拡張は正規表現ベース → 複雑な型(複数行に及ぶ型, struct とか) が存在すると解析できない。
ならば、言語仕様に則った パーサを作ってしまおう パーサジェネレータの Flex, Bison(ts-jison) を使用して パーサを作成 (ts-jison) Flex, Bison パーサ生成
パーサジェネレータ 元はGCC に使用 Ruby, Go などにも使用されていた パーサを作成するためのプログラム 細かい処理を気にせず 構文規則を記述しパーサを作成可能 Flex(
字句解析), Bison( 構文解析) 頑張って構文規則を書いてくのみ! BNF 記法
言語仕様は? Go では言語仕様が公開されている The Go Programming Language Specification EBNF 記法で記述されているため
Bison に移行しやすい。 言語仕様は薄いので頑張って読む!
なぜ作ったのか? 入力フォーマット を自由に設定 したい 既存拡張では 自動入力できない 構文が存在 Go の言語仕様を おさらいしたい
1 2 3 独自パーサ 言語仕様 今日は ← → の話 (VSCode 拡張の話はしません🙇) 構文規則を頑張って書く Go のSpec を漁る
ぜひ使ってみ てください〜 Go Getter Setter VSCode Marketplace GitHub
More Decks by ほりしょー
See All by ほりしょー
~ 秘伝のタレ化した『神スプシ』と戦う ~ 関数型パラダイムで壊れない仕組みへ
h0r15h0
1
230
Hello_LT_world_新年度前に振り返ろう_失敗から学んだ教訓_LT_Night___1_.pdf
h0r15h0
1
37
開発プロセスを継続的に改善する仕組み作り ~ 強いスクラムをいかに維持するか ~
h0r15h0
0
160
ドメインイベント増えすぎ問題
h0r15h0
2
900
LLM(Copilot)を最大限活用するための取り組みとその副産物
h0r15h0
1
270
現実世界の事象から学ぶSOLID原則
h0r15h0
30
23k
集団意思決定の落とし穴と誰も望まない技術的負債
h0r15h0
1
5.5k
デザインパターンを学んだら世界が広がった話
h0r15h0
2
500
Other Decks in Technology
See All in Technology
Sonnetだけで業務はまわる?
kintotechdev
1
110
Reticulum, le réseau cypherpunk dont vous avez besoin !
rlifchitz
0
140
Kiro 入門 (1 つのエージェントを、どの画面からでも) | 目指せ Kiro マスター 01
inariku
PRO
6
1.7k
複数システムが同居した 15 年物の AWS アカウントを解体するための考古学
wa6sn
3
150
内製アプリとClaudeスキルのセキュリティチェック、 Backlogの課題で回しています。
ayaka_egaaa
0
180
Bots in Kiro Crew (One point of contact for ongoing work) | Kiro: Zero to Hero 12
inariku
PRO
1
130
ぼくのClaude Codeの使い方
falken
PRO
4
6.7k
ゼロから作るWebアプリの新定番!?Amplify Gen 2 × AWS Blocksで実現する「開発速度とRDBの柔軟性のいいとこ取り」
amixedcolor
1
250
Claude Securityを使ってみた / claude-security-claude-code-meetup-nagoya
tnir
0
110
DBTS2026 盛り上がってますか!?Databricksが実現するAI時代のデータ基盤
akuwano
1
200
An Introduction to Context Ontology Accelerator (teaching AI agents what your data means)
inariku
PRO
1
240
Claude Codeで新規事業を伸ばせるか? Zennの試行錯誤の記録
wadayusuke
2
170
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.7k
Context Engineering - Making Every Token Count
addyosmani
9
1.3k
How Software Deployment tools have changed in the past 20 years
geshan
3
35k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
590
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
990
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
660
The Cult of Friendly URLs
andyhume
79
7.1k