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
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
660
nanopass-compiler-frameworkを使ってみました
niyarin
0
390
outputting-beautiful-s-expression
niyarin
0
340
Serialisp
niyarin
1
630
Mongo DBとS式検索
niyarin
0
270
goodbye-python-repl
niyarin
0
320
SchemeのEphemeronとWeak Pairの説明
niyarin
0
900
red-paren-scheme-rev-macro.pdf
niyarin
0
380
Other Decks in Programming
See All in Programming
ChatGPT とつくる PHP で OS 実装
memory1994
PRO
2
130
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
7
1.5k
AWSのLambdaで PHPを動かす選択肢
rinchoku
2
300
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
php-conference-japan-2024
tasuku43
0
360
わたしの星のままで一番星になる ~ 出産を機にSIerからEC事業会社に転職した話 ~
kimura_m_29
0
200
良いユニットテストを書こう
mototakatsu
8
3.1k
Beyond ORM
77web
8
1.2k
「とりあえず動く」コードはよい、「読みやすい」コードはもっとよい / Code that 'just works' is good, but code that is 'readable' is even better.
mkmk884
3
750
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
360
Recoilを剥がしている話
kirik
5
7.2k
Featured
See All Featured
A designer walks into a library…
pauljervisheath
205
24k
Being A Developer After 40
akosma
87
590k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
Agile that works and the tools we love
rasmusluckow
328
21k
Done Done
chrislema
182
16k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
450
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
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文字先読み