SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
Introduction to PEG
構文解析友の会
水島 宏太
背景
 多様な入力文字列を構文解析する必要性
 (色々なフォーマットの)設定ファイル
 Webのクローリング
 "Cargo cult parsing" (from Yacc is dead)
の流行
 Googleで検索して正規表現を拾ってきて、テキトウにコピー
&ペーストしてパーザを作ること
 「だいたいの入力に対してそれなりにうまく働く」不完全なパー
ザ
 Cargo cult parsingを追放せよ!
構文解析って何?
 一言でいうと:
 入力文字列を木構造(Abstract Syntax Tree)
に組み立てる捜査
 二種類に分けられる
 自然言語の構文解析
 構文解析の結果あいまい性が生じることがある
 非自然言語の構文解析 ←今回扱うもの
 構文解析の結果あいまい性が生じない
様々な構文解析アルゴリズム
 CYK - O(n3)
 (S|LA)?LR(k) - O(n)
 LL(k) - O(n)
 LL(*) - O(n)
 GLR (Generalized LR) - O(n3)
 GLL (Generalized LL) - O(n3)
 PEG(or Packrat Parsing) - O(kn) (O(n))
一長一短がある
構文解析器をどうやって書く?
 手書き
 どんな文法でも大体作れる
 文法のメンテナンス/デバッグが大変
 パーザジェネレータ
 文法定義からパーザを自動生成
 パーザコンビネータ
 プログラミング言語のDSLとしてパーザを組み立
てるものを用意する
 ホスト言語のデバッグ環境をそのまま用意できる
YACC (LALR(1))
 最もメジャーなパーザジェネレータ
 Rubyを初めとする様々な言語で採用
 上位互換のbisonが一般に採用される
 空白の有無等で意味が変わる文法は苦手
 空白は通常字句解析で処理するため
 トークンが再帰的な構造を含む文法は苦手
 式埋め込み可能な文字列リテラル(Ruby)
 "1+2 = #{1+2}"
 ヒアドキュメント
JavaCC (LL(k) + α)
 Javaでメジャーなパーザジェネレータ
 構文木の生成がちょっと楽
 jjtree(プリプロセッサ)を使用した場合
 空白の有無で意味が変わる文法は苦手
 理由はyaccと同じ
 トークンが再帰的な構造を含む文法は苦手
 理由はyaccと同じ
何が言いたいか
 一般的な構文解析アルゴリズムでは字句解析
と構文解析の分離が前提
 プログラミング言語用の字句解析器の限界
 字句解析器は通常正規表現によって記述
 再帰的な構造をうまく扱えない
 パーザの文脈によってトークンの切り出し方が変わる
ような文法は苦手
そこでPEG(Ford04)ですよ
 プログラミング言語等の文法の表記法
 BNFと目的は類似
 構文解析アルゴリズムの一種とも言える
 決定的な任意のLR(k)言語や一部の文脈依存言
語を扱える
 構文規則の集合
 (N ← e)*
 N: 構文規則名
 e: 式(Parsing Expression)
Parsing Expression(1)
 N : 規則(非終端記号)の参照
 "a" : 文字列a
 ε : 空文字列
 . : 任意の一文字
 [...] : 文字クラス
 e1 e2 : e1とe2の並び
 e1 / e2 : e1を試し、失敗したらe2を試す
 e1 / e2 ≠ e2 / e1
Parsing Expression(2)
 e? : 0回または1回の繰り返し
 e* : 0回以上の繰り返し
 e+ : 1回以上の繰り返し
 &e : And-predicate
 eがマッチしたら成功。入力を消費しない
 !e : Not-predicate
 eがマッチしなければ成功。入力を消費しない
シンプル!
Desugaring Parsing Expression
 e? : (e / ε)
 e* : N'; N'← e N' / ε
 e+ : e e*
 !e : !!(e)
