summaryrefslogtreecommitdiff
path: root/devel/compiler
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-04-20 15:36:33 +0000
committeraarne <aarne@cs.chalmers.se>2007-04-20 15:36:33 +0000
commitfcbc004aa664c862d9de944eeb4da7ded68bf0c0 (patch)
tree9ba396d972ad3268d0ea42b689a334b637c074ec /devel/compiler
parentfc2c3cf057c15ae94382a81fa2c86a8963caf9ea (diff)
record labels in compiler experiment
Diffstat (limited to 'devel/compiler')
-rw-r--r--devel/compiler/Eval.hs6
-rw-r--r--devel/compiler/Src.cf10
-rw-r--r--devel/compiler/ex.src27
3 files changed, 23 insertions, 20 deletions
diff --git a/devel/compiler/Eval.hs b/devel/compiler/Eval.hs
index b59fb53f2..f0c4f1303 100644
--- a/devel/compiler/Eval.hs
+++ b/devel/compiler/Eval.hs
@@ -52,8 +52,6 @@ eval e = case e of
---- pattern match first
return $ compVal [] $ VPro t' v' ---- []
- EPro t v -> do
+ EPro t v@(Lab _ i) -> do
t' <- eval t
- ---- project first
- return $ VPro t' (VPar 666) ---- lookup label
-
+ return $ compVal [] $ VPro t' (VPar i)
diff --git a/devel/compiler/Src.cf b/devel/compiler/Src.cf
index d3b29ee45..5a49b2341 100644
--- a/devel/compiler/Src.cf
+++ b/devel/compiler/Src.cf
@@ -20,10 +20,12 @@ coercions Type 1 ;
terminator Type "" ;
-FTyp. Typing ::= Ident ":" Type ;
+FTyp. Typing ::= Label ":" Type ;
separator Typing ";" ;
+Lab. Label ::= Ident "#" Integer ;
+
EVar. Exp2 ::= "$" Ident ;
EOpr. Exp2 ::= "&" Ident ;
ECon. Exp2 ::= Ident ;
@@ -33,7 +35,7 @@ ECst. Exp2 ::= "(" Ident "@" [Exp] ")" ;
ERec. Exp2 ::= "{" [Assign] "}" ;
EApp. Exp1 ::= Exp1 Exp2 ;
ESel. Exp1 ::= Exp1 "!" Exp2 ;
-EPro. Exp1 ::= Exp1 "." Exp2 ;
+EPro. Exp1 ::= Exp1 "." Label ;
ETab. Exp1 ::= "table" Type "{" [Case] "}" ;
ECat. Exp ::= Exp "++" Exp1 ;
EAbs. Exp ::= "\\" Ident "->" Exp ;
@@ -42,7 +44,7 @@ coercions Exp 2 ;
separator Exp "," ;
-FExp. Assign ::= Ident "=" Exp ;
+FExp. Assign ::= Label "=" Exp ;
separator Assign ";" ;
@@ -57,7 +59,7 @@ PCon. Patt ::= "(" Ident [Patt] ")" ;
terminator Patt "" ;
-FPatt. AssPatt ::= Ident "=" Patt ;
+FPatt. AssPatt ::= Label "=" Patt ;
separator AssPatt ";" ;
diff --git a/devel/compiler/ex.src b/devel/compiler/ex.src
index 6169cb5ee..241fd96b4 100644
--- a/devel/compiler/ex.src
+++ b/devel/compiler/ex.src
@@ -3,10 +3,10 @@ param Gen = Masc | Fem ;
param AG = A Num Gen ;
-oper Agr = {g : Gen ; n : Num} ;
+oper Agr = {g#0 : Gen ; n#1 : Num} ;
-oper CN = {s : Num -> Str ; g : Gen} ;
-oper NP = {s : Str ; a : Agr} ;
+oper CN = {s#1 : Num -> Str ; g#0 : Gen} ;
+oper NP = {s#1 : Str ; a#0 : Agr} ;
oper artDef : Gen -> Str = \g -> table Gen {
(Masc) => "le" ;
@@ -14,29 +14,32 @@ oper artDef : Gen -> Str = \g -> table Gen {
} ! $g ;
lin Voiture : CN = {
- s = table Num {
+ s#1 = table Num {
(Sg) => "voiture" ;
(Pl) => "voitures"
} ;
- g = (Fem@)
+ g#0 = (Fem@)
} ;
lin Bus : CN = {
- s = table Num {$x => "bus"} ;
- g = (Masc@)
+ s#1 = table Num {$x => "bus"} ;
+ g#0 = (Masc@)
} ;
lin Indef : CN -> NP = \cn -> {
- s = table Gen {
+ s#1 = table Gen {
(Masc) => "un" ;
$x => "une"
- } ! $cn.g ++ $cn.s ! (Sg@) ;
- a = {g = $cn.g ; n = (Sg@)}
+ } ! $cn.g#0 ++ $cn.s#1 ! (Sg@) ;
+ a#0 = {g#0 = $cn.g#0 ; n#1 = (Sg@)}
} ;
lin Def : CN -> NP = \cn -> {
- s = &artDef $cn.g ++ $cn.s ! (Sg@) ;
- a = {g = $cn.g ; n = (Sg@)}
+ s#1 = &artDef $cn.g#0 ++ $cn.s#1 ! (Sg@) ;
+ a#0 = {g#0 = $cn.g#0 ; n#1 = (Sg@)}
} ;
+
+lin UneVoiture : NP = Indef Voiture ;
+lin LaVoiture : NP = Def Voiture ;