SlideShare uma empresa Scribd logo
1 de 43
Parsing Left Recursive PEG with C++ www.kstm.org id:eldesh [email_address]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Who am I ?
[object Object],[object Object],[object Object],[object Object],Table of Contents
PEG とは ,[object Object],[object Object],[object Object],[object Object],[object Object]
PEG   literal + unary op ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PEG   sequence ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PEG   predicate ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PEG   priority choice (1) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PEG   priority choice (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PEG まとめ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Packrat Parsing で高速化 ,[object Object],[object Object],memo<pair<rule,pos> , optional<semantic_value>>
キャッシュが効きそうな規則の例 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Memoization Table column 1 2 3 4 5 6 7 8 Add Mul Prim Dec input 2 * ( 3 + 4 )
Memoization Table column 1 2 3 4 5 6 7 8 Add 7,7 X 4,7 X X Mul 3,5 X 4,7 X X Prim 3,5 X 4,7 X X Dec X 3,5 X 4,7 X X input 2 * ( 3 + 4 )
Memoization Table semantic value column 1 2 3 4 5 6 7 8 Add 7,7 X 4,7 X X Mul 3,5 X 4,7 X X Prim 3,5 X 4,7 X X Dec X 3,5 X 4,7 X X input 2 * ( 3 + 4 )
Memoization Table column number column 1 2 3 4 5 6 7 8 Add 7,7 X 4,7 X X Mul 3,5 X 4,7 X X Prim 3,5 X 4,7 X X Dec X 3,5 X 4,7 X X input 2 * ( 3 + 4 )
Packrat Parser まとめ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Left Recursion ,[object Object],[object Object],[object Object],[object Object],Expr ← Expr '-' Num / Num Num ← [1-9][0-9]*
マッチの様子? 1 - 3 - 5 Expr Expr Num input Num Num Expr ← Expr '-' Num / Num Num ← [1-9][0-9]*
Infinite Recursion ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Expr ← Expr '-' Num / Num Num ← [1-9][0-9]* Input: '1-3-5'
Detecting Left Recursion ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],同じルールで 同じ入力をパース ループが 検出出来る! Expr ← Expr '-' Num / Num Num ← [1-9][0-9]* Input: '1-3-5'
Packrat Parsing  再び ,[object Object],[object Object],memo<pair<rule,pos> , optional<svalue>> memo<pair<rule,pos> , pair<LR, optional<svalue>>>
Avoiding Infinite Recursion ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Expr ← Expr '-' Num / Num Input: '1-3-5'
Detecting Left Recursion ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Happy End… ? ,[object Object],[object Object],[object Object],[object Object],[object Object],(´ ・ ω ・` ) Expr ← Expr '-' Num / Num Input: '1-3-5'
Making Seed ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Seed Parse
Support Direct Left Recursion ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Growing The Seed! ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
マッチの様子 ( 再び ) 1 - 3 - 5 Expr (Grow1) Num input Num Num(Seed) Expr (Grow2) Expr Expr ← Expr '-' Num / Num (input: '1-3-5')
MemoizationTable の様子 LR ? LR ! Fail 3,2 3,2 seed parse! Expr ← Expr '-' Num / Num Num ← [1-9][0-9]* ; input: '3-4' 4,4 3-4,4 Growing! column 1 2 3 4 Expr Num input 3 - 4
PEG Parser ここまでのまとめ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
In d irect Left Recursion ,[object Object],[object Object],[object Object],[object Object],X ← Expr Expr ← X '-' Num / Num
Table behavior of parsing Indirect Left Recursion X ← Expr Expr ← X '-' Num / Num (Input: '4-3') LR ? LR ? LR ! Fail 4,2 4,2 4,2 seed parse! キャッシュが見つかってしまう! column 1 2 3 4 X Expr Num input 4 - 3
In d irect Left Recursion ,[object Object],[object Object],[object Object],[object Object],X ← Expr Expr ← X '-' Num / Num
resource ,[object Object],LR ? LR ?
Rule Invocation Stack ,[object Object],[object Object],[object Object],Expr X Head Involved
By pass the MemoTable ,[object Object],[object Object],[object Object],[object Object],[object Object],[email_address] X,{Expr} Head Involved InvolvedSet
Adding Support for Indirect Left Recursion memo<pair<rule,pos> , pair<LR, optional<svalue>>> struct LR { AST seed; Rule rule Head head; LR * next; }; struct Head { Rule rule; RuleSet involvedSet,evalSet; }
Indirect Left Recursion X ← Expr Expr ← X '-' Num / Num (Input: '4-3') LR ? LR ? LR ! Fail 4,2 4,2 4,2 seed parse! [email_address] X,{Expr} 4-3,4 3,4 4-3,4 growing! column 1 2 3 4 X Expr Num input 4 - 3
Support Direct Left Recursion ,[object Object],[object Object],[object Object]
parse_ident(ID, Pos) { Entry * m = MEMO(ID, Pos); if (m==NULL) { MEMO(R, P) = new MEMOENTRY(P, TAG_LR); m->ans = EVAL(R.Body); if (m->lr.detected && ans!=NULL) return GROWLR(R, P, m); else return m; return m; } else { //  エントリが見つかった場合 } }
Packrat Parser can support IndirectL.R. ! ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
References ,[object Object],[object Object],[object Object],[object Object]

Mais conteúdo relacionado

Mais procurados

Perl6で遊ぼう
Perl6で遊ぼうPerl6で遊ぼう
Perl6で遊ぼうVienosNotes
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪yashigani
 
2011年12月16日
2011年12月16日2011年12月16日
2011年12月16日nukaemon
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかKousuke Ebihara
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
Functional Pearl + Brainfuck
Functional Pearl + BrainfuckFunctional Pearl + Brainfuck
Functional Pearl + BrainfuckEita Sugimoto
 
Ocaml lecture slides 01 at axsh
Ocaml lecture slides 01 at axshOcaml lecture slides 01 at axsh
Ocaml lecture slides 01 at axshTomofumi Hayashi
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールNobuhisa Koizumi
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索Akio Ishida
 
rpi_handson_2.5
rpi_handson_2.5rpi_handson_2.5
rpi_handson_2.5teruyaono1
 
Computation Expressions for Haxe
Computation Expressions for HaxeComputation Expressions for Haxe
Computation Expressions for Haxeterurou
 
ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)taskie
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...Kazuya Wada
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psqlToshi Harada
 
Ext.Directについて
Ext.DirectについてExt.Directについて
Ext.DirectについてYuki Naotori
 

Mais procurados (19)

Perl6で遊ぼう
Perl6で遊ぼうPerl6で遊ぼう
Perl6で遊ぼう
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
 
C-langage
C-langageC-langage
C-langage
 
2011年12月16日
2011年12月16日2011年12月16日
2011年12月16日
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Functional Pearl + Brainfuck
Functional Pearl + BrainfuckFunctional Pearl + Brainfuck
Functional Pearl + Brainfuck
 
Ocaml lecture slides 01 at axsh
Ocaml lecture slides 01 at axshOcaml lecture slides 01 at axsh
Ocaml lecture slides 01 at axsh
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
Php s4
Php s4Php s4
Php s4
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索
 
rpi_handson_2.5
rpi_handson_2.5rpi_handson_2.5
rpi_handson_2.5
 
Computation Expressions for Haxe
Computation Expressions for HaxeComputation Expressions for Haxe
Computation Expressions for Haxe
 
ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psql
 
Ext.Directについて
Ext.DirectについてExt.Directについて
Ext.Directについて
 
CLR/H No.35-2
CLR/H No.35-2CLR/H No.35-2
CLR/H No.35-2
 

Destaque

拡張性のあるPEGパーサの実装
拡張性のあるPEGパーサの実装拡張性のあるPEGパーサの実装
拡張性のあるPEGパーサの実装masato
 
Racc でおてがる構文解析
Racc でおてがる構文解析Racc でおてがる構文解析
Racc でおてがる構文解析morphine57
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
PEGの回文っぽいExpression
PEGの回文っぽいExpressionPEGの回文っぽいExpression
PEGの回文っぽいExpressionSosuke MORIGUCHI
 
新卒で即戦力なエンジニアになる
新卒で即戦力なエンジニアになる新卒で即戦力なエンジニアになる
新卒で即戦力なエンジニアになるShota Okutsu
 
L-1グランプリ "D言語"
L-1グランプリ "D言語"L-1グランプリ "D言語"
L-1グランプリ "D言語"det coder
 
Java女子部のあゆみ2014
Java女子部のあゆみ2014Java女子部のあゆみ2014
Java女子部のあゆみ2014Ayana Yokota
 
20130530-PEGjs
20130530-PEGjs20130530-PEGjs
20130530-PEGjszuqqhi 2
 
ANTLR-ANother Tool for Language Recognition
ANTLR-ANother Tool for Language RecognitionANTLR-ANother Tool for Language Recognition
ANTLR-ANother Tool for Language Recognitionelliando dias
 
"Programming Hive" Reading #1
"Programming Hive" Reading #1"Programming Hive" Reading #1
"Programming Hive" Reading #1moai kids
 
正しいマインドマップの使い方・描き方
正しいマインドマップの使い方・描き方正しいマインドマップの使い方・描き方
正しいマインドマップの使い方・描き方webcampusschoo
 
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略K Moneto
 
青空文庫テキストフォーマットについて (aozorahack)
青空文庫テキストフォーマットについて (aozorahack)青空文庫テキストフォーマットについて (aozorahack)
青空文庫テキストフォーマットについて (aozorahack)masayoshi takahashi
 

Destaque (15)

拡張性のあるPEGパーサの実装
拡張性のあるPEGパーサの実装拡張性のあるPEGパーサの実装
拡張性のあるPEGパーサの実装
 
Racc でおてがる構文解析
Racc でおてがる構文解析Racc でおてがる構文解析
Racc でおてがる構文解析
 
Introduction to PEG
Introduction to PEGIntroduction to PEG
Introduction to PEG
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
PEGの回文っぽいExpression
PEGの回文っぽいExpressionPEGの回文っぽいExpression
PEGの回文っぽいExpression
 
新卒で即戦力なエンジニアになる
新卒で即戦力なエンジニアになる新卒で即戦力なエンジニアになる
新卒で即戦力なエンジニアになる
 
L-1グランプリ "D言語"
L-1グランプリ "D言語"L-1グランプリ "D言語"
L-1グランプリ "D言語"
 
Java女子部のあゆみ2014
Java女子部のあゆみ2014Java女子部のあゆみ2014
Java女子部のあゆみ2014
 
20130530-PEGjs
20130530-PEGjs20130530-PEGjs
20130530-PEGjs
 
ANTLR-ANother Tool for Language Recognition
ANTLR-ANother Tool for Language RecognitionANTLR-ANother Tool for Language Recognition
ANTLR-ANother Tool for Language Recognition
 
"Programming Hive" Reading #1
"Programming Hive" Reading #1"Programming Hive" Reading #1
"Programming Hive" Reading #1
 
正しいマインドマップの使い方・描き方
正しいマインドマップの使い方・描き方正しいマインドマップの使い方・描き方
正しいマインドマップの使い方・描き方
 
SSH力をつけよう
SSH力をつけようSSH力をつけよう
SSH力をつけよう
 
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略
 
青空文庫テキストフォーマットについて (aozorahack)
青空文庫テキストフォーマットについて (aozorahack)青空文庫テキストフォーマットについて (aozorahack)
青空文庫テキストフォーマットについて (aozorahack)
 

Semelhante a Parsing Left Recursive PEG

ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件Kazuki MATSUMOTO
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数Wataru Terada
 
本当は怖いPHP
本当は怖いPHP本当は怖いPHP
本当は怖いPHPTakuya Sato
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perlJiro Nishiguchi
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5Kenta Hattori
 
Patterns and Matching in Rust
Patterns and Matching in RustPatterns and Matching in Rust
Patterns and Matching in RustDaichiMukai1
 
「トピックモデルによる統計的潜在意味解析」読書会 4章前半
「トピックモデルによる統計的潜在意味解析」読書会 4章前半「トピックモデルによる統計的潜在意味解析」読書会 4章前半
「トピックモデルによる統計的潜在意味解析」読書会 4章前半koba cky
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java心 谷本
 
Material
MaterialMaterial
Material_TUNE_
 
テストではまったお話 Test::More
テストではまったお話 Test::Moreテストではまったお話 Test::More
テストではまったお話 Test::MoreTetsuya Tatsumi
 
PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。bleis tift
 
Boost jp9 program_options
Boost jp9 program_optionsBoost jp9 program_options
Boost jp9 program_optionsnyaocat
 

Semelhante a Parsing Left Recursive PEG (15)

ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
本当は怖いPHP
本当は怖いPHP本当は怖いPHP
本当は怖いPHP
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5
 
Patterns and Matching in Rust
Patterns and Matching in RustPatterns and Matching in Rust
Patterns and Matching in Rust
 
ソート
ソートソート
ソート
 
「トピックモデルによる統計的潜在意味解析」読書会 4章前半
「トピックモデルによる統計的潜在意味解析」読書会 4章前半「トピックモデルによる統計的潜在意味解析」読書会 4章前半
「トピックモデルによる統計的潜在意味解析」読書会 4章前半
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
Material
MaterialMaterial
Material
 
テストではまったお話 Test::More
テストではまったお話 Test::Moreテストではまったお話 Test::More
テストではまったお話 Test::More
 
PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。
 
Boost jp9 program_options
Boost jp9 program_optionsBoost jp9 program_options
Boost jp9 program_options
 

Último

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 

Último (12)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

Parsing Left Recursive PEG

  • 1. Parsing Left Recursive PEG with C++ www.kstm.org id:eldesh [email_address]
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13. Memoization Table column 1 2 3 4 5 6 7 8 Add Mul Prim Dec input 2 * ( 3 + 4 )
  • 14. Memoization Table column 1 2 3 4 5 6 7 8 Add 7,7 X 4,7 X X Mul 3,5 X 4,7 X X Prim 3,5 X 4,7 X X Dec X 3,5 X 4,7 X X input 2 * ( 3 + 4 )
  • 15. Memoization Table semantic value column 1 2 3 4 5 6 7 8 Add 7,7 X 4,7 X X Mul 3,5 X 4,7 X X Prim 3,5 X 4,7 X X Dec X 3,5 X 4,7 X X input 2 * ( 3 + 4 )
  • 16. Memoization Table column number column 1 2 3 4 5 6 7 8 Add 7,7 X 4,7 X X Mul 3,5 X 4,7 X X Prim 3,5 X 4,7 X X Dec X 3,5 X 4,7 X X input 2 * ( 3 + 4 )
  • 17.
  • 18.
  • 19. マッチの様子? 1 - 3 - 5 Expr Expr Num input Num Num Expr ← Expr '-' Num / Num Num ← [1-9][0-9]*
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29. マッチの様子 ( 再び ) 1 - 3 - 5 Expr (Grow1) Num input Num Num(Seed) Expr (Grow2) Expr Expr ← Expr '-' Num / Num (input: '1-3-5')
  • 30. MemoizationTable の様子 LR ? LR ! Fail 3,2 3,2 seed parse! Expr ← Expr '-' Num / Num Num ← [1-9][0-9]* ; input: '3-4' 4,4 3-4,4 Growing! column 1 2 3 4 Expr Num input 3 - 4
  • 31.
  • 32.
  • 33. Table behavior of parsing Indirect Left Recursion X ← Expr Expr ← X '-' Num / Num (Input: '4-3') LR ? LR ? LR ! Fail 4,2 4,2 4,2 seed parse! キャッシュが見つかってしまう! column 1 2 3 4 X Expr Num input 4 - 3
  • 34.
  • 35.
  • 36.
  • 37.
  • 38. Adding Support for Indirect Left Recursion memo<pair<rule,pos> , pair<LR, optional<svalue>>> struct LR { AST seed; Rule rule Head head; LR * next; }; struct Head { Rule rule; RuleSet involvedSet,evalSet; }
  • 39. Indirect Left Recursion X ← Expr Expr ← X '-' Num / Num (Input: '4-3') LR ? LR ? LR ! Fail 4,2 4,2 4,2 seed parse! [email_address] X,{Expr} 4-3,4 3,4 4-3,4 growing! column 1 2 3 4 X Expr Num input 4 - 3
  • 40.
  • 41. parse_ident(ID, Pos) { Entry * m = MEMO(ID, Pos); if (m==NULL) { MEMO(R, P) = new MEMOENTRY(P, TAG_LR); m->ans = EVAL(R.Body); if (m->lr.detected && ans!=NULL) return GROWLR(R, P, m); else return m; return m; } else { // エントリが見つかった場合 } }
  • 42.
  • 43.