Suche senden
Hochladen
拡張性のあるPEGパーサの実装
•
0 gefällt mir
•
2,140 views
masato
Folgen
夏のプログラミングシンポジウム 2014でのプレゼンです
Weniger lesen
Mehr lesen
Präsentationen & Vorträge
Melden
Teilen
Melden
Teilen
1 von 33
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
Introduction to PEG
Introduction to PEG
Kota Mizushima
Parsing Left Recursive PEG
Parsing Left Recursive PEG
Takayuki Goto
Racc でおてがる構文解析
Racc でおてがる構文解析
morphine57
20130530-PEGjs
20130530-PEGjs
zuqqhi 2
Context free
Context free
Kei Yagi
PEGの回文っぽいExpression
PEGの回文っぽいExpression
Sosuke MORIGUCHI
新卒で即戦力なエンジニアになる
新卒で即戦力なエンジニアになる
Shota Okutsu
Empfohlen
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
Introduction to PEG
Introduction to PEG
Kota Mizushima
Parsing Left Recursive PEG
Parsing Left Recursive PEG
Takayuki Goto
Racc でおてがる構文解析
Racc でおてがる構文解析
morphine57
20130530-PEGjs
20130530-PEGjs
zuqqhi 2
Context free
Context free
Kei Yagi
PEGの回文っぽいExpression
PEGの回文っぽいExpression
Sosuke MORIGUCHI
新卒で即戦力なエンジニアになる
新卒で即戦力なエンジニアになる
Shota Okutsu
L-1グランプリ "D言語"
L-1グランプリ "D言語"
det coder
ANTLR-ANother Tool for Language Recognition
ANTLR-ANother Tool for Language Recognition
elliando dias
"Programming Hive" Reading #1
"Programming Hive" Reading #1
moai kids
正しいマインドマップの使い方・描き方
正しいマインドマップの使い方・描き方
webcampusschoo
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略
K Moneto
青空文庫テキストフォーマットについて (aozorahack)
青空文庫テキストフォーマットについて (aozorahack)
masayoshi takahashi
Weitere ähnliche Inhalte
Andere mochten auch
L-1グランプリ "D言語"
L-1グランプリ "D言語"
det coder
ANTLR-ANother Tool for Language Recognition
ANTLR-ANother Tool for Language Recognition
elliando dias
"Programming Hive" Reading #1
"Programming Hive" Reading #1
moai kids
正しいマインドマップの使い方・描き方
正しいマインドマップの使い方・描き方
webcampusschoo
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略
K Moneto
青空文庫テキストフォーマットについて (aozorahack)
青空文庫テキストフォーマットについて (aozorahack)
masayoshi takahashi
Andere mochten auch
(6)
L-1グランプリ "D言語"
L-1グランプリ "D言語"
ANTLR-ANother Tool for Language Recognition
ANTLR-ANother Tool for Language Recognition
"Programming Hive" Reading #1
"Programming Hive" Reading #1
正しいマインドマップの使い方・描き方
正しいマインドマップの使い方・描き方
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略
青空文庫テキストフォーマットについて (aozorahack)
青空文庫テキストフォーマットについて (aozorahack)
拡張性のある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パーサの提案・実装
- 考慮する点がいっぱい
Jetzt herunterladen