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
300
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
550
nanopass-compiler-frameworkを使ってみました
niyarin
0
320
outputting-beautiful-s-expression
niyarin
0
280
Serialisp
niyarin
1
610
Mongo DBとS式検索
niyarin
0
220
goodbye-python-repl
niyarin
0
250
SchemeのEphemeronとWeak Pairの説明
niyarin
0
760
red-paren-scheme-rev-macro.pdf
niyarin
0
320
Other Decks in Programming
See All in Programming
脱・初心者!脱・マネコン!AWS CDKを使ってみませんか!?
har1101
0
300
Ruby製社内ツールのGo移行
bgpat
2
330
Elm 0.19.0 Changes
bkuhlmann
0
480
try! Swift Tokyo 初参加報告LT
hinakko2
0
180
Open Source Swift Workshop - Foundation and first party libraries
ikesyo
0
1.1k
object-oriented-conference-2024
fuwasegu
8
2.7k
今、知っておきたい! 生成AIエージェントの世界
elith
3
330
VSCodeでのDatabricks開発もお勧めしたい/I would also recommend Databricks development with VSCode.
kazumain
0
230
ゆるい個人開発のススメ
kuroppe1819
10
930
雑に思考を整理する技術と効能
konifar
52
23k
Designing for tomorrow's programming workflows
honnibal
PRO
2
110
オブジェクト指向は必要なのか / Is object-oriented needed?
kishida
31
21k
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
355
22k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.8k
Web development in the modern age
philhawksworth
201
10k
What the flash - Photography Introduction
edds
64
11k
Agile that works and the tools we love
rasmusluckow
323
20k
The Mythical Team-Month
searls
214
42k
Git: the NoSQL Database
bkeepers
PRO
421
63k
Teambox: Starting and Learning
jrom
128
8.4k
The Cost Of JavaScript in 2023
addyosmani
13
3.8k
Designing on Purpose - Digital PM Summit 2013
jponch
110
6.4k
Designing with Data
zakiwarfel
95
4.8k
No one is an island. Learnings from fostering a developers community.
thoeni
14
2.1k
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文字先読み