|
| 1 | +from contextFree import ContextFreeGrammar |
| 2 | +from grammar import Rule |
| 3 | + |
| 4 | +def buildCFGWithChainRules(): |
| 5 | + g = ContextFreeGrammar() |
| 6 | + rules = [] |
| 7 | + rules.extend( Rule(["A"],["a"]), Rule(["A"],["a","A"]), Rule(["A"],["B"])) |
| 8 | + rules.extend( Rule(["B"],["b","B"]), Rule(["B"],["b"]), Rule(["B"],["C"])) |
| 9 | + g.addRules(rules) |
| 10 | + return g |
| 11 | + |
| 12 | +def buildCFGWtihNullableVars(): |
| 13 | + g = ContextFreeGrammar() |
| 14 | + rules = [] |
| 15 | + rules.extend( Rule(["S"],["A","C","A"]), Rule(["A"],["a","A","a"])) |
| 16 | + rules.extend( Rule(["A"],["B"]), Rule(["A"],["C"]), Rule(["B"],["b","B"])) |
| 17 | + rules.extend( Rule(["B"],["b"]), Rule(["C"],["c","C"]), Rule(["C"],[])) |
| 18 | + g.addRules(rules) |
| 19 | + return g |
| 20 | + |
| 21 | +def buildCFGWithRecursiveStartSymbol(): |
| 22 | + g = ContextFreeGrammar() |
| 23 | + rules = [] |
| 24 | + rules.extend( Rule(["S"],["a","S"]), Rule(["S"],["A","B"]), Rule(["S"],["A","C"])) |
| 25 | + rules.extend( Rule(["A"],["a","A"]), Rule(["A"],[]), Rule(["B"],["b","B"])) |
| 26 | + rules.extend( Rule(["B"],["b","S"]), Rule(["C"],["c","C"]), Rule(["C"],[])) |
| 27 | + g.addRules(rules) |
| 28 | + return g |
| 29 | + |
| 30 | +def buildCFGWithVarsThatDontDeriveTerminalStrings(): |
| 31 | + g = ContextFreeGrammar() |
| 32 | + rules = [] |
| 33 | + rules.extend( Rule(["S"],["A","C"]), Rule(["S"],["B","S"]), Rule(["S"],["B"])) |
| 34 | + rules.extend( Rule(["A"],["a","A"]), Rule(["A"],["a","F"]), Rule(["B"],["C","F"])) |
| 35 | + rules.extend( Rule(["B"],["b"]), Rule(["C"],["c","C"]), Rule(["C"],["D"])) |
| 36 | + rules.extend( Rule(["D"],["a","D"]), Rule(["D"],["B","D"]), Rule(["D"],["C"])) |
| 37 | + rules.extend( Rule(["E"],["a","A"]), Rule(["E"],["B","S","A"]), Rule(["F"],["b","B"])) |
| 38 | + rules.extend( Rule(["F"],["b"])) |
| 39 | + g.addRules(rules) |
| 40 | + return g |
| 41 | + |
| 42 | +def buildCFGForReachableVars: |
| 43 | + g = ContextFreeGrammar() |
| 44 | + rules = [] |
| 45 | + rules.extend( Rule(["S"],["B","S"]), Rule(["S"],["B"]), Rule(["A"],["a","A"])) |
| 46 | + rules.extend( Rule(["A"],["a","F"]), Rule(["B"],["b"]), Rule(["E"],["a","A"])) |
| 47 | + rules.extend( Rule(["E"],["B","S","A"]), Rule(["F"],["b","B"]), Rule(["F"],["b"])) |
| 48 | + g.addRules(rules) |
| 49 | + return g |
0 commit comments