forked from GitHub/gf-core
Added srg0006: A grammar with a cycle caused by an empty production.
This commit is contained in:
@@ -88,7 +88,7 @@ stateGFCC = mkGFCC . mkCanon2gfcc . stateGrammarST
|
|||||||
|
|
||||||
-- * Grammar filtering
|
-- * Grammar filtering
|
||||||
|
|
||||||
-- | Removes all directly cyclic productions.
|
-- | Removes all directly and indirectly cyclic productions.
|
||||||
removeCycles :: CFRules -> CFRules
|
removeCycles :: CFRules -> CFRules
|
||||||
removeCycles = groupProds . removeCycles_ . ungroupProds
|
removeCycles = groupProds . removeCycles_ . ungroupProds
|
||||||
where removeCycles_ rs = [r | r@(CFRule c rhs _) <- rs, rhs /= [Cat c]]
|
where removeCycles_ rs = [r | r@(CFRule c rhs _) <- rs, rhs /= [Cat c]]
|
||||||
|
|||||||
10
test/srg/srg0006/srg0006.gf
Normal file
10
test/srg/srg0006/srg0006.gf
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
-- A grammar with a cycle caused by an empty category.
|
||||||
|
cat S; E;
|
||||||
|
|
||||||
|
fun f : E -> S -> S;
|
||||||
|
fun g : S ;
|
||||||
|
fun e : E ;
|
||||||
|
|
||||||
|
lin f e s = { s = e.s ++ s.s } ;
|
||||||
|
lin g = { s = "s" } ;
|
||||||
|
lin e = { s = [] } ;
|
||||||
Reference in New Issue
Block a user