3

x = 4 と pritn x で言語を実装しようとしています.haskell を使用した構造は満足しています.これまでのところ、このような文法を定義しました.

 terms 
    : term                   { [$1] }
    | term terms             { $1 : $2 }

 term 
    : var '=' int             { Assign $1 $3 }
    | print var               { Print $2 }

次のようなものに実行すると

x = 4
print x
y = 5
print y

私は得る

[Assign "x" 4, Print "x", Assign "y" 5, Print "y"]

実際に実装したいが「代入」の実装方法がわからない

私は haskell が苦手ですが、幸せなドキュメントから「let」の実装を見て、いくつかの環境 p が渡され、評価されるというアイデアを得ました

Exp   : let var '=' Exp in Exp  { \p -> $6 (($2,$4 p):p) }
  | Exp1                    { $1 }

Exp1  : Exp1 '+' Term           { \p -> $1 p + $3 p }
  | Exp1 '-' Term           { \p -> $1 p - $3 p }
  | Term                    { $1 }

Term  : Term '*' Factor         { \p -> $1 p * $3 p }
  | Term '/' Factor         { \p -> $1 p `div` $3 p }
  | Factor                  { $1 }

Factor            
  : int                     { \p -> $1 }
  | var                     { \p -> case lookup $1 p of
                                    Nothing -> error "no var"
                    Just i  -> i }
  | '(' Exp ')'             { $2 }

「割り当て」の実装はこのenvで何かをしなければならないと思いますが、例が見つかりませんでした。assign と print を実装するにはどうすればよいですか? また、その情報や例はどこにありますか?

4

1 に答える 1