new pre syntax (as alternative): pre {"o" | "i" => "an" ; _ => "a"}

This commit is contained in:
aarne
2009-05-15 16:45:16 +00:00
parent 27c602b14f
commit dde36ed01c
4 changed files with 3473 additions and 3405 deletions

View File

@@ -178,6 +178,10 @@ resource ResEng = ParamX ** open Prelude in {
"a" ;
"an" / strs {"a" ; "e" ; "i" ; "o" ; "A" ; "E" ; "I" ; "O" }
} ;
--- artIndef = pre {
--- "a" | "e" | "i" | "o" | "A" | "E" | "I" | "O" => "an" ;
--- _ => "a"
--- } ;
artDef = "the" ;

View File

@@ -16,5 +16,6 @@ oper
elision : (_,_,_ : Str) -> Str = \il, l', lo ->
pre {il ; l' / vocale ; lo / sImpuro} ;
--- pre {vocale => l' ; sImpuro => lo ; _ => il} ;
}

File diff suppressed because one or more lines are too long

View File

@@ -419,7 +419,9 @@ Exp4
_ -> TRaw
in S (T annot $5) $2 }
| 'variants' '{' ListExp '}' { FV $3 }
| 'pre' '{' Exp ';' ListAltern '}' { Alts ($3, $5) }
| 'pre' '{' ListCase '}' {% mkAlts $3 }
| 'pre' '{' String ';' ListAltern '}' { Alts (K $3, $5) }
| 'pre' '{' Ident ';' ListAltern '}' { Alts (Vr $3, $5) }
| 'strs' '{' ListExp '}' { Strs $3 }
| '#' Patt2 { EPatt $2 }
| 'pattern' Exp5 { EPattType $2 }
@@ -715,5 +717,26 @@ checkInfoType (MTTransfer _ _) (id,pos,info) =
AbsFun _ _ -> return ()
_ -> failLoc (fst pos) "illegal definition in transfer module"
mkAlts cs = case cs of
_:_ -> do
def <- mkDef (last cs)
alts <- mapM mkAlt (init cs)
return (Alts (def,alts))
_ -> fail "empty alts"
where
mkDef (_,t) = return t
mkAlt (p,t) = do
ss <- mkStrs p
return (t,ss)
mkStrs p = case p of
PAlt a b -> do
Strs as <- mkStrs a
Strs bs <- mkStrs b
return $ Strs $ as ++ bs
PString s -> return $ Strs [K s]
PV x -> return (Vr x) --- for macros; not yet complete
_ -> fail "no strs from pattern"
}