Я работаю над упражнением, которое строит дерево вывода языка while. Моя реализация языка while состоит из алгебраических типов данных, таких как «Aexp» (арифметические выражения), «Bexp» (логические выражения) и «Stm» (операторы):
type Var = String
data Aexp = N Integer
| V Var
| Add Aexp Aexp
| Mult Aexp Aexp
| Sub Aexp Aexp
deriving (Show, Eq)
data Bexp = TRUE
| FALSE
| Eq Aexp Aexp
| Le Aexp Aexp
| Neg Bexp
| And Bexp Bexp
deriving (Show, Eq)
data Stm = Ass Var Aexp
| Skip
| Comp Stm Stm
| If Bexp Stm Stm
| While Bexp Stm
| Repeat Stm Bexp
deriving Show
После этих алгебраических типов данных я создал другие алгебраические типы данных для представления деревьев вывода программ языка while.
type State = Var -> Z
data Config = Inter Stm State -- <S, s>
| Final State -- s
data Transition = Config :-->: State
data DerivTree = AssNS Transition
| SkipNS Transition
| CompNS Transition DerivTree DerivTree
| IfTTNS Transition DerivTree
| IfFFNS Transition DerivTree
| WhileTTNS Transition DerivTree DerivTree
| WhileFFNS Transition
| RepeatTTNS Transition
| RepeatFFNS Transition DerivTree DerivTree
Как я могу показать такое дерево вывода??
<z:=x, s> -> s' <x:=,s1> -> s''
----------------------------------
<z:=x; x:=y,s> -> s'' <y:=z,s''> -> s'''
------------------------------------------------------
<z:=x; x:=y; y:=z, s> -> s'''
Ожидаемое значение для каждого конструктора выглядит следующим образом:
Config
иState
? - person Bergi   schedule 16.11.2015Aexpr
,Bexpr
иStm
имеют какое-либо отношение к вашей проблеме с отображениемDerivTree
? - person Cirdec   schedule 16.11.2015Aexp
,Bexp
иStm
не имеют ничего общего, я написал это, чтобы вы знали, что это за выражения в дереве. Моя проблема заключается в том, как правильно распечатать дерево, чтобы получить удобную визуализацию. Тип производного дерева изображения является хорошей целью... - person eduardogr   schedule 16.11.2015Config
имеет две формы? В семантике большого шага используется только первый. Вам действительно нужен второй, а? Если вам это нужно для малошаговой семантики, рассмотрите возможность использования другого типа для двух типов конфигураций. - person chi   schedule 16.11.2015