Recommended
PDF
PDF
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
KEY
PDF
GNU awk (gawk) を用いた Apache ログ解析方法
PDF
PDF
PDF
PDF
PPTX
PDF
菩薩でもわかる!Rで動かすExcelアドインの作り方
KEY
PPT
PDF
PDF
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
PDF
KEY
KEY
PDF
Lisp Tutorial for Pythonista : Day 3
PDF
Start printf 6_takarakasai
PDF
PDF
PDF
Node.js Error & Debug Leveling
PDF
PDF
Yapc -asia 2012 lt @studio3104
PDF
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
PDF
KEY
PPTX
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
PDF
More Related Content
PDF
PDF
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
KEY
PDF
GNU awk (gawk) を用いた Apache ログ解析方法
PDF
PDF
PDF
What's hot
PDF
PPTX
PDF
菩薩でもわかる!Rで動かすExcelアドインの作り方
KEY
PPT
PDF
PDF
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
PDF
KEY
KEY
PDF
Lisp Tutorial for Pythonista : Day 3
PDF
Start printf 6_takarakasai
PDF
PDF
PDF
Node.js Error & Debug Leveling
PDF
PDF
Yapc -asia 2012 lt @studio3104
PDF
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
PDF
KEY
Similar to PCさえあればいい。
PPTX
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
PDF
PPT
PPT
PDF
PDF
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
PDF
PPTX
KEY
Algebraic DP: 動的計画法を書きやすく
PDF
PPTX
PDF
Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字
PDF
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
PDF
PDF
PPT
Parsing Left Recursive PEG
KEY
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
PDF
PPTX
Ocaml lecture slides 01 at axsh
PDF
More from bleis tift
PDF
PDF
PDF
yield and return (poor English ver)
PDF
PDF
F#によるFunctional Programming入門
PDF
PDF
PDF
PDF
VBAを書きたくない話(Excel-DNAの紹介)
PDF
PDF
PDF
PDF
PDF
PDF
PDF
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
PPTX
解説?FSharp.Quotations.Compiler
PDF
PDF
PDF
Recently uploaded
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):コアマイクロシステムズ株式会社 テーマ 「AI HPC時代のトータルソリューションプロバイダ」
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ1「大規模AIの能力を最大限に活用するHPE Comp...
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ3「『TrinityX』 AI時代のクラスターマネジメ...
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ2「『Slinky』 SlurmとクラウドのKuber...
PDF
論文紹介:DiffusionRet: Generative Text-Video Retrieval with Diffusion Model
PDF
論文紹介:HiLoRA: Adaptive Hierarchical LoRA Routing for Training-Free Domain Gene...
PDF
論文紹介:MotionMatcher: Cinematic Motion Customizationof Text-to-Video Diffusion ...
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):エヌビディア合同会社 テーマ1「NVIDIA 最新発表製品等のご案内」
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ3「IT運用とデータサイエンティストを強力に支援するH...
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):富士通株式会社 テーマ1「HPC&AI: Accelerating material develo...
PPTX
ChatGPTのコネクタ開発から学ぶ、外部サービスをつなぐMCPサーバーの仕組み
PDF
AI開発の最前線を変えるニューラルネットワークプロセッサと、未来社会における応用可能性
PDF
膨大なデータ時代を制する鍵、セグメンテーションAIが切り拓く解析精度と効率の革新
PDF
ニューラルプロセッサによるAI処理の高速化と、未知の可能性を切り拓く未来の人工知能
PPTX
2025年11月24日情報ネットワーク法学会大井哲也発表「API利用のシステム情報」
PCさえあればいい。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. データ構造
type Json =
| JNull
| JBool of bool
| JNumber of float
| JString of string
| JList of Json list
| JObject of Map<string, Json>
21. 用意したデータ構造に変換
// この発表ではFParsecというライブラリを使います
let jnull = pstring "null" >>% JNull
let jtrue = pstring "true" >>% (JBool true)
let jfalse = pstring "false" >>% (JBool false)
let jnumber = pfloat |>> JNumber
let str = manyChars (noneOf """) |> between (pchar '"') (pchar '"')
let jstring = str |>> JString
let jvalue, jvalueRef = createParserForwardedToRef ()
let jlist =
sepBy jvalue (pchar ',')
|> between (pchar '[') (pchar ']') |>> JList
let jobject =
let jprop = str .>> pchar ':' .>>. jvalue
sepBy jprop (pchar ',')
|> between (pchar '{') (pchar '}')
|>> (Map.ofList >> JObject)
jvalueRef :=
choice [ jobject; jlist; jstring; jnumber; jtrue; jfalse; jnull ]
let json : Parser<Json, unit> = jvalue .>> eof
22. おしまい
let parse str =
match run json str with
| Success (res, _, _) -> res
| Failure (msg, _, _) -> failwithf "oops!: %s" msg
23. 24. 25. 26. 27. JSONパーサー(改良版)
let ws = spaces
let jnull = pstring "null" .>> ws >>% JNull
let jtrue = pstring "true" .>> ws >>% (JBool true)
let jfalse = pstring "false" .>> ws >>% (JBool false)
let jnumber = pfloat .>> ws |>> JNumber
let str = manyChars (noneOf """) |> between (pchar '"') (pchar '"') .>> ws
let jstring = str |>> JString
let jvalue, jvalueRef = createParserForwardedToRef ()
let jlist =
sepBy jvalue (pchar ',' .>> ws)
|> between (pchar '[' .>> ws) (pchar ']' .>> ws) |>> JList
let jobject =
let jprop = str .>> pchar ':' .>> ws .>>. jvalue
sepBy jprop (pchar ',' .>> ws)
|> between (pchar '{' .>> ws) (pchar '}' .>> ws)
|>> (Map.ofList >> JObject)
jvalueRef :=
choice [ jobject; jlist; jstring; jnumber; jtrue; jfalse; jnull ]
let json : Parser<Json, unit> = ws >>. jvalue .>> eof
28. 29. 30. こんな感じで
let str =
let nonEscaped = noneOf """ |> many1Chars
let escaped =
pchar '"' >>. anyOf @"""/bfnrt"
|>> function
| 'b' -> "b"
| 'f' -> "f"
| 'n' -> "n"
| 'r' -> "r"
| 't' -> "t"
| c -> string c
let elem = nonEscaped <|> escaped // four hex digitsなやつは省略
manyStrings elem |> between (pchar '"') (pchar '"') .>> ws
31. 32. こう?
let integer = regex "([1-9][0-9]*|0)" |>> Int
let real = regex @"([1-9][0-9]*|0).[0-9]*" |>> Real
let number = integer <|> real
33. 34. 35. 36. 37. これでOK
let integer = regex "([1-9][0-9]*|0)" |>> Int
let real = regex @"([1-9][0-9]*|0).[0-9]*" |>> Real
// attemptでrealが失敗したら、realが消費した文字を入力に戻す
let number = attempt real <|> integer
38. 39. 40. パーサー
let integer = pint32 .>> ws |>> Integer
let expr, exprRef = createParserForwardedToRef ()
let add =
tuple2 (expr .>> pchar '+' .>> ws) integer |>> Add
let sub =
tuple2 (expr .>> pchar '-' .>> ws) integer |>> Sub
exprRef := choice [attempt add; attempt sub; integer]
41. 42. 43. 44. 左再帰の繰り返しへの変換
// 元のコードの意味(左再帰)
// expr ::= expr op integer
// | integer
// から、下記(繰り返し)に変換
// expr ::= integer (op integer)*
let expr =
integer .>>. (many (op .>>. integer))
|>> fun (x, xs) -> List.fold (fun x (f, y) -> f x y) x xs
and op =
anyOf "+-" .>> ws
|>> (function
| '+' -> fun a b -> Add(a, b)
| '-' -> fun a b -> Sub(a, b)
| other -> invalidOp ("invalid char: " + string other))
45. 46. chainl1を使いましょう
// expr ::= integer (op integer)*
let expr = chainl1 integer op
and op =
anyOf "+-" .>> ws
|>> (function
| '+' -> fun a b -> Add(a, b)
| '-' -> fun a b -> Sub(a, b)
| other -> invalidOp ("invalid char: " + string other))
47. 48.