{"description":"packrat parsing \u3068\u3044\u3046\u30d1\u30fc\u30b5\u306e\u5b9f\u88c5\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002\u7279\u5fb4\u306f\u3001\u518d\u5e30\u4e0b\u964d\u30d1\u30fc\u30b5 + \u7121\u9650\u5148\u8aad\u307f\u53ef\u80fd + memoize*1 \u3068\u3044\u3046\u611f\u3058\u3067\u3059\u3002\u50d5\u304c\u4e0b\u624b\u306a\u8aac\u660e\u3092\u3059\u308b\u3088\u308a\u3001\u82f1\u8a9e\u308f\u304b\u3089\u306a\u304f\u3066\u3082 Haskell \u308f\u304b\u308c\u3070\u308f\u304b\u308b\u7d20\u6674\u3089\u3057\u3044\u30b9\u30e9\u30a4\u30c9\u3084Pappy (reference implementation) \u3092\u53c2\u7167\u3057\u3066\u3082\u3089\u3063\u305f\u307b\u3046\u304c\u3044\u3044\u3067\u3059\u3002\u3067\u3001\u7df4\u7fd2\u3068\u3057\u3066 Ruby \u3067 packrat parser \u3092\u4f7f\u3063\u3066\u8db3\u3057\u7b97\u3068\u639b\u3051\u7b97\u3060\u3051\u306e\u96fb\u5353\u3092\u4f5c\u3063\u3066\u307f\u307e\u3057\u305f\u3002 $ ruby arith.rb 1 + 2 + 3 => 6 1 + 2 * 3 => 7 1 + 2 * (3 + 4) => 15 *1:\u2026","title":" Ruby \u3067 packrat parser","html":"<iframe src=\"https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmametter.hatenablog.com%2Fentry%2F20070906%2Fp1\" title=\" Ruby \u3067 packrat parser - \u307e\u3081\u3081\u3082\" class=\"embed-card embed-blogcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"></iframe>","type":"rich","version":"1.0","author_name":"ku-ma-me","width":"100%","url":"https://mametter.hatenablog.com/entry/20070906/p1","provider_name":"Hatena Blog","blog_url":"https://mametter.hatenablog.com/","image_url":null,"blog_title":"\u307e\u3081\u3081\u3082","author_url":"https://blog.hatena.ne.jp/ku-ma-me/","provider_url":"https://hatena.blog","categories":["Ruby"],"published":"2007-09-06 00:00:00","height":"190"}