lang2(Seq__)=error"assume normal form, ausmulipliziert"
lang2(Seq__)=error"assume normal form, ausmulipliziert"
lang2(Altlr)=(lang2l)`union`(lang2r)
lang2(Altlr)=(lang2l)`union`(lang2r)
...
@@ -57,7 +59,7 @@ final (Seq l Push) = False --f rs then final l else rs where rs = final r -- Wro
...
@@ -57,7 +59,7 @@ final (Seq l Push) = False --f rs then final l else rs where rs = final r -- Wro
--final (Seq (Alt l1 l2) r) = final (l1 <.> r) || final (l2 <.> r) --
--final (Seq (Alt l1 l2) r) = final (l1 <.> r) || final (l2 <.> r) --
final(SeqlPop)=final(derPushl)-- assuming normal form
final(SeqlPop)=final(derPushl)-- assuming normal form
finalx@(Seqlr)|finalr=finall
finalx@(Seqlr)|finalr=finall
|otherwise=error"to numb"--final $ norm $ deriv (invert r) l--trace (show x) $ undefined -- only if normalized undefined --if rs then final l else rs where rs = final r -- Wrong definition CONTINUE: find real definition
|otherwise=""`Data.Set.member`(langx)-- please find a smarter way!! error "too numb" --final $ norm $ deriv (invert r) l--trace (show x) $ undefined -- only if normalized undefined --if rs then final l else rs where rs = final r -- Wrong definition CONTINUE: find real definition
final(Altlr)=finall||finalr
final(Altlr)=finall||finalr
final(Star_)=True
final(Star_)=True
...
@@ -69,6 +71,7 @@ derPush Pop = Zero
...
@@ -69,6 +71,7 @@ derPush Pop = Zero
derPush(Altlr)=(derPushl)<+>(derPushr)-- Alt (derPush l) (derPush r)
derPush(Altlr)=(derPushl)<+>(derPushr)-- Alt (derPush l) (derPush r)
derPush(Seqlr)|finalr=(l<.>(derPushr))<+>(derPushl)-- Alt (Seq l (derPush r)) (derPush l)
derPush(Seqlr)|finalr=(l<.>(derPushr))<+>(derPushl)-- Alt (Seq l (derPush r)) (derPush l)
|otherwise=l<.>(derPushr)-- Seq l (derPush r)
|otherwise=l<.>(derPushr)-- Seq l (derPush r)
derPush(Starx)=(Starx)<.>(derPushx)--
derPop::RegEx->RegEx
derPop::RegEx->RegEx
derPopEmpty=Push
derPopEmpty=Push
...
@@ -78,6 +81,9 @@ derPop Pop = Empty
...
@@ -78,6 +81,9 @@ derPop Pop = Empty
derPop(Altlr)=(derPopl)<+>(derPopr)-- Alt (derPop l) (derPop r)
derPop(Altlr)=(derPopl)<+>(derPopr)-- Alt (derPop l) (derPop r)
derPop(Seqlr)|finalr=(l<.>(derPopr))<+>(derPopl)-- Alt (Seq l (derPop r)) (derPop l)
derPop(Seqlr)|finalr=(l<.>(derPopr))<+>(derPopl)-- Alt (Seq l (derPop r)) (derPop l)
|otherwise=l<.>(derPopr)-- Seq l (derPop r)
|otherwise=l<.>(derPopr)-- Seq l (derPop r)
derPop(Starx)=(Starx)<.>(derPopx)-- is this correct?
deriv::RegEx->(RegEx->RegEx)
deriv::RegEx->(RegEx->RegEx)
derivPush=derPush
derivPush=derPush
...
@@ -97,14 +103,31 @@ ends_in (Alt l r ) = nub $ sort $ ends_in l ++ ends_in r
...
@@ -97,14 +103,31 @@ ends_in (Alt l r ) = nub $ sort $ ends_in l ++ ends_in r