Peggy練習
数ヶ月前に遊んで以来全く触っていなかったのですっかり忘れてしまった....
思い出そうと思って、Peggyチュートリアルにある数式パーサに、べき乗演算を追加したものを書いてみる
{-# Language TemplateHaskell,QuasiQuotes, FlexibleContexts #-} import Text.Peggy [peggy| top :: Double = expr !. expr ::Double =expr "+" fact { $1 + $2 } /expr "-" fact { $1 - $2 } /fact fact ::Double =fact "*" beki { $1 * $2 } /fact "/" beki { $1 / $2 } /beki beki ::Double = beki "^" term { $1 ^^ (floor $2) } / term term ::Double = "(" expr ")" /number number :::Double = [1-9] [0-9]* {read ($1:$2)} |] main = print.parseString top "stdin" =<< getLine
動いた!!
と思ったのもつかの間、()のあとにべき乗演算子をつけるとパースエラーが起きる
unexpected inputと...
なぜだ....
まだ理解が足りないようです