$30 off During Our Annual Pro Sale. View Details »
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
350
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
130
bel lispの紹介
niyarin
0
650
nanopass-compiler-frameworkを使ってみました
niyarin
0
380
outputting-beautiful-s-expression
niyarin
0
340
Serialisp
niyarin
1
630
Mongo DBとS式検索
niyarin
0
260
goodbye-python-repl
niyarin
0
310
SchemeのEphemeronとWeak Pairの説明
niyarin
0
890
red-paren-scheme-rev-macro.pdf
niyarin
0
370
Other Decks in Programming
See All in Programming
Better Code Design in PHP
afilina
PRO
0
140
Java 23の概要とJava Web Frameworkの現状 / Java 23 and Java web framework
kishida
2
360
距離関数を極める! / SESSIONS 2024
gam0022
0
340
Modular Monolith Monorepo ~シンプルさを保ちながらmonorepoのメリットを最大化する~
yuisakamoto
10
3.5k
EMになってからチームの成果を最大化するために取り組んだこと/ Maximize team performance as EM
nashiusagi
0
120
CSC509 Lecture 13
javiergs
PRO
0
120
Micro Frontends Unmasked Opportunities, Challenges, Alternatives
manfredsteyer
PRO
0
170
Enabling DevOps and Team Topologies Through Architecture: Architecting for Fast Flow
cer
PRO
0
400
@nifty天気予報のフロントエンドを 実装するまで - NIFTY Tech Talk #22
niftycorp
PRO
0
120
Arm移行タイムアタック
qnighy
0
380
MoQとか勉強会#2 発表資料
yuki_uchida
1
110
[KR] Open-Source Ecosystems
skydoves
0
110
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
BBQ
matthewcrist
85
9.3k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Happy Clients
brianwarren
98
6.7k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
17k
Code Reviewing Like a Champion
maltzj
520
39k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Music & Morning Musume
bryan
46
6.2k
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文字先読み