HaskellでParserを作る
より型安全なASTを定義するにはGADTなどを使うといい Parsecなどを使っている
アセンブリを吐くCコンパイラ
フロントエンドはガッツリ書かれているがコード生成は見当たらない
では、data typeはどうやって決める?
code:hs
parseTest expr "(1+2)*7+9"
Add (Mul (Add (Nat 1) (Nat 2)) (Nat 7)) (Nat 9)
こういうASTの表現のしかたもある
でも、上のやつの方が扱いやすいかな
code:hs
data Expr = Natural Integer -- 整数リテラル
| BinOp String Expr Expr -- 2項演算:演算子、左辺式、右辺式
deriving (Show)
Right (BinOp "+" (BinOp "-" (Natural 0) (Natural 1)) (BinOp "*" (Natural 2) (Natural 3)))
jsonパーサーを作る
コメントもいっぱい