Submit Search
Upload
拡張性のあるPEGパーサの実装
•
0 likes
•
2,140 views
masato
Follow
夏のプログラミングシンポジウム 2014でのプレゼンです
Read less
Read more
Presentations & Public Speaking
Report
Share
Report
Share
1 of 33
Download now
Download to read offline
Recommended
パーサ勉強会の資料です。
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
PEGと構文解析に関するアレコレの勉強会 Vol.1 http://connpass.com/event/16630/ の発表資料です。
Introduction to PEG
Introduction to PEG
Kota Mizushima
the algorithm to parsing left recursive PEG rules with packrat parsing
Parsing Left Recursive PEG
Parsing Left Recursive PEG
Takayuki Goto
Ruby/Rails 勉強会@関西第36回で発表したスライド。構文解析についてと、パーサージェネレーターRaccの基本的な使い方について
Racc でおてがる構文解析
Racc でおてがる構文解析
morphine57
20130530-PEGjs
20130530-PEGjs
zuqqhi 2
Context free
Context free
Kei Yagi
PEGで書いた、傍目には回文のように見える式が、なぜ回文を受理しないのかの説明。PEGの入門に・・・どうでしょうかね?
PEGの回文っぽいExpression
PEGの回文っぽいExpression
Sosuke MORIGUCHI
「急成長スタートアップにおけるDeveloper Productivity勉強会 Ⅱ」 〜Sansan ×Talknote × nanapi × マネーフォワード × LIG〜 発表資料
新卒で即戦力なエンジニアになる
新卒で即戦力なエンジニアになる
Shota Okutsu
Recommended
パーサ勉強会の資料です。
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
PEGと構文解析に関するアレコレの勉強会 Vol.1 http://connpass.com/event/16630/ の発表資料です。
Introduction to PEG
Introduction to PEG
Kota Mizushima
the algorithm to parsing left recursive PEG rules with packrat parsing
Parsing Left Recursive PEG
Parsing Left Recursive PEG
Takayuki Goto
Ruby/Rails 勉強会@関西第36回で発表したスライド。構文解析についてと、パーサージェネレーターRaccの基本的な使い方について
Racc でおてがる構文解析
Racc でおてがる構文解析
morphine57
20130530-PEGjs
20130530-PEGjs
zuqqhi 2
Context free
Context free
Kei Yagi
PEGで書いた、傍目には回文のように見える式が、なぜ回文を受理しないのかの説明。PEGの入門に・・・どうでしょうかね?
PEGの回文っぽいExpression
PEGの回文っぽいExpression
Sosuke MORIGUCHI
「急成長スタートアップにおけるDeveloper Productivity勉強会 Ⅱ」 〜Sansan ×Talknote × nanapi × マネーフォワード × LIG〜 発表資料
新卒で即戦力なエンジニアになる
新卒で即戦力なエンジニアになる
Shota Okutsu
L-1グランプリ用、D言語の発表 ちょくちょく内容を変えてたりします。ご指摘ご指導頂いた点は黄色で記載しております。
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
OSC 2017 Tokyo/Springのaozorahackセッションで発表した際の資料です。
青空文庫テキストフォーマットについて (aozorahack)
青空文庫テキストフォーマットについて (aozorahack)
masayoshi takahashi
More Related Content
Viewers also liked
L-1グランプリ用、D言語の発表 ちょくちょく内容を変えてたりします。ご指摘ご指導頂いた点は黄色で記載しております。
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
OSC 2017 Tokyo/Springのaozorahackセッションで発表した際の資料です。
青空文庫テキストフォーマットについて (aozorahack)
青空文庫テキストフォーマットについて (aozorahack)
masayoshi takahashi
Viewers also liked
(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パーサの提案・実装
- 考慮する点がいっぱい
Download now