diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-11-03 22:00:08 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-11-03 22:00:08 +0000 |
| commit | 5956ba6b38f56c4aa41f7216f7dabade368bb2f2 (patch) | |
| tree | 991102baba1f7b26e258c7b0965362a0e99ad980 /src/GF/Command/PPrTree.hs | |
| parent | ed4b43961deb37ee2592e60db0c182c7efa5528f (diff) | |
command language and gfcc term parser in bnfc
Diffstat (limited to 'src/GF/Command/PPrTree.hs')
| -rw-r--r-- | src/GF/Command/PPrTree.hs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/GF/Command/PPrTree.hs b/src/GF/Command/PPrTree.hs new file mode 100644 index 000000000..555f88a3a --- /dev/null +++ b/src/GF/Command/PPrTree.hs @@ -0,0 +1,35 @@ +module GF.Command.PPrTree (pTree, prExp) where + +import GF.GFCC.AbsGFCC +import GF.GFCC.Macros +import qualified GF.Command.ParGFShell as P +import GF.Command.PrintGFShell +import GF.Command.AbsGFShell +import GF.Command.ErrM + +pTree :: String -> Exp +pTree s = case P.pTree (P.myLexer s) of + Ok t -> tree2exp t + Bad s -> error s + +tree2exp t = case t of + TApp f ts -> tree (AC (i2i f)) (map tree2exp ts) + TAbs xs t -> DTr (map i2i xs ++ ys) f ts where DTr ys f ts = tree2exp t + TId c -> tree (AC (i2i c)) [] + TInt i -> tree (AI i) [] +-- TStr s +-- TFloat d -> + where + i2i (Ident s) = CId s + +prExp :: Exp -> String +prExp = printTree . exp2tree + +exp2tree (DTr xs at ts) = tabs (map i4i xs) (tapp at (map exp2tree ts)) + where + tabs [] t = t + tabs ys t = TAbs ys t + tapp (AC f) [] = TId (i4i f) + tapp (AC f) vs = TApp (i4i f) vs + tapp (AI i) [] = TInt i + i4i (CId s) = Ident s |