PEGの解釈
 入力に対して式がマッチするかを判定する
 結果の値
 マッチに成功した場合: 「消費」した文字列
 失敗した場合: f(失敗したことを意味する値)
 例: (式, 入力) → 結果 という形とする
 ("a", "ab") → "a"
 ("b", "ab") → f
 (&"a", "ab") → ""
 ("a"/"b", "ab") → "a"
 (.*, "ab") → "ab"
PEGの例
 Eが表している言語
 a,b,cの文字と+から成る算術式
 a,a+b,a+b+c,a+c,a+b+c+a, ...
E ← V "+" E / V
V ← "a" / "b" / "c"
PEGで嬉しいこと
 無限長の先読みが可能
 字句解析不要→柔軟な文法が記述し易い
 String interpolation, Here document等
 曖昧性が無い
 文法のconflictが起きない
 C言語のif文のPEGによる記述
 if_stmt ← IF LP expr RP stmt (ELSE stmt)?
PEGで嬉しくないこと
 PEGの利点と表裏一体
 空白の読み飛ばしなどを明示する必要がある
 通常は字句解析で空白が処理される
 マクロを導入すれば軽減できる
 順序を入れ替えると意味が変わってしまう
 if_stmt ← IF LP expr RP stmt
/ IF LP expr RP stmt ELSE stmt
 elseを含む文が解析できないPEG
PEGパーザの実装(関数型)
 各構文規則を純粋な関数として実装
 入力: 入力文字列
 出力: 成功したかどうか
 成功した場合は残りの文字列も一緒に返す
 非終端記号の参照を関数呼び出しとして実装
PEGパーザの実装(関数型)
規則 V ← "a" V / "c"の実装を考える
def parse_V(input)
r1 = match("a", input)
if r1.succeed?
r2 = parse_V(r1.output)
if r2.succeed? then r2 else match("c", input) end
else
match("c", input)
end
end
PEGパーザの実装(手続き型)
 パーザが状態を持つ
 入力文字列
 今何文字目を解析しているか(カーソル)
 構文規則を副作用のある関数として実装
 入力: 無し
 出力: 成功したかどうか
 関数の中でカーソルを破壊的に更新
PEGパーザの実装(手続き型)
規則 V ← "a" V / "c"の実装を考える
def parse_V
backup_pos = current_pos
if match("a")
if parse_V then return true
rewind(backup_pos); return match("c")
else
return match("c")
end
end
Packrat Parsing(Ford02)
 PEGをベースにした構文解析アルゴリズム
 入力の長さに対して線形時間で解析可能
 実用的
 アルゴリズムが非常に単純
 Backtrack parsing + メモ化
 プログラマが挙動を理解しやすい
メモ化(memoize)
 ≠memorize
 一度計算した関数の結果を記憶しておく
 同じ引数で呼び出された場合、結果を再利用
 原則的に副作用の無い関数にしか使えない
 副作用があるとメモ化した場合に結果が異なる
フィボナッチ関数
 再帰的な定義:
 fib(n) = 1 if n = 1 or 2
 fib(n) = fib(n – 1) + fib(n – 2)
 定義にしたがって計算すると指数関数時間
メモ化されたフィボナッチ関数
 同じ引数に対して、計算結果を再利用
 fib(n) = m[n] if m[n] != null
 fib(n) = m[n]:=1 ; m[n] if n = 1 or 2
 fib(n) = m[n]:=fib(n–1)+fib(n–2); m[n]
 入力の大きさに対して線形時間
Backtrack parsing
E ← V "+" E / V
V ← "a" / "b" / "c"
E(1)
V(1)
"a"
"+" E(3)
V(3)
"a" "b"
V(3)
"a" "b"
"+"
 式: E, 入力:"a+b"
同じ計算を二度行う
Packrat parsing
E ← V "+" E / V
V ← "a" / "b" / "c"
E(1)
V(1)
"a"
"+" E(3)
V(3)
"a" "b"
"+"
 式: E, 入力:"a+b"
Vの解析結果を再利用
Backtrack Parsingと
Packrat Parsingの性能比較
 次の文法の言語を解析する時の性能を比較
 Backtrackが頻発する入力を与える
 入力: '(1)', '((1))', '(((1)))', …
E ← M
M ← A Spacing MS / A
MS ← "*" Spacing M / "/" Spacing M / "%" Spacing M
A ← P Spacing AS / P
AS ← "+" Spacing A / "-" Spacing A
P ← Number / "(" Spacing E Spacing ")"
Backtrack Parsingと
Packrat Parsingの性能比較
Packrat Parsingの欠点
 必要な記憶領域が多い
 入力文字列の長さに対して線形の記憶領域
 大規模なファイルの解析には向かない
 実行効率がイマイチ
 バックトラックやメモ化が影響
 ほとんどのメモ化は無駄になっている可能性
PEG/Packrat Parser Generator
 PEGが提案されて10年以上
 様々なものがある
 Rats! (Java)
 Parboiled2 (Scala)
 Treetop (Ruby)
 Lpeg (Lua)
 PEG.js (JavaScript)
Rats!
 Javaのソースコードを生成
 http://cs.nyu.edu/rgrimm/xtc/
 (状態つき)Packrat Parserを生成
 文法定義をモジュールに分割可能
 ASTの自動生成
Parboiled2
 Scala用
 https://github.com/sirthias/parboiled
2
 Scalaマクロベースのジェネレータ
 Scalaコードの一部として文法を記述
LPeg
 Lua用
 http://www.inf.puc-rio.br/~roberto/lp
eg/
 文字列とのパターンマッチングライブラリ
Treetop
 Ruby用のPEGパーザジェネレータ
 http://treetop.rubyforge.org/
 Rubyプログラムに似たシンプルな文法記述
 既存のgrammarを取り込んで新しいパーザ
を合成できる
PEG.js
 JavaScript用
 http://pegjs.org/
 Node.js対応
PEGに関する有名な未解決問題
 PEL ⊃ CFL or not
 PEGはいくつかの文脈依存言語を表現可能
 a^n b^n c^n
 CFGでは表現できない
 では、逆は?
 不明
 回文がそれに相当するのではないかと考えられて
いる
PEGに関するその他の研究
 左再帰の導入(Warth et al, 2007)
 PEGの仮想機械(Medeiros et al, 2008)
 カットおよびカット自動挿入アルゴリズムの導
入 (Mizushima, et al., 2010)
 LL(*)アルゴリズム (Parr, et al., 2011)
 PEGとカバーする範囲が重複する


Weitere ähnliche Inhalte

Was ist angesagt?

組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
"Hello World!" から始める Calc で LibreOffice Basic
"Hello World!" から始める Calc で LibreOffice Basic"Hello World!" から始める Calc で LibreOffice Basic
"Hello World!" から始める Calc で LibreOffice Basic78tch
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法Takuya Akiba
 
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介T. Suwa
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装MITSUNARI Shigeo
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
制約解消によるプログラム検証・合成 (第1回ステアラボソフトウェア技術セミナー)
制約解消によるプログラム検証・合成 (第1回ステアラボソフトウェア技術セミナー)制約解消によるプログラム検証・合成 (第1回ステアラボソフトウェア技術セミナー)
制約解消によるプログラム検証・合成 (第1回ステアラボソフトウェア技術セミナー)STAIR Lab, Chiba Institute of Technology
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方Takeshi Mikami
 
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話Kinuko Yasuda
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話bleis tift
 
ローマと道に関するいくつかの問題とその解決
ローマと道に関するいくつかの問題とその解決ローマと道に関するいくつかの問題とその解決
ローマと道に関するいくつかの問題とその解決at_akada
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみたRust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた虎の穴 開発室
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Naoki Aoyama
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 

Was ist angesagt? (20)

組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
"Hello World!" から始める Calc で LibreOffice Basic
"Hello World!" から始める Calc で LibreOffice Basic"Hello World!" から始める Calc で LibreOffice Basic
"Hello World!" から始める Calc で LibreOffice Basic
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法
 
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
制約解消によるプログラム検証・合成 (第1回ステアラボソフトウェア技術セミナー)
制約解消によるプログラム検証・合成 (第1回ステアラボソフトウェア技術セミナー)制約解消によるプログラム検証・合成 (第1回ステアラボソフトウェア技術セミナー)
制約解消によるプログラム検証・合成 (第1回ステアラボソフトウェア技術セミナー)
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
 
ローマと道に関するいくつかの問題とその解決
ローマと道に関するいくつかの問題とその解決ローマと道に関するいくつかの問題とその解決
ローマと道に関するいくつかの問題とその解決
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみたRust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 

Andere mochten auch

拡張性のあるPEGパーサの実装
拡張性のあるPEGパーサの実装拡張性のあるPEGパーサの実装
拡張性のあるPEGパーサの実装masato
 
Parsing Left Recursive PEG
Parsing Left Recursive PEGParsing Left Recursive PEG
Parsing Left Recursive PEGTakayuki Goto
 
Context free
Context freeContext free
Context freeKei Yagi
 
20130530-PEGjs
20130530-PEGjs20130530-PEGjs
20130530-PEGjszuqqhi 2
 
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化Shuichi Yukimoto
 
命名規則のススメ
命名規則のススメ命名規則のススメ
命名規則のススメnatrium11321
 
Programming言語Lua紹介(Internet版)
Programming言語Lua紹介(Internet版)Programming言語Lua紹介(Internet版)
Programming言語Lua紹介(Internet版)zetamatta
 
SSH I/O Streaming via Redis-based Persistent Message Queue -Mani Tadayon
 SSH I/O Streaming via Redis-based Persistent Message Queue -Mani Tadayon SSH I/O Streaming via Redis-based Persistent Message Queue -Mani Tadayon
SSH I/O Streaming via Redis-based Persistent Message Queue -Mani TadayonRedis Labs
 

Andere mochten auch (8)

拡張性のあるPEGパーサの実装
拡張性のあるPEGパーサの実装拡張性のあるPEGパーサの実装
拡張性のあるPEGパーサの実装
 
Parsing Left Recursive PEG
Parsing Left Recursive PEGParsing Left Recursive PEG
Parsing Left Recursive PEG
 
Context free
Context freeContext free
Context free
 
20130530-PEGjs
20130530-PEGjs20130530-PEGjs
20130530-PEGjs
 
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
 
命名規則のススメ
命名規則のススメ命名規則のススメ
命名規則のススメ
 
Programming言語Lua紹介(Internet版)
Programming言語Lua紹介(Internet版)Programming言語Lua紹介(Internet版)
Programming言語Lua紹介(Internet版)
 
SSH I/O Streaming via Redis-based Persistent Message Queue -Mani Tadayon
 SSH I/O Streaming via Redis-based Persistent Message Queue -Mani Tadayon SSH I/O Streaming via Redis-based Persistent Message Queue -Mani Tadayon
SSH I/O Streaming via Redis-based Persistent Message Queue -Mani Tadayon
 

Ähnlich wie Introduction to PEG

JavaScriptの正規表現
JavaScriptの正規表現JavaScriptの正規表現
JavaScriptの正規表現yaju88
 
Ruby紹介3(pdf)
Ruby紹介3(pdf)Ruby紹介3(pdf)
Ruby紹介3(pdf)Gohryuh
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Relations Team
 
Casual learning machine learning with_excel_no3
Casual learning machine learning with_excel_no3Casual learning machine learning with_excel_no3
Casual learning machine learning with_excel_no3KazuhiroSato8
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3Kenta Hattori
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装するShuhei Iitsuka
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5Kenta Hattori
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bashJun Nogata
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜Hiromi Ishii
 
Yamadai.Rデモンストレーションセッション
Yamadai.RデモンストレーションセッションYamadai.Rデモンストレーションセッション
Yamadai.Rデモンストレーションセッション考司 小杉
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesNoritada Shimizu
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
スペルミス修正プログラムを作ろう
スペルミス修正プログラムを作ろうスペルミス修正プログラムを作ろう
スペルミス修正プログラムを作ろうNaoya Ito
 
Haskell勉強会2 in ie
Haskell勉強会2 in ieHaskell勉強会2 in ie
Haskell勉強会2 in iemaeken2010
 
Javaで書いたBOW分析APIをSwaggerから.Netで読み込んでみる
Javaで書いたBOW分析APIをSwaggerから.Netで読み込んでみるJavaで書いたBOW分析APIをSwaggerから.Netで読み込んでみる
Javaで書いたBOW分析APIをSwaggerから.Netで読み込んでみるAnna Nakatsuji
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみたina job
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Uehara Junji
 

Ähnlich wie Introduction to PEG (20)

JavaScriptの正規表現
JavaScriptの正規表現JavaScriptの正規表現
JavaScriptの正規表現
 
Ruby紹介3(pdf)
Ruby紹介3(pdf)Ruby紹介3(pdf)
Ruby紹介3(pdf)
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
 
Casual learning machine learning with_excel_no3
Casual learning machine learning with_excel_no3Casual learning machine learning with_excel_no3
Casual learning machine learning with_excel_no3
 
R intro
R introR intro
R intro
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装する
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
Yamadai.Rデモンストレーションセッション
Yamadai.RデモンストレーションセッションYamadai.Rデモンストレーションセッション
Yamadai.Rデモンストレーションセッション
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Power of Scala
Power of ScalaPower of Scala
Power of Scala
 
スペルミス修正プログラムを作ろう
スペルミス修正プログラムを作ろうスペルミス修正プログラムを作ろう
スペルミス修正プログラムを作ろう
 
日本語形態素解析
日本語形態素解析日本語形態素解析
日本語形態素解析
 
Haskell勉強会2 in ie
Haskell勉強会2 in ieHaskell勉強会2 in ie
Haskell勉強会2 in ie
 
Javaで書いたBOW分析APIをSwaggerから.Netで読み込んでみる
Javaで書いたBOW分析APIをSwaggerから.Netで読み込んでみるJavaで書いたBOW分析APIをSwaggerから.Netで読み込んでみる
Javaで書いたBOW分析APIをSwaggerから.Netで読み込んでみる
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみた
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
 

Mehr von Kota Mizushima

ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてKota Mizushima
 
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状Kota Mizushima
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Kota Mizushima
 
Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後Kota Mizushima
 
Scala Performance Tuning Tips
Scala Performance Tuning TipsScala Performance Tuning Tips
Scala Performance Tuning TipsKota Mizushima
 
こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラスKota Mizushima
 
About Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingAbout Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingKota Mizushima
 
Scala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful librariesScala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful librariesKota Mizushima
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力Kota Mizushima
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題Kota Mizushima
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発Kota Mizushima
 
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足Kota Mizushima
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit ScalaKota Mizushima
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit ScalaKota Mizushima
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-Kota Mizushima
 

Mehr von Kota Mizushima (20)

ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修について
 
kollectionの紹介
kollectionの紹介kollectionの紹介
kollectionの紹介
 
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状
 
Macros in nemerle
Macros in nemerleMacros in nemerle
Macros in nemerle
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
 
Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後
 
Scala Performance Tuning Tips
Scala Performance Tuning TipsScala Performance Tuning Tips
Scala Performance Tuning Tips
 
こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラス
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 
Scala is-unscared
Scala is-unscaredScala is-unscared
Scala is-unscared
 
About Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and BorrowingAbout Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and Borrowing
 
Scala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful librariesScala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful libraries
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit Scala
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-
 
Scalaz
ScalazScalaz
Scalaz
 

Kürzlich hochgeladen

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Kürzlich hochgeladen (7)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Introduction to PEG