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
Gorgos-parser-combinator-written-in-scheme
Search
Niyarin
November 26, 2020
Programming
0
320
Gorgos-parser-combinator-written-in-scheme
Schemeでパーサコンビネータを作りました
Niyarin
November 26, 2020
Tweet
Share
More Decks by Niyarin
See All by Niyarin
Scheme用nREPLの開発(エラー出力の改善)
niyarin
0
120
bel lispの紹介
niyarin
0
590
nanopass-compiler-frameworkを使ってみました
niyarin
0
350
outputting-beautiful-s-expression
niyarin
0
300
Serialisp
niyarin
1
620
Mongo DBとS式検索
niyarin
0
250
goodbye-python-repl
niyarin
0
270
SchemeのEphemeronとWeak Pairの説明
niyarin
0
800
red-paren-scheme-rev-macro.pdf
niyarin
0
350
Other Decks in Programming
See All in Programming
【Go言語】golangci-lintの使い方
tomo1227
0
270
feature環境をGitHub ActionsとCloudFormationでいい感じに管理する
nealle
2
310
Mastering Developer Experience: A Roadmap for Success 【開発生産性Conference 2024】
findyinc
1
380
Xcode 16のPreviewModifierと@Previewableを活用した効率的なプレビュー方法の考察
ojun9
2
160
DDDを志して3年経ったら「DDDの皮を被ったクリーンアーキテクチャ」になった話【デブサミ2024夏】
texmeijin
1
620
Modern Angular: Renovation for Your Applications
manfredsteyer
PRO
0
140
企業向け生成AIアプリの 開発から得られた知見
takaakikakei
0
310
【Go言語】ジェネリクス
tomo1227
0
170
CSC307 Lecture 08
javiergs
PRO
0
330
DynamoDB コスト最適化っぽいことの基本 with Terraform
kuro_kurorrr
2
250
ドメイン駆動設計の実践
masuda220
PRO
17
5.1k
Terraformテスト入門
msato
0
520
Featured
See All Featured
A Tale of Four Properties
chriscoyier
155
22k
Happy Clients
brianwarren
94
6.5k
Clear Off the Table
cherdarchuk
89
320k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
35
6.3k
We Have a Design System, Now What?
morganepeng
46
7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
149
45k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
12
3.8k
Speed Design
sergeychernyshev
9
270
The Art of Programming - Codeland 2020
erikaheidi
48
13k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.5k
KATA
mclloyd
20
13k
Learning to Love Humans: Emotional Interface Design
aarron
269
39k
Transcript
Parser combinator (written in Scheme) 「Gorgos」 Niyarin
Schemeでparser combinator を作った ・私はパーサに関しては素人です ・文字列を入れるとSchemeオブジェクトを返す手続きを作成する (Scheme手続きを組み合わせて)
返り値は多値 ・”受理したもの”と、”のこりの文字列”が返る ・文字aのパーサに”abcdef”を入れると、 受理した#\aと残りの”bcdef”が返る
“ab”を受け取るパーサ1 ・”gchar”を2回使って実装する
“ab”を受け取るパーサ2 ・よく使いそうなものは楽できるような部品が提供されている 特定の文字列を受け取るパーサ “gstring”
リストを意識したパーサコンビネータ1 ・gorgosはリストを返すことを意識した作りになっている ・受理→ 変換の”変換”を簡潔に書くため リストリーダの例
リストを意識したパーサコンビネータ2 ・なるべく変換を手抜きしたいので、gpairというpairを返すも のも作った ab…. を受け取る例
Schemeにcharsetがあって楽できた ・Schemeには文字の集合というデータ構造がある (SRFI 14) or (scheme charset) ・charsetに含まれているかどうかの部分だけでよかった ・組み込みも充実している char-set:upper-case
char-set:digit char-set:whitespace など
macro/手続きでありがちなやつ ・glistは最初は手続きだった → piyo-parserがfoo-parserの前に来ていないとだめ (右)再帰する場合もlambdaで囲わないと再帰できない ・parserを受け取るものをすべてマクロに書き換えた ・applyとかに渡すことができなくなったので、glist-fという関数版も用意 した
未完成な部分 ・文字列→ Scheme objectはできている ・今作り込んでいる部分 1.エラー表示 2.1文字先読みだけでいけるように変換orチェックする対応 port (fileストリームなど)から使えるようにしたい 1文字先読み