Upload
Download free for 30 days
Login
Submit Search
拡張性のあるPEGパーサの実装
0 likes
2,146 views
masato
夏のプログラミングシンポジウム 2014でのプレゼンです
Presentations & Public Speaking
Read more
1 of 33
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
More Related Content
PDF
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
PDF
Introduction to PEG
Kota Mizushima
PPT
Parsing Left Recursive PEG
Takayuki Goto
ODP
Racc でおてがる構文解析
morphine57
PPTX
20130530-PEGjs
zuqqhi 2
PDF
Context free
Kei Yagi
PDF
PEGの回文っぽいExpression
Sosuke MORIGUCHI
PDF
新卒で即戦力なエンジニアになる
Shota Okutsu
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
Introduction to PEG
Kota Mizushima
Parsing Left Recursive PEG
Takayuki Goto
Racc でおてがる構文解析
morphine57
20130530-PEGjs
zuqqhi 2
Context free
Kei Yagi
PEGの回文っぽいExpression
Sosuke MORIGUCHI
新卒で即戦力なエンジニアになる
Shota Okutsu
Viewers also liked
(6)
PDF
L-1グランプリ "D言語"
det coder
PPT
ANTLR-ANother Tool for Language Recognition
elliando dias
PDF
"Programming Hive" Reading #1
moai kids
PDF
正しいマインドマップの使い方・描き方
webcampusschoo
PDF
競技プログラミング頻出アルゴリズム攻略
K Moneto
PDF
青空文庫テキストフォーマットについて (aozorahack)
masayoshi takahashi
L-1グランプリ "D言語"
det coder
ANTLR-ANother Tool for Language Recognition
elliando dias
"Programming Hive" Reading #1
moai kids
正しいマインドマップの使い方・描き方
webcampusschoo
競技プログラミング頻出アルゴリズム攻略
K Moneto
青空文庫テキストフォーマットについて (aozorahack)
masayoshi takahashi
Ad
Similar to 拡張性のあるPEGパーサの実装
(7)
PDF
PEGで構文解析をする
jiro4989
PDF
Extensible Eff Applicative
Sanshiro Yoshida
PDF
これから Haskell を書くにあたって
Tsuyoshi Matsudate
PDF
Haskell Lecture 1
Yusuke Matsushita
ODP
これから Haskell を書くにあたって
Tsuyoshi Matsudate
PDF
多値で簡単パーサーコンビネーター
Keiichiro Shikano
ODP
Haskell
todorokit
PEGで構文解析をする
jiro4989
Extensible Eff Applicative
Sanshiro Yoshida
これから Haskell を書くにあたって
Tsuyoshi Matsudate
Haskell Lecture 1
Yusuke Matsushita
これから Haskell を書くにあたって
Tsuyoshi Matsudate
多値で簡単パーサーコンビネーター
Keiichiro Shikano
Haskell
todorokit
Ad
拡張性のあるPEGパーサの実装
1.
拡張性のある PEGパーサの実装 夏のプログラミングシンポジウム
2014 Haskellで
2.
PEGパーサ
3.
パーサとは 入力(プログラム)が 文法に従ってるかどうか判別
4.
パーサの種類 -上向き -
yacc -下向き - javacc - ANTLR - PEG
5.
PEGの特徴 - 曖昧さがない
- 字句解析器と統合 - 線形時間
6.
PEGの例 E =
B C B = (“a” / “b”) B / “” C = “c”+ プログラム:”aabbcc” 文法:
7.
演算子 - 連接
- 選択 - not-predicate - and-predicate
8.
連接 e1 e2
入力がe1にマッチした後 e2にマッチするかどうかを調べる
9.
選択 e1 /
e2 入力が e1にマッチするかどうかを調べ 失敗したら,e2を調べる
10.
And-predicate &e 入力が
eにマッチするかどうかを調べる ただし,入力は先に進めない &”a” “a” は aにマッチ
11.
Not-predicate !e 入力が
eにマッチするかどうかを調べ 失敗したら,OK !”a”はa以外の1文字にマッチ ただし入力は進めない
12.
Ponder
13.
機能を追加しやすく 目標
14.
data ParsecT s
u m a = ParsecT { runParsecT :: State s u -> m (Consumed (m (Reply s u a))) } Parsecの一部
15.
最小限のパーサとは?
16.
入力 (マッチ成功,失敗) を渡すと
が返ってくる
17.
“aabbccdd” (“aabbcc”, “dd”)
18.
最小限のパーサとは?
19.
最小限のパーサとは? Stateモナド
20.
最小限のPEGパーサとは?
21.
Stateモナド +Errorモナド 最小限のPEGパーサとは?
22.
PEG+拡張性で考えると?
23.
PEG+拡張性で考えると? Stateモナド +Errorモナド
+拡張用モナド
24.
Stateモナド Errorモナド 拡張用モナド
モナドトランスフォーマー でまとめちゃう
25.
type ParserT s
e m a = StateT s (ErrorT e m) a
26.
type ParserT s
e m a = StateT s (ErrorT e m) a ユーザが拡張をするモナド PEG部分
27.
type ParserT s
e m a = StateT s (ErrorT e m) a
28.
一番簡単な使用例
29.
type Parser a
= ParserT String String Identity a 入力:文字列(String) エラー:文字列(String) 拡張: なし
30.
デモ
31.
拡張すればするほど layerが深くなる 問題点
拡張しにくい
32.
解決方法 - Data
types á la carte - Free Monad - Extensible Effects: an alternative to Monad Transformers この辺りの技術を使えば大丈夫かも?
33.
まとめ - 拡張が容易なPEGパーサの提案・実装
- 考慮する点がいっぱい
Download