You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
ã¯ããã« Rustã«ã¯æåãªnomã¨ãããã¼ãµã¼ã³ã³ããã¼ã¿ã¼ã©ã¤ãã©ãªããããããã£ããé«ç´ãªåã·ã¹ãã ã¨æé©åãããã®ã«ãã¯ãã§ä½ã¨ããããã¨ããã®ã¯å¿ä½ç¡ãã¨æãã®ã§ããã¯ãã«æ·±ãä¾åããªãcombineã使ã£ã¦ã¿ãã combineã®ä¸»ãªç¹å¾´ parsec ãªã¹ãã¯ãã®ãã¼ãµã¼ã³ã³ããã¼ã¿ã¼ ã³ã³ããã¼ã¿ã¼ã¯ãã¯ãã§ã¯ãªãã Parser traitãå®è£ ããå¤ã§è¡¨ã ãã¤ãã¹ããªã¼ã ãæå(Unicodeã³ã¼ããã¤ã³ã)ã¹ããªã¼ã ããã¼ã¯ã³ã¹ããªã¼ã ã®å ¨ã¦ã«å¯¾å¿ ã¡ã¢ãªä¸ã®æååã ãã§ã¯ãªããå ¥åã¹ããªã¼ã ããã®ç´æ¥ã®ãã¼ã¹ã«ãå¯¾å¿ ã¾ã è¨æ¸¬ã¯ãã¦ããªããã Box ãå¤ç¨ãã¦ãããã¯ããªãã®ã§ãé度çã«å¤§ããé ããã¨ããããªãã¨ã¯ãªãã®ã§ã¯ãªããã¨æãã 以ä¸ãparsecã«ã¤ãã¦ç¥ã£ã¦ããã»ããèªã¿ãããæ§æã«ãªã£ã¦ããã®ã§ãå¿ è¦ãªãparsecã®è³æãæ¢ãã¦èªãã¨ããããã
ååã®è¨äºã®ç¶ããååã¯ãæ£è¦è¡¨ç¾ã使ããªãæã¯ãã¼ãµã³ã³ããã¼ã¿ã使ã£ã¦ã¿ãã¨è¯ãã¨ãããã¨ãæ¸ããã ãã¼ãµã³ã³ããã¼ã¿ã®ããã®ã©ã¤ãã©ãªã¯ã以ä¸ã®ããã«åè¨èªãã¨ã«ããã¤ãããã JavaScript - Parsimmon Ruby - rparsec treetop Python - parsy PHP - PHPPEG åè¨èªã§ããã¤ãããã®ã ããæ£è¦è¡¨ç¾ã¨éã£ã¦ãã¼ãµã³ã³ããã¼ã¿ã«ã¯çµ±ä¸çãªæ¸ãæ¹ãããããã§ã¯ãªãããã©ã¤ãã©ãªã«ãã£ã¦ä½¿ãæ¹ãæ§ã ã§ããããªã®ã§ãä»ã¾ã§æ£è¦è¡¨ç¾ã ã使ã£ã¦ããéçºè ãã¡ãã£ã¨ä½¿ã£ã¦ã¿ããã¨æã£ã¦ããä½¿ãæ¹ãããããããã«é¢é£ãã£ã¦ãã¾ããã¨ãããã ãã¼ãµã³ã³ããã¼ã¿ã¯ããã¹ãããã¼ã¹ããããã®é常ã«å¼·åãªä»çµã¿ã ãããã®èå¾ã«ããèãæ¹ãçè§£ããªããã°ãããã®ãã¼ãµã³ã³ããã¼ã¿ã®ã©ã¤ãã©ãªã使ãéã®é害ã«ãªãã ãããéã«è¨ãã¨ãããããçè§£ã§
instaparseã¯æèèªç±ææ³(CFG)ã«ããæ§æè§£æã©ã¤ãã©ãªã§ããã»ã¼ãã®ã¾ã¾ã®EBNFã¨æ£è¦è¡¨ç¾ã使ãã¾ããããã§ã¯æãããªã¨ããã§CSVã®è§£æå¨ãä½ã£ã¦ã¿ã¾ãã leiningenããã¸ã§ã¯ãä¾åã¢ã¸ã¥ã¼ã« ä½ã¯ã¨ãããproject.cljãæä½éå¿ è¦ãªã©ã¤ãã©ãªã¯ä»¥ä¸ã®äºã¤ã :dependencies [[org.clojure/clojure "1.5.1"] [instaparse "1.0.1"]] CSVã®BNF CSVã¯RFC4180ã«BNFãè¨è¿°ããã¦ããã®ã§ãããæåãã¾ãã file = [header CRLF] record *(CRLF record) [CRLF] header = name *(COMMA name) record = field *(COMMA field) name = field field = (escaped / non
æèèªç±ææ³ã¨ãã¼ãµã³ã³ããã¼ã¿ Pasberth December 20, 2013 æ¦ è¦ ãã®ææ¸ã¯æèèªç±ææ³ã¨ãã¼ãµã³ã³ããã¼ã¿ã®ç°¡åãªæç§æ¸ã§ã ãï¼ãããèªãã°ï¼ãã£ã¨ï¼æèèªç±ææ³ã¨ãã¼ãµã³ã³ããã¼ã¿ãçè§£ ããæå©ãã¨ãªãã§ãããï¼æ¬æ¸ã¯ä¸»ã« Haskell ã«ããããã¼ãµã³ã³ã ãã¼ã¿ãæ±ãï¼ãã¨ãã°ï¼Parsec ã Attoparsecï¼Trifecta ã®ä½¿ãæ¹ãç°¡ åã«åå¼·ããã®ãæ¬æ¸ã®ç®æ¨ã§ããï¼ããããªãããã¼ãµã³ã³ããã¼ã¿ ã«èå³ããããªãï¼ãã²æã«ã¨ã£ã¦ã¿ã¦ã»ããï¼ãã£ã¨å½¹ã«ç«ã¤ã ããï¼ ç® æ¬¡ 1 ã¯ããã« 2 1.1 ã½ã¼ã¹ã³ã¼ã . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 ã½ã¼ã¹ã³ã¼ãã®å ¥ææ¹æ³ . . . . . . . . . . . . . . . . . . .
ãã®è¨äºã¯Clojure Advent Calendar 2013 - Qiita [ãã¼ã¿]ï¼ï¼æ¥ç®ã®è¨äºã§ãã instaparse æ¬è¨äºã§ã¯instaparseã¨ããã©ã¤ãã©ãªã使ã£ã¦éãã§ã¿ã¾ãã instaparseã¯EBNFãABNFã§è¨è¿°ãããæèèªç±ææ³ããèªåçã«ãã¼ãµãçæãã¦ããã¾ãã å·¦å帰ãå³åå¸°ãææ§æ§ãªã©ããããªãæèèªç±ææ³ã§ãåä½ãã¾ãã çæããããã¼ãµã¯æååããenliveã¾ãã¯hiccupé¢¨ã®æ¨æ§é ãçæãã¾ãã ä»åã¯åãªãã©ã ãè¨ç®ã顿ã«ãã¾ãã åãªãã©ã ãè¨ç® åãªãã©ã ãè¨ç®ã¯ãåããªãï¼ã¾ãã¯åãã²ã¨ã¤ãããªãï¼ã©ã ãè¨ç®ã§ãã ã©ã ãè¨ç®ã¯ã¨ã¦ãã·ã³ãã«ã§ããã¹ã¦ã®è¨ç®ã颿°å®ç¾©ã¨é¢æ°é©ç¨ã ãã§å®ç¾å¯è½ã§ãã ã©ã ãè¨ç®ã®æ§æã¯ä»¥ä¸ã®ï¼ã¤ãããªãã¾ãã t ::= é x 夿° | \x . t ã©ã ãæ½è±¡ | t t 颿°é©ç¨
ããã«ã¡ã¯ãä¹ ä¿ç°ã§ãã çããæ£è¦è¡¨ç¾ã¯ä½¿ã£ã¦ãã¾ãã? PHPã«éããã©ããªè¨èªã使ã£ã¦ãã¦ããæ£è¦è¡¨ç¾ã«ãä¸è©±ã«ãªã£ã¦ããªãããã°ã©ãã¯ããªãã¨æãã¾ãããããããã®æ£è¦è¡¨ç¾ãã©ã®ããã«å®è£ ããã¦ãããã«ã¤ãã¦ã¯ç¥ããªãæ¹ãå¤ãã®ã§ã¯ãªãã®ã§ããããã ãã®è¨äºã§ã¯ããã®æ£è¦è¡¨ç¾ã¨ã³ã¸ã³ã®å®è£ æ¹æ³ã®ä¸ã¤ã§ããä»®æ³ãã·ã³ã«ããæ£è¦è¡¨ç¾ã¨ã³ã¸ã³ã®å®è£ æ¹æ³ã解説ãã¤ã¤å®éã«ç°¡åãªæ£è¦è¡¨ç¾ã¨ã³ã¸ã³ãä½ã£ã¦ããããã¨æãã¾ãã æ£è¦è¡¨ç¾ã¨ã³ã¸ã³ã®å®è£ æ¹æ³ æ£è¦è¡¨ç¾ã¨ã³ã¸ã³ã®å®è£ æ¹æ³ã¯ããã¤ãããã®ã§ãããããã®ä¸ã¤ã«ä»®æ³ãã·ã³ã«ãã£ã¦æ£è¦è¡¨ç¾ã®ãããã³ã°å¦çãå®è¡ããããæ¹ãããã¾ããPHPã§å©ç¨ãã¦ããæ£è¦è¡¨ç¾ã¨ã³ã¸ã³ã§ããPCREã¯ãã®æ¹å¼ãæ¡ç¨ãã¦ãã¾ãã ä»®æ³ãã·ã³ã«ããå®è£ æ¹æ³ã¯ãæ£è¦è¡¨ç¾ã¨ãããããããã°ã©ãã³ã°è¨èªã®å®è£ æ¹æ³ã®ä¸ã¤ã¨ãã¦ç¥ããã¦ãã¾ããRubyã®æãã¡ã¸ã£ã¼ãªå®è£
instaparseã¨ã¯ ä»ãClojure使ãã®éã§ã¯å¤§ããªè©±é¡ã¨ãªã£ã¦ããããã¼ãµ(æ§æè§£æããã°ã©ã )使ç¨ã©ã¤ãã©ãªã§ãã æ£è¦è¡¨ç¾ã使ãã®ã¨åããããç°¡åã«ãã¼ãµã使ã§ããã¨ã®ãã¨ã§ãã Clojureä½è ã§ãããRich Hickeyã大è奮(ã½ã¼ã¹:twitter)ãããã§ãã ã§ã¯ç°¡åã«instaparseã®ç¹å¾´ã解説ãã¾ãã githubã«æ©è½ä¸è¦§ãããã®ã§ããããããã代表çãªããã¤ãã®ç¹å¾´ãæç²ã å ¥åã¨ãã¦æååãåãåããEBNFè¨æ³ãç¨ãã¦æ§æè§£æããªã¼ãçæãã åºåãã©ã¼ãããã¯ãClojureã§äººæ°ã®å½¢å¼ï¼hiccupã¨enliveï¼ã®ä¸¡æ¹ããµãã¼ã è§£æã¨ã©ã¼ã®è©³ç´°ãªã¬ãã¼ããåºãã¦ããã æååãEBNFè¨æ³ã§ããã¨ã£ã¦ãã¼ãµãç°¡åã«æ¸ããã¨ããã¿ããã§ãã Githubã®ãã¥ã¼ããªã¢ã«ãåèã«ãinstaparseãåããã¦ã¿ã¾ãããã ç°å¢æ§ç¯æ¹
人çã²ã¼ã ã¨ãã£ãªã¢ãã¶ã¤ã³ ãã¼ãã²ã¼ã ã®äººçã²ã¼ã ãä¹ ãããã£ã¦ããªãããå°ããé ã¯è·æ¥é¸æãã¹ã§ã¯å»è ãå¼è·å£«ããããã¯ã¿ã¬ã³ããå¿ ãçã£ã¦ãããé«ã給æãå¾ãããè·æ¥ãçã£ã¦ã貯ã¾ã£ã給æã§æ ªãå®¶ãè²·ã£ã¦è³ç£ãå¢ãããæçµçãªææéãæãé«ãã¨åã¦ãã®ã§ããããªãã¬ã¼ãâ¦
ãªãªã¼ã¹ãé害æ å ±ãªã©ã®ãµã¼ãã¹ã®ãç¥ãã
ææ°ã®äººæ°ã¨ã³ããªã¼ã®é ä¿¡
å¦çãå®è¡ä¸ã§ã
j次ã®ããã¯ãã¼ã¯
kåã®ããã¯ãã¼ã¯
lãã¨ã§èªã
eã³ã¡ã³ãä¸è¦§ãéã
oãã¼ã¸ãéã
{{#tags}}- {{label}}
{{/tags}}