{
  "title": "Formal Languages With Visualizations",
  "desc": "Formal Languages With Visualizations",
  "build_dir": "Books",
  "code_dir": "SourceCode/",
  "code_lang": {
    "Java": {
      "ext": [
        "java"
      ],
      "label": "Java",
      "lang": "java"
    },
    "Java_Generic": {
      "ext": [
        "java"
      ],
      "label": "Java (Generic)",
      "lang": "java"
    },
    "C++": {
      "ext": [
        "cpp",
        "h"
      ],
      "label": "C++",
      "lang": "C++"
    }
  },
  "lang": "en",
  "build_JSAV": false,
  "suppress_todo": false,
  "assumes": "recursion",
  "dispModComp": true,
  "glob_exer_options": {
    "JXOP-debug": "true"
  },
  "chapters": {
    "Preface": {
      "Intro": {
        "long_name": "How to Use this System",
        "sections": {}
      }
    },
    "Introduction": {
      "VisFormalLang/FLIntro": {
        "long_name": "Formal Languages",
        "sections": {
          "Introduction": {},
          "Prerequisites": {},
          "What we will do": {},
          "Process": {}
        }
      },
      "VisFormalLang/FLOverview": {
        "long_name": "Overview",
        "sections": {
          "Languages, Grammars, and Machines": {},
          "Language Hierarchy": {
            "HierarchyCON": {
              "type": "dgm",
              "mod_name": "FLOverview"
            }
          },
          "Power of Machines": {},
          "Application: Compilers": {
            "CompileCON": {
              "type": "dgm",
              "mod_name": "FLOverview"
            },
            "CompileStagesCON": {
              "type": "dgm",
              "mod_name": "FLOverview"
            }
          },
          "Some Mindbending Ideas": {}
        }
      },
      "VisFormalLang/FLConcepts": {
        "long_name": "Major Concepts",
        "sections": {
          "Introduction": {},
          "Languages": {},
          "Grammars": {
            "CharacterizeLang1": {
              "long_name": "Characterizing a Language, Problem 1",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/CharacterizeLang1.html",
              "mod_name": "FLConcepts",
              "threshold": 5
            },
            "CharacterizeLang2": {
              "long_name": "Characterizing a Language, Problem 2",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/CharacterizeLang2.html",
              "mod_name": "FLConcepts",
              "threshold": 5
            }
          },
          "Automata": {
            "AutomataCON": {
              "type": "dgm",
              "mod_name": "FLConcepts"
            }
          }
        }
      }
    },
    "Mathematical Background": {
      "Background/SetDef": {
        "long_name": "Sets and Relations",
        "sections": {
          "Set Notation": {
            "SetTFrelation": {
              "long_name": "Relations Exercise",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/Background/SetTFrelation.html",
              "mod_name": "SetDef",
              "threshold": 5
            }
          },
          "Equivalence Relations": {
            "SetTFequivrel": {
              "long_name": "Equivalence Exercise",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/Background/SetTFequivrel.html",
              "mod_name": "SetDef",
              "threshold": 5
            }
          },
          "Partial Orders": {
            "SetTFpartialorder": {
              "long_name": "PartialOrder Exercise",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/Background/SetTFpartialorder.html",
              "mod_name": "SetDef",
              "threshold": 5
            }
          }
        }
      },
      "Background/Proofs": {
        "long_name": "Mathematical Proof Techniques",
        "sections": {
          "Mathematical Proof Techniques": {
            "twoColorCON": {
              "type": "dgm",
              "mod_name": "Proofs"
            },
            "TwoColoringProofCON": {
              "long_name": "Two Coloring Proof Slideshow",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/Background/TwoColoringProofCON.css"
              ],
              "scripts": [
                "AV/Background/TwoColoringProofCON.js"
              ],
              "mod_name": "Proofs"
            }
          }
        }
      }
    },
    "Finite Acceptors": {
      "VisFormalLang/DFA": {
        "long_name": "Deterministic Finite Acceptors",
        "sections": {
          "DFA: Deterministic Finite Acceptor": {
            "DFAExampleCON": {
              "type": "dgm",
              "mod_name": "DFA"
            },
            "EvenBinaryDFACON": {
              "type": "dgm",
              "mod_name": "DFA"
            },
            "MachineTraceCON": {
              "long_name": "Machine Trace Slideshow",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/FA/MachineTraceCON.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/FA/MachineTraceCON.js"
              ],
              "mod_name": "DFA"
            },
            "TraceEvenBinaryDFACON": {
              "long_name": "TraceEvenBinaryDFACON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/FA/TraceEvenBinaryDFACON.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/FA/TraceEvenBinaryDFACON.js"
              ],
              "mod_name": "DFA"
            },
            "DFA_noTrapStateCON": {
              "type": "dgm",
              "mod_name": "DFA"
            },
            "DFA_withTrapStateCON": {
              "type": "dgm",
              "mod_name": "DFA"
            },
            "EvenBinaryEvenOnesDFACON": {
              "type": "dgm",
              "mod_name": "DFA"
            }
          }
        }
      },
      "VisFormalLang/NFA": {
        "long_name": "Non-Deterministic Finite Automata",
        "sections": {
          "NFA: Non-Deterministic Finite Automata": {
            "NFAexampleCON": {
              "type": "dgm",
              "mod_name": "NFA"
            },
            "NFAexample2CON": {
              "type": "dgm",
              "mod_name": "NFA"
            }
          },
          "NFA vs. DFA: Which is more powerful?": {
            "NFA2DFAaCON": {
              "type": "dgm",
              "mod_name": "NFA"
            },
            "NFA2DFAbCON": {
              "type": "dgm",
              "mod_name": "NFA"
            },
            "NFA2DFAEx2aCON": {
              "type": "dgm",
              "mod_name": "NFA"
            },
            "NFA2DFAEx2bCON": {
              "type": "dgm",
              "mod_name": "NFA"
            },
            "NFA2DFATraceCON": {
              "long_name": "NFA2DFATraceCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/FA/NFA2DFATraceCON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/FA/NFA2DFATraceCON.js"
              ],
              "mod_name": "NFA"
            }
          }
        }
      },
      "VisFormalLang/Minimization": {
        "long_name": "Minimizing the Number of States in a DFA",
        "sections": {
          "Minimizing the Number of States in a DFA": {
            "Minimization1CON": {
              "long_name": "Minimization1CON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/FA/Minimization1CON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/FA/Minimization1CON.js"
              ],
              "mod_name": "Minimization"
            },
            "Minimization2CON": {
              "long_name": "Minimization2CON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/FA/Minimization2CON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/FA/Minimization2CON.js"
              ],
              "mod_name": "Minimization"
            }
          }
        }
      }
    },
    "Regular Languages": {
      "VisFormalLang/RegEx": {
        "long_name": "Regular Expressions",
        "sections": {
          "Regular Expressions": {},
          "Regular Expressions vs. Regular Languages": {
            "phiREtoNFACON": {
              "type": "dgm",
              "mod_name": "RegEx"
            },
            "lambdaREtoNFACON": {
              "type": "dgm",
              "mod_name": "RegEx"
            },
            "aREtoNFACON": {
              "type": "dgm",
              "mod_name": "RegEx"
            },
            "schematicRepCON": {
              "long_name": "schematicRepCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/Regular/schematicRepCON.js"
              ],
              "mod_name": "RegEx"
            },
            "schematicORRepCON": {
              "long_name": "schematicORRepCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/Regular/schematicORRepCON.js"
              ],
              "mod_name": "RegEx"
            },
            "schematicConcatRepCON": {
              "long_name": "schematicConcatRepCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/Regular/schematicConcatRepCON.js"
              ],
              "mod_name": "RegEx"
            },
            "schematicStarRepCON": {
              "long_name": "schematicStarRepCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/Regular/schematicStarRepCON.js"
              ],
              "mod_name": "RegEx"
            },
            "ABStarOrCCON": {
              "type": "dgm",
              "mod_name": "RegEx"
            },
            "RENFAtoDFACON": {
              "long_name": "RENFAtoDFACON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/Regular/RENFAtoDFACON.js"
              ],
              "mod_name": "RegEx"
            },
            "GTGExampleCON": {
              "type": "dgm",
              "mod_name": "RegEx"
            },
            "GTGtoNFACON": {
              "long_name": "GTGtoNFACON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/Regular/GTGtoNFACON.js"
              ],
              "mod_name": "RegEx"
            },
            "REtoMinimizedDFACON": {
              "long_name": "REtoMinimizedDFACON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/Regular/REtoMinimizedDFACON.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/Regular/REtoMinimizedDFACON.js",
                "lib/paper-core.min.js",
                "DataStructures/FLA/REtoFAController.js",
                "lib/underscore.js",
                "DataStructures/FLA/Discretizer.js"
              ],
              "mod_name": "RegEx"
            }
          },
          "Converting Regular Languages to Regular Expressions": {
            "NFAtoRECON": {
              "long_name": "NFAtoRECON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/Regular/NFAtoRECON.css"
              ],
              "scripts": [
                "AV/VisFormalLang/Regular/NFAtoRECON.js"
              ],
              "mod_name": "RegEx"
            }
          }
        }
      },
      "VisFormalLang/RegGrammar": {
        "long_name": "Regular Grammars",
        "sections": {
          "Regular Grammars": {
            "REtoFACON": {
              "long_name": "REtoFACON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/Regular/REtoFACON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/Discretizer.js",
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/Regular/REtoFACON.js"
              ],
              "mod_name": "RegGrammar"
            },
            "RILinearGramNFACON": {
              "type": "dgm",
              "mod_name": "RegGrammar"
            },
            "RlRegGramDFACON": {
              "type": "dgm",
              "mod_name": "RegGrammar"
            },
            "FAtoRegGrammmarCON": {
              "long_name": "FAtoRegGrammmarCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/Regular/FAtoRegGrammmarCON.css"
              ],
              "scripts": [
                "AV/VisFormalLang/Regular/FAtoRegGrammmarCON.js"
              ],
              "mod_name": "RegGrammar"
            }
          }
        }
      },
      "VisFormalLang/RegClosure": {
        "long_name": "Closure Properties of Regular Grammars",
        "sections": {
          "Closure Properties of Regular Grammars": {
            "DFAIntersectionCON": {
              "long_name": "DFAIntersectionCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/Regular/DFAIntersectionCON.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/VisFormalLang/Regular/DFAIntersectionCON.js"
              ],
              "mod_name": "RegClosure"
            }
          }
        }
      }
    },
    "Identifying Non-regular Languages": {
      "VisFormalLang/NonRegular": {
        "long_name": "Identifying Non-regular Languages",
        "sections": {
          "Identifying Non-regular Languages": {
            "Proof1NonRegularCON": {
              "long_name": "Proof 1 Non-Regular Grammar Slideshow",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/NonReg/Proof1NonRegularCON.css"
              ],
              "scripts": [
                "AV/VisFormalLang/NonReg/Proof1NonRegularCON.js"
              ],
              "mod_name": "NonRegular"
            },
            "PumpingLemmaCON": {
              "long_name": "Pumping Lemma Slideshow",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/NonReg/PumpingLemmaCON.css"
              ],
              "scripts": [
                "AV/VisFormalLang/NonReg/PumpingLemmaCON.js"
              ],
              "mod_name": "NonRegular"
            },
            "PLGame": {
              "long_name": "Regular Pumping Lemmma",
              "required": false,
              "points": 0.0,
              "type": "ss",
              "av_address": "AV/VisFormalLang/NonReg/PLGame.html",
              "mod_name": "NonRegular",
              "threshold": 1
            }
          }
        }
      },
      "VisFormalLang/DFAproperties": {
        "long_name": "Properties",
        "sections": {
          "Properties and Proving: Problem 1": {},
          "Properties and Proving - Problem 2": {}
        }
      }
    },
    "Context-Free Grammars and Languages": {
      "VisFormalLang/CFL": {
        "long_name": "Context-Free Languages",
        "sections": {
          "Context-Free Languages": {
            "ParseTree1CON": {
              "long_name": "ParseTree1CON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/CFG/ParseTree1CON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "AV/VisFormalLang/CFG/ParseTree1CON.js"
              ],
              "mod_name": "CFL"
            },
            "NumParseTreeNodes": {
              "long_name": "Determine Number of nodes",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/NumParseTreeNodes.html",
              "mod_name": "CFL",
              "threshold": 5
            },
            "StringGenFromGmr": {
              "long_name": "String Generated By a Grammar",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/StringGenFromGmr.html",
              "mod_name": "CFL",
              "threshold": 5
            }
          },
          "Ambiguity": {
            "NumParseTrees1": {
              "long_name": "Number Of Parse Trees, Problem 1",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/NumParseTrees1.html",
              "mod_name": "CFL",
              "threshold": 5
            },
            "NumParseTrees2": {
              "long_name": "Number Of Parse Trees, Problem 2",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/NumParseTrees2.html",
              "mod_name": "CFL",
              "threshold": 5
            },
            "NumParseTrees3": {
              "long_name": "Number Of Parse Trees, Problem 3",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/NumParseTrees3.html",
              "mod_name": "CFL",
              "threshold": 5
            },
            "DeterminingAmbiguities": {
              "long_name": "Determining Ambiguities",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/DeterminingAmbiguities.html",
              "mod_name": "CFL",
              "threshold": 5
            }
          },
          "Eliminating Grammar Ambiguity": {
            "EvalExp": {
              "long_name": "Evaluating Expression Based on Grammar",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/EvalExp.html",
              "mod_name": "CFL",
              "threshold": 5
            },
            "ParseTreeForExpCON": {
              "long_name": "ParseTreeForExpCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/CFG/ParseTreeForExpCON.css"
              ],
              "scripts": [
                "AV/VisFormalLang/CFG/ParseTreeForExpCON.js"
              ],
              "mod_name": "CFL"
            },
            "Associativity": {
              "long_name": "Associativity",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/Associativity.html",
              "mod_name": "CFL",
              "threshold": 5
            },
            "PrecedenceAndAssociativity": {
              "long_name": "Precedence and associativity",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/PrecedenceAndAssociativity.html",
              "mod_name": "CFL",
              "threshold": 5
            },
            "CharacterizeLang3": {
              "long_name": "Characterizing Language 3",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/CharacterizeLang3.html",
              "mod_name": "CFL",
              "threshold": 5
            }
          },
          "Extended BNF": {
            "ExtendedBNF": {
              "long_name": "Extended BNF",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/ExtendedBNF.html",
              "mod_name": "CFL",
              "threshold": 5
            }
          }
        }
      },
      "VisFormalLang/CFLSimp": {
        "long_name": "Transforming Grammars",
        "sections": {
          "Transforming Grammars": {
            "RemoveUselessCON": {
              "long_name": "RemoveUselessCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/CFG/RemoveUselessCON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "lib/dagre.min.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "AV/VisFormalLang/CFG/RemoveUselessCON.js"
              ],
              "mod_name": "CFLSimp"
            },
            "RemoveLambdaCON": {
              "long_name": "RemoveLambdaCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/CFG/RemoveLambdaCON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/PDA.js",
                "AV/VisFormalLang/CFG/RemoveLambdaCON.js"
              ],
              "mod_name": "CFLSimp"
            },
            "RemoveUnitCON": {
              "long_name": "RemoveUnitCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/CFG/RemoveUnitCON.css"
              ],
              "scripts": [
                "AV/VisFormalLang/CFG/RemoveUnitCON.js"
              ],
              "mod_name": "CFLSimp"
            },
            "ChomskyCON": {
              "long_name": "ChomskyCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/CFG/ChomskyCON.css"
              ],
              "scripts": [
                "AV/VisFormalLang/CFG/ChomskyCON.js"
              ],
              "mod_name": "CFLSimp"
            }
          }
        }
      }
    },
    "Pushdown Automata": {
      "VisFormalLang/PDA": {
        "long_name": "Pushdown Automata",
        "sections": {
          "Pushdown Automata": {
            "PDAAnBnTraceCON": {
              "long_name": "PDAAnBnTraceCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/PDA/PDAAnBnTraceCON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "AV/VisFormalLang/PDA/PDAAnBnTraceCON.js"
              ],
              "mod_name": "PDA"
            },
            "example_7_1_2": {
              "type": "dgm",
              "mod_name": "PDA"
            },
            "PDADeterministic": {
              "type": "dgm",
              "mod_name": "PDA"
            },
            "PDAProbDeterministic": {
              "type": "dgm",
              "mod_name": "PDA"
            },
            "PDANonDeterministic": {
              "type": "dgm",
              "mod_name": "PDA"
            }
          }
        }
      },
      "VisFormalLang/PDACFL": {
        "long_name": "PDAs and Context Free Languages",
        "sections": {
          "PDAs and Context Free Languages": {
            "PDAtoCFLCON": {
              "long_name": "PDAtoCFLCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/PDA/PDAtoCFLCON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "AV/VisFormalLang/PDA/PDAtoCFLCON.js"
              ],
              "mod_name": "PDACFL"
            }
          }
        }
      },
      "VisFormalLang/DPDA": {
        "long_name": "Deterministic Pushdown Automata",
        "sections": {
          "Deterministic Pushdown Automata": {},
          "Grammars for Deterministic Context-free Languages": {}
        }
      }
    },
    "Properties of Context-free Languages": {
      "VisFormalLang/CFLProp": {
        "long_name": "Properties of Context-Free Languages",
        "sections": {
          "Properties of Context-Free Languages": {
            "CFPumpingLemma": {
              "long_name": "Context Free Pumping Lemma",
              "required": false,
              "points": 0.0,
              "type": "ss",
              "av_address": "AV/VisFormalLang/CFG/CFPumpingLemma.html",
              "mod_name": "CFLProp",
              "threshold": 1
            }
          }
        }
      }
    },
    "Models of Computation": {
      "VisFormalLang/TuringIntro": {
        "long_name": "Models of Computation",
        "sections": {
          "Models of Computation": {}
        }
      },
      "VisFormalLang/Turing": {
        "long_name": "Turing Machines",
        "sections": {
          "Turing Machines": {
            "RClearCON": {
              "long_name": "Turing Machine RClear",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/TM/RClearCON.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/Yinwen/TuringMachine.js",
                "AV/VisFormalLang/TM/RClearCON.js"
              ],
              "mod_name": "Turing"
            },
            "addOnea": {
              "long_name": "Sheet 2 Exercise 1 NFAtoDFA exercise",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/addOnea.html",
              "mod_name": "Turing",
              "threshold": 1.0
            },
            "eraseABC": {
              "long_name": "Sheet 2 Exercise 1 NFAtoDFA exercise",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/eraseABC.html",
              "mod_name": "Turing",
              "threshold": 1.0
            },
            "keepABC": {
              "long_name": "Sheet 2 Exercise 1 NFAtoDFA exercise",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/keepABC.html",
              "mod_name": "Turing",
              "threshold": 1.0
            },
            "TMabcCON": {
              "long_name": "TMabcCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/TM/TMabcCON.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "AV/Yinwen/TuringMachine.js",
                "AV/VisFormalLang/TM/TMabcCON.js"
              ],
              "mod_name": "Turing"
            },
            "TMabCON": {
              "type": "dgm",
              "mod_name": "Turing"
            },
            "TMPlusoneCON": {
              "long_name": "Turing Machine Replace",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/TM/TMPlusoneCON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "AV/Development/formal_language/TuringMachine.js",
                "AV/VisFormalLang/TM/TMPlusoneCON.js"
              ],
              "mod_name": "Turing"
            },
            "TManbncnCON": {
              "long_name": "TManbncnCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/TM/TManbncnCON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "AV/Development/formal_language/TuringMachine.js",
                "AV/VisFormalLang/TM/TManbncnCON.js"
              ],
              "mod_name": "Turing"
            },
            "Turing1CON": {
              "type": "dgm",
              "mod_name": "Turing"
            },
            "Turing2CON": {
              "type": "dgm",
              "mod_name": "Turing"
            },
            "Turing3CON": {
              "type": "dgm",
              "mod_name": "Turing"
            },
            "TMcopy": {
              "long_name": "TMcopy",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/TM/TMcopy.css"
              ],
              "scripts": [
                "AV/VisFormalLang/TM/TMcopy.js",
                "AV/Juwon/FAcopy.js"
              ],
              "mod_name": "Turing"
            },
            "TuringShiftCON": {
              "type": "dgm",
              "mod_name": "Turing"
            }
          }
        }
      }
    },
    "Parsing": {
      "VisFormalLang/ParseIntro": {
        "long_name": "Parsing Introduction",
        "sections": {
          "Introduction": {}
        }
      },
      "VisFormalLang/LLParsing": {
        "long_name": "LL Parsing",
        "sections": {
          "LL Parsing": {}
        }
      },
      "VisFormalLang/LRParsing": {
        "long_name": "LR Parsing",
        "sections": {
          "LR Parsing": {
            "LRparseDFA2CON": {
              "type": "dgm",
              "mod_name": "LRParsing"
            }
          }
        }
      },
      "VisFormalLang/CYKParsing": {
        "long_name": "CYK Parsing",
        "sections": {
          "CYK Parsing": {}
        }
      },
      "VisFormalLang/Compiler": {
        "long_name": "Structure of a Compiler",
        "sections": {
          "What is a compiler?": {},
          "Language Processing System": {},
          "Overview of General Compiler": {},
          "Phases of Compilation": {}
        }
      }
    },
    "Limits to Computing": {
      "NP/Reduction": {
        "long_name": "Reductions",
        "sections": {
          "Reductions": {
            "SortingProblemCON": {
              "long_name": "Sorting Problem",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/NP/SortingProblemCON.css"
              ],
              "scripts": [
                "AV/NP/SortingProblemCON.js"
              ],
              "mod_name": "Reduction"
            },
            "pairToSortCON": {
              "long_name": "Pair to Sorting Reduction Slideshow",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/NP/pairToSortCON.css"
              ],
              "scripts": [
                "AV/NP/pairToSortCON.js"
              ],
              "mod_name": "Reduction"
            },
            "sortToPairCON": {
              "long_name": "Sorting to Pairing Reduction Slideshow",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/NP/sortToPairCON.css"
              ],
              "scripts": [
                "AV/NP/sortToPairCON.js"
              ],
              "mod_name": "Reduction"
            },
            "matrixMulCON": {
              "long_name": "Matrix Multiplication",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/NP/matrixMulCON.css"
              ],
              "scripts": [
                "AV/NP/matrixMulCON.js"
              ],
              "mod_name": "Reduction"
            },
            "ReduceSimpPCON": {
              "type": "dgm",
              "mod_name": "Reduction"
            }
          }
        }
      },
      "VisFormalLang/RecEnum": {
        "long_name": "Recursively Enumerable Languages",
        "sections": {
          "Recursively Enumerable Languages": {}
        }
      },
      "SeniorAlgAnal/Impossible": {
        "long_name": "Unsolveable Problems",
        "sections": {
          "Unsolveable Problems": {
            "FuncBinCON": {
              "type": "dgm",
              "mod_name": "Impossible"
            },
            "FuncDiagCON": {
              "type": "dgm",
              "mod_name": "Impossible"
            }
          }
        }
      }
    },
    "Assignments": {
      "VisFormalLang/IntroEx": {
        "long_name": "Intro Exercises",
        "sections": {
          "Exercise 1": {
            "GramIntro3str": {
              "long_name": "Three string grammar",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Grammar/GramIntro3str.html",
              "mod_name": "IntroEx",
              "threshold": 1.0
            }
          },
          "Exercise 2": {
            "GramIntroanbm": {
              "long_name": "anbm grammar",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Grammar/GramIntroanbm.html",
              "mod_name": "IntroEx",
              "threshold": 1.0
            }
          },
          "Exercise 3": {
            "GramIntroanb2n": {
              "long_name": "anb2n grammar",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Grammar/GramIntroanb2n.html",
              "mod_name": "IntroEx",
              "threshold": 1.0
            }
          },
          "Exercise 4": {
            "DFAodda": {
              "long_name": "Odd number of a's",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAodda.html",
              "mod_name": "IntroEx",
              "threshold": 1.0
            }
          },
          "Exercise 5": {
            "DFAoddaevenb": {
              "long_name": "Odd number of a's, even number of b's",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAoddaevenb.html",
              "mod_name": "IntroEx",
              "threshold": 1.0
            }
          },
          "Exercise 6": {
            "DFAodda3b": {
              "long_name": "Odd number of a's, at most 3 b's",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAodda3b.html",
              "mod_name": "IntroEx",
              "threshold": 1.0
            }
          },
          "Exercise 7": {
            "DFAno3a": {
              "long_name": "No string with 3 consecutive a's",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAno3a.html",
              "mod_name": "IntroEx",
              "threshold": 1.0
            }
          }
        }
      },
      "VisFormalLang/FAEx": {
        "long_name": "FA Exercises",
        "sections": {
          "Exercise 1": {
            "NFAtoDFAex1long": {
              "long_name": "NFAtoDFA exercise 1 long version",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/NFAtoDFAex1long.html",
              "mod_name": "FAEx",
              "threshold": 1.0
            }
          },
          "Exercise 2": {
            "DFAMinEx1": {
              "long_name": "Sheet 1 Exercise 2 DFA minimization",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAMinEx1.html",
              "mod_name": "FAEx",
              "threshold": 1.0
            }
          },
          "Exercise 3": {
            "DFANotevena3b": {
              "long_name": "Sheet 2 Exercise 3 Construct DFA that accepts a language",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFANotevena3b.html",
              "mod_name": "FAEx",
              "threshold": 1.0
            }
          },
          "Exercise 4": {
            "NFAex1": {
              "long_name": "Create a NFA 1",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/NFAex1.html",
              "mod_name": "FAEx",
              "threshold": 1.0
            }
          }
        }
      },
      "VisFormalLang/RegLangEx": {
        "long_name": "Regular Language Exercises",
        "sections": {
          "Exercise 1": {
            "RegExbbaeven": {
              "long_name": "Regular Expression construction: bba in even position",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExbbaeven.html",
              "mod_name": "RegLangEx",
              "threshold": 1.0
            }
          },
          "Exercise 2": {
            "RegExnoaa": {
              "long_name": "Regular Expression construction: no aa",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExnoaa.html",
              "mod_name": "RegLangEx",
              "threshold": 1.0
            }
          },
          "Exercise 3": {
            "RegExonebbb": {
              "long_name": "Regular Expression construction: one bbb",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExonebbb.html",
              "mod_name": "RegLangEx",
              "threshold": 1.0
            }
          },
          "Exercise 4": {
            "RegGramNFA1": {
              "long_name": "Regular Grammar: right-linear grammar for NFA",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGramNFA1.html",
              "mod_name": "RegLangEx",
              "threshold": 1.0
            }
          },
          "Exercise 5": {
            "RegGrambbbaaaa": {
              "long_name": "Regular Grammar: left-linear grammar for bbbsaaaas",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGrambbbaaaa.html",
              "mod_name": "RegLangEx",
              "threshold": 1.0
            }
          },
          "Exercise 6": {
            "RegGramaby3": {
              "long_name": "Regular Grammar: regular grammar for a divisible by 3",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGramaby3.html",
              "mod_name": "RegLangEx",
              "threshold": 1.0
            }
          }
        }
      },
      "VisFormalLang/Sheet5": {
        "long_name": "Sheet 5",
        "sections": {
          "Exercise 1": {
            "sheet5exercise1": {
              "long_name": "Sheet 5 Exercise 1 Grammer Exercise 1",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_5/sheet5exercise1.html",
              "mod_name": "Sheet5",
              "threshold": 1.0
            }
          },
          "Exercise 2": {
            "sheet5exercise2": {
              "long_name": "Sheet 5 Exercise 1 Grammer Exercise 2",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_5/sheet5exercise2.html",
              "mod_name": "Sheet5",
              "threshold": 1.0
            }
          }
        }
      },
      "VisFormalLang/Sheet6": {
        "long_name": "Sheet 6",
        "sections": {
          "Exercise 1": {
            "sheet6exercise1": {
              "long_name": "Sheet 6 Exercise 1 Draw a DFA for a language",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_6/sheet6exercise1.html",
              "mod_name": "Sheet6",
              "threshold": 1.0
            }
          },
          "Exercise 2": {
            "sheet6exercise2": {
              "long_name": "Sheet 6 Exercise 1 Grammer Exercise 1",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_6/sheet6exercise2.html",
              "mod_name": "Sheet6",
              "threshold": 1.0
            }
          },
          "Exercise 3": {
            "sheet6exercise3": {
              "long_name": "Sheet 6 Exercise 1 Grammer Exercise 2",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_6/sheet6exercise3.html",
              "mod_name": "Sheet6",
              "threshold": 1.0
            }
          },
          "Exercise 4": {
            "sheet6exercise4": {
              "long_name": "Sheet 6 Exercise 1 Grammer Exercise 2",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_6/sheet6exercise4.html",
              "mod_name": "Sheet6",
              "threshold": 0.9
            }
          }
        }
      },
      "VisFormalLang/Sheet7": {
        "long_name": "Sheet 7",
        "sections": {
          "Exercise 1": {
            "sheet7exercise1": {
              "long_name": "Sheet 7 Exercise 1 Draw a PDA for a language",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_7/sheet7exercise1.html",
              "mod_name": "Sheet7",
              "threshold": 1.0
            }
          },
          "Exercise 2": {
            "sheet7exercise2": {
              "long_name": "Sheet 7 Exercise 1 Draw a PDA for a language",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_7/sheet7exercise2.html",
              "mod_name": "Sheet7",
              "threshold": 1.0
            }
          },
          "Exercise 3": {
            "sheet7exercise3": {
              "long_name": "Sheet 7 Exercise 1 Draw a PDA for a language",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_7/sheet7exercise3.html",
              "mod_name": "Sheet7",
              "threshold": 1.0
            }
          },
          "Exercise 4": {
            "sheet7exercise4": {
              "long_name": "Sheet 7 Exercise 1 Draw a PDA for a language",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_7/sheet7exercise4.html",
              "mod_name": "Sheet7",
              "threshold": 1.0
            }
          }
        }
      }
    },
    "Practice": {
      "VisFormalLang/IntroExMore": {
        "long_name": "Intro Exercise Practice",
        "sections": {
          "Exercise 1": {
            "GramIntro3str": {
              "long_name": "Three string grammar",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Grammar/GramIntro3str.html",
              "mod_name": "IntroExMore",
              "threshold": 1.0
            }
          },
          "Exercise 2": {
            "GramIntroanbm": {
              "long_name": "anbm grammar",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Grammar/GramIntroanbm.html",
              "mod_name": "IntroExMore",
              "threshold": 1.0
            }
          },
          "Exercise 3": {
            "GramIntroanb2n": {
              "long_name": "anb2n grammar",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Grammar/GramIntroanb2n.html",
              "mod_name": "IntroExMore",
              "threshold": 1.0
            }
          },
          "Exercise 4": {
            "DFAodda": {
              "long_name": "Odd number of a's",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAodda.html",
              "mod_name": "IntroExMore",
              "threshold": 1.0
            }
          },
          "Exercise 5": {
            "DFAoddaevenb": {
              "long_name": "Odd number of a's, even number of b's",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAoddaevenb.html",
              "mod_name": "IntroExMore",
              "threshold": 1.0
            }
          },
          "Exercise 6": {
            "DFAodda3b": {
              "long_name": "Odd number of a's, at most 3 b's",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAodda3b.html",
              "mod_name": "IntroExMore",
              "threshold": 1.0
            }
          },
          "Exercise 7": {
            "DFAno3a": {
              "long_name": "No string with 3 consecutive a's",
              "required": true,
              "points": 10.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAno3a.html",
              "mod_name": "IntroExMore",
              "threshold": 1.0
            }
          }
        }
      },
      "VisFormalLang/FAExMore": {
        "long_name": "FA Exercise Practice",
        "sections": {
          "Exercise 1": {
            "DFAevena": {
              "long_name": "DFA exercise even a",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAevena.html",
              "mod_name": "FAExMore",
              "threshold": 1.0
            }
          },
          "Exercise 2": {
            "DFAevenaoddb": {
              "long_name": "DFA exercise even a odd b",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAevenaoddb.html",
              "mod_name": "FAExMore",
              "threshold": 1.0
            }
          },
          "Exercise 3": {
            "DFAevenamin3b": {
              "long_name": "DFA exercise even a min 3 b",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAevenamin3b.html",
              "mod_name": "FAExMore",
              "threshold": 1.0
            }
          },
          "Exercise 4": {
            "DFAbotheo": {
              "long_name": "DFA exercise both even or odd",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAbotheo.html",
              "mod_name": "FAExMore",
              "threshold": 1.0
            }
          },
          "NFA to DFA 1": {
            "NFAtoDFAex1long": {
              "long_name": "NFAtoDFA exercise 1 long version",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/NFAtoDFAex1long.html",
              "mod_name": "FAExMore",
              "threshold": 1.0
            }
          },
          "NFA to DFA 2": {
            "NFAtoDFAex2": {
              "long_name": "NFAtoDFA exercise 2",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/NFAtoDFAex2.html",
              "mod_name": "FAExMore",
              "threshold": 1.0
            }
          },
          "Create NFA": {
            "NFAex2": {
              "long_name": "Create a NFA 2",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/NFAex2.html",
              "mod_name": "FAExMore",
              "threshold": 1.0
            }
          }
        }
      },
      "VisFormalLang/RegLangExMore": {
        "long_name": "Regular Language Exercise Practice",
        "sections": {
          "Exercise 1": {
            "RegExaby3": {
              "long_name": "Regular Expression construction: a divisible by 3",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExaby3.html",
              "mod_name": "RegLangExMore",
              "threshold": 1.0
            }
          },
          "Exercise 2": {
            "RegGramNFA2": {
              "long_name": "Regular Grammar: left-linear grammar for NFA",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGramNFA2.html",
              "mod_name": "RegLangExMore",
              "threshold": 1.0
            }
          },
          "Exercise 3": {
            "RegGramaaabba": {
              "long_name": "Regular Grammar: left-linear grammar for aaabsbas",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGramaaabba.html",
              "mod_name": "RegLangExMore",
              "threshold": 1.0
            }
          },
          "Exercise 4": {
            "RegGramanbmodd": {
              "long_name": "Regular Grammar: regular grammar for anbm odd length",
              "required": true,
              "points": 5.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGramanbmodd.html",
              "mod_name": "RegLangExMore",
              "threshold": 1.0
            }
          }
        }
      },
      "VisFormalLang/Sheet5Practice": {
        "long_name": "Sheet 5 Practice",
        "sections": {
          "Exercise 1": {
            "sheet5Practice1": {
              "long_name": "Sheet 5 Grammer Practice 1",
              "required": true,
              "points": 0.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_5/Spring19/sheet5Practice1.html",
              "mod_name": "Sheet5Practice",
              "threshold": 1.0
            }
          },
          "Exercise 2": {
            "sheet5Practice2": {
              "long_name": "Sheet 5 Grammer Practice 2",
              "required": true,
              "points": 0.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Sheet_5/Spring19/sheet5Practice2.html",
              "mod_name": "Sheet5Practice",
              "threshold": 1.0
            }
          }
        }
      }
    },
    "Appendix": {
      "Glossary": {
        "long_name": "Glossary",
        "sections": {}
      }
    }
  }
}