Я пытаюсь реализовать некоторый язык с й = 4 и pritn х, конструкции с использованием Haskell счастливой До сих пор я определил грамматику как этого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, но я не смог найти ни одного примера. Как я могу реализовать назначение и печать или где я могу найти информацию или пример?
Возможно, вы найдете этот СОСТОЙНЫЙ вопрос полезным: http://stackoverflow.com/questions/16970431/implementing-a-language-interpreter-in-haskell – ErikR