{
  "title": "CS4114 Formal Languages and Automata",
  "desc": "CS4114 Formal Languages and Automata",
  "build_dir": "Books",
  "code_dir": "SourceCode/",
  "code_lang": {
    "Java": {
      "ext": [
        "java"
      ],
      "label": "Java",
      "lang": "java"
    },
    "Java_Generic": {
      "ext": [
        "java"
      ],
      "label": "Java (Generic)",
      "lang": "java"
    }
  },
  "lang": "en",
  "build_JSAV": false,
  "build_cmap": 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": {
      "PIFLA/FLIntro": {
        "long_name": "About this Course and this Book",
        "sections": {
          "Introduction": {},
          "Prerequisites": {},
          "How this Book Works": {},
          "What We Will Do": {}
        }
      },
      "PIFLA/FLOverview": {
        "long_name": "Overview",
        "sections": {
          "Languages, Grammars, and Machines": {},
          "Language Hierarchy": {
            "HierarchyCON": {
              "type": "dgm",
              "mod_name": "FLOverview"
            }
          },
          "The Power of Machines": {},
          "Application: Compilers": {
            "CompileCON": {
              "type": "dgm",
              "mod_name": "FLOverview"
            },
            "CompileStagesCON": {
              "type": "dgm",
              "mod_name": "FLOverview"
            }
          },
          "Some Mindbending Ideas": {}
        }
      },
      "PIFLA/MajorConcepts": {
        "long_name": "Introduction to Formal Languages",
        "sections": {
          "Introduction": {},
          "Languages": {
            "LanguagesFS": {
              "long_name": "LanguagesFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Intro/LanguagesFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Intro/LanguagesFS.js"
              ],
              "mod_name": "MajorConcepts"
            }
          },
          "Grammars": {
            "GrammarIntroFS": {
              "long_name": "GrammarIntroFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Intro/GrammarIntroFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Intro/GrammarIntroFS.js"
              ],
              "mod_name": "MajorConcepts"
            }
          },
          "Practicing Grammars": {
            "CharacterizeLang1": {
              "long_name": "Characterizing a Language, Problem 1",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/CharacterizeLang1.html",
              "mod_name": "MajorConcepts",
              "threshold": 1
            },
            "CharacterizeLang2": {
              "long_name": "Characterizing a Language, Problem 2",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/CharacterizeLang2.html",
              "mod_name": "MajorConcepts",
              "threshold": 1
            }
          },
          "Automata": {
            "AutomataCON": {
              "type": "dgm",
              "mod_name": "MajorConcepts"
            },
            "AutomataExCON": {
              "type": "dgm",
              "mod_name": "MajorConcepts"
            }
          }
        }
      },
      "PIFLA/IntroGrammarEx": {
        "long_name": "Grammar Exercises",
        "sections": {
          "Grammar Exercises": {
            "GramIntro3str": {
              "long_name": "Three string grammar",
              "required": true,
              "points": 1.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Grammar/GramIntro3str.html",
              "mod_name": "IntroGrammarEx",
              "threshold": 0.9
            },
            "GramIntroanb2n": {
              "long_name": "anb2n grammar",
              "required": true,
              "points": 1.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Grammar/GramIntroanb2n.html",
              "mod_name": "IntroGrammarEx",
              "threshold": 0.9
            },
            "GramIntroanbm": {
              "long_name": "anbm grammar",
              "required": true,
              "points": 1.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Grammar/GramIntroanbm.html",
              "mod_name": "IntroGrammarEx",
              "threshold": 0.9
            },
            "Parens": {
              "long_name": "Balanced Parentheses grammar",
              "required": true,
              "points": 1.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Grammar/Parens.html",
              "mod_name": "IntroGrammarEx",
              "threshold": 0.9
            },
            "Palendrome": {
              "long_name": "Palendrome grammar",
              "required": true,
              "points": 1.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Grammar/Palendrome.html",
              "mod_name": "IntroGrammarEx",
              "threshold": 0.9
            }
          }
        }
      }
    },
    "Mathematical Background": {
      "PIFLA/SetNotationFLAFS": {
        "long_name": "Set Notation",
        "sections": {
          "Introduction to Sets": {
            "SetDefFS": {
              "long_name": "SetDefFS",
              "required": true,
              "points": 1.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Background/SetDefFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Background/SetDefFS.js"
              ],
              "mod_name": "SetNotationFLAFS"
            }
          },
          "Set Common Notation": {
            "SetNotationFS": {
              "long_name": "SetNotationFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Background/SetNotationFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Background/SetNotationFS.js"
              ],
              "mod_name": "SetNotationFLAFS"
            }
          }
        }
      },
      "PIFLA/SetNotation": {
        "long_name": "Set Notation",
        "sections": {
          "Introduction to Sets": {}
        }
      },
      "PIFLA/Relations": {
        "long_name": "Relations",
        "sections": {
          "Relations": {
            "RelationsFS": {
              "long_name": "RelationsFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Background/RelationsFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Background/RelationsFS.js"
              ],
              "mod_name": "Relations"
            },
            "SetTFrelation": {
              "long_name": "Relations Exercise",
              "required": true,
              "points": 2.0,
              "type": "ka",
              "av_address": "Exercises/Background/SetTFrelation.html",
              "mod_name": "Relations",
              "threshold": 5
            }
          },
          "Equivalence Classes and Partial Orders": {
            "EquivFS": {
              "long_name": "EquivFS",
              "required": true,
              "points": 1.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Background/EquivFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Background/EquivFS.js"
              ],
              "mod_name": "Relations"
            },
            "SetTFequivrel": {
              "long_name": "Equivalence Exercise",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/Background/SetTFequivrel.html",
              "mod_name": "Relations",
              "threshold": 3
            },
            "SetTFpartialorder": {
              "long_name": "PartialOrder Exercise",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/Background/SetTFpartialorder.html",
              "mod_name": "Relations",
              "threshold": 3
            }
          }
        }
      },
      "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"
            }
          }
        }
      },
      "PIFLA/MathProof": {
        "long_name": "Mathematical Proof Techniques",
        "sections": {
          "Mathematical Proof Types": {
            "MathProofFS": {
              "long_name": "MathProofFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Background/MathProofFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Background/MathProofFS.js"
              ],
              "mod_name": "MathProof"
            }
          },
          "Mathematical Induction": {
            "InductionIntroFS": {
              "long_name": "InductionIntroFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Background/InductionIntroFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Background/InductionIntroFS.js"
              ],
              "mod_name": "MathProof"
            }
          },
          "Induction Proof Examples": {
            "InductionExamp1FS": {
              "long_name": "InductionExamp1FS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Background/InductionExamp1FS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Background/InductionExamp1FS.js"
              ],
              "mod_name": "MathProof"
            },
            "InductRegionsFS": {
              "long_name": "InductRegionsFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Background/InductRegionsFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Background/InductRegionsFS.js"
              ],
              "mod_name": "MathProof"
            },
            "InductFactFS": {
              "long_name": "InductFactFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Background/InductFactFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Background/InductFactFS.js"
              ],
              "mod_name": "MathProof"
            }
          }
        }
      }
    },
    "Finite Acceptors": {
      "PIFLA/DFA": {
        "long_name": "DFA: Deterministic Finite Acceptors",
        "sections": {
          "Introduction to the DFA": {
            "DFAExampleCON": {
              "type": "dgm",
              "mod_name": "DFA"
            },
            "DFAintroFS": {
              "long_name": "DFAintroFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/FA/DFAintroFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "DataStructures/FLA/FA.js",
                "AV/PIFLA/FA/DFAintroFS.js"
              ],
              "mod_name": "DFA"
            }
          },
          "Some Examples": {
            "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"
            },
            "DFAEvenBinary": {
              "long_name": "Accept even binary numbers",
              "required": true,
              "points": 1.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAEvenBinary.html",
              "mod_name": "DFA",
              "threshold": 0.9
            }
          },
          "Advanced Concepts": {
            "DFAadvancedFS": {
              "long_name": "DFAadvancedFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/FA/DFAadvancedFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "DataStructures/FLA/FA.js",
                "AV/PIFLA/FA/DFAadvancedFS.js"
              ],
              "mod_name": "DFA"
            }
          },
          "Limits to DFAs": {}
        }
      },
      "PIFLA/DFAExercises1": {
        "long_name": "DFA exercises",
        "sections": {
          "DFA exercises": {
            "DFAodda": {
              "long_name": "Odd number of a's",
              "required": true,
              "points": 1.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAodda.html",
              "mod_name": "DFAExercises1",
              "threshold": 0.9
            },
            "DFAoddaevenb": {
              "long_name": "Odd number of a's, even number of b's",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAoddaevenb.html",
              "mod_name": "DFAExercises1",
              "threshold": 0.9
            },
            "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": "DFAExercises1",
              "threshold": 0.9
            },
            "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": "DFAExercises1",
              "threshold": 0.9
            },
            "DFACOMPno3a": {
              "long_name": "Complement no string with 3 consecutive a's",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFACOMPno3a.html",
              "mod_name": "DFAExercises1",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/DFAExercises2": {
        "long_name": "DFA exercises",
        "sections": {
          "DFA exercises": {
            "DFAevena": {
              "long_name": "DFA exercise even a",
              "required": true,
              "points": 1.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAevena.html",
              "mod_name": "DFAExercises2",
              "threshold": 0.9
            },
            "DFAbsurrounda": {
              "long_name": "DFA exercise b surrounds a",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAbsurrounda.html",
              "mod_name": "DFAExercises2",
              "threshold": 0.9
            },
            "DFAdiv4": {
              "long_name": "DFA exercise divisible by 4",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAdiv4.html",
              "mod_name": "DFAExercises2",
              "threshold": 0.9
            },
            "DFAevenamin3b": {
              "long_name": "DFA exercise even a min 3 b",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAevenamin3b.html",
              "mod_name": "DFAExercises2",
              "threshold": 0.9
            },
            "DFACOMPevenamin3b": {
              "long_name": "Complement even a min 3 b",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFACOMPevenamin3b.html",
              "mod_name": "DFAExercises2",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/DFAExercises3": {
        "long_name": "DFA exercises",
        "sections": {
          "DFA exercises": {
            "DFAevenaoddb": {
              "long_name": "Even number of a's, odd number of b's",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAevenaoddb.html",
              "mod_name": "DFAExercises3",
              "threshold": 0.9
            },
            "DFAevenabsoddas": {
              "long_name": "Even number of a's, b's, odd number of a's",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAevenabsoddas.html",
              "mod_name": "DFAExercises3",
              "threshold": 0.9
            },
            "DFAbotheo": {
              "long_name": "DFA exercise both even or both odd",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAbotheo.html",
              "mod_name": "DFAExercises3",
              "threshold": 0.9
            },
            "DFAnoba": {
              "long_name": "DFA exercise does not end in ba",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAnoba.html",
              "mod_name": "DFAExercises3",
              "threshold": 0.9
            },
            "DFACOMPnoba": {
              "long_name": "DFA exercise does not end in ba",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFACOMPnoba.html",
              "mod_name": "DFAExercises3",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/NFA": {
        "long_name": "NFA: Non-Deterministic Finite Automata",
        "sections": {
          "Non-Deterministic Finite Automata": {
            "NFAFS": {
              "long_name": "NFAFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/FA/NFAFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/FA/NFAFS.js"
              ],
              "mod_name": "NFA"
            }
          },
          "NFA vs. DFA: Which is more powerful?": {},
          "NFA to DFA Conversion Example": {
            "NFA2DFAlargeExFS": {
              "long_name": "NFA2DFAlargeExFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/FA/NFA2DFAlargeExFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/FA/NFA2DFAlargeExFS.js"
              ],
              "mod_name": "NFA"
            }
          },
          "Conclusions": {}
        }
      },
      "PIFLA/NFAExercises": {
        "long_name": "NFA exercises",
        "sections": {
          "NFA to DFA": {
            "NFAtoDFAex1": {
              "long_name": "NFAtoDFA exercise 1",
              "required": true,
              "points": 3.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/NFAtoDFAex1.html",
              "mod_name": "NFAExercises",
              "threshold": 0.85
            }
          },
          "Create NFA": {
            "NFAex1": {
              "long_name": "Create a NFA 1",
              "required": true,
              "points": 3.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/NFAex1.html",
              "mod_name": "NFAExercises",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/NFAExercises2": {
        "long_name": "More NFA exercises",
        "sections": {
          "NFA to DFA": {
            "NFAtoDFAex1long": {
              "long_name": "NFAtoDFA exercise 1 long version",
              "required": true,
              "points": 3.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/NFAtoDFAex1long.html",
              "mod_name": "NFAExercises2",
              "threshold": 0.85
            },
            "NFAtoDFAex2": {
              "long_name": "NFAtoDFA exercise 2",
              "required": true,
              "points": 3.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/NFAtoDFAex2.html",
              "mod_name": "NFAExercises2",
              "threshold": 0.85
            }
          },
          "Create NFA": {
            "NFAex2": {
              "long_name": "Create a NFA 2",
              "required": true,
              "points": 3.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/NFAex2.html",
              "mod_name": "NFAExercises2",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/DFAMinimization": {
        "long_name": "Minimizing the Number of States in a DFA",
        "sections": {
          "Minimizing the Number of States in a DFA": {
            "DFAMinFS": {
              "long_name": "DFAMinFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/FA/DFAMinFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/FA/DFAMinFS.js"
              ],
              "mod_name": "DFAMinimization"
            }
          },
          "Minimization Example 1": {
            "DFAMinEx1FS": {
              "long_name": "DFAMinEx1FS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/FA/DFAMinEx1FS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "DataStructures/FLA/AddQuestions.js",
                "AV/PIFLA/FA/DFAMinEx1FS.js"
              ],
              "mod_name": "DFAMinimization"
            }
          },
          "Minimization Example 2": {
            "DFAMinEx2FS": {
              "long_name": "DFAMinEx2FS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/FA/DFAMinEx2FS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "DataStructures/FLA/AddQuestions.js",
                "AV/PIFLA/FA/DFAMinEx2FS.js"
              ],
              "mod_name": "DFAMinimization"
            }
          },
          "Decideability": {}
        }
      },
      "PIFLA/MinimizationEx": {
        "long_name": "DFA Minimization Exercises",
        "sections": {
          "DFA Minimization Exercises": {
            "DFAMinEx3": {
              "long_name": "DFA minimization exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAMinEx3.html",
              "mod_name": "MinimizationEx",
              "threshold": 0.9
            },
            "DFAMinEx4": {
              "long_name": "DFA minimization exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/FA/DFAMinEx4.html",
              "mod_name": "MinimizationEx",
              "threshold": 0.9
            }
          }
        }
      }
    },
    "Regular Languages": {
      "PIFLA/RegEx": {
        "long_name": "Regular Expressions",
        "sections": {}
      },
      "PIFLA/RegExExercises": {
        "long_name": "Regular Expressions Exercises",
        "sections": {
          "Exercise 1": {
            "RegExaba": {
              "long_name": "Regular Expression construction: aba",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExaba.html",
              "mod_name": "RegExExercises",
              "threshold": 0.9
            }
          },
          "Exercise 2": {
            "RegExbbaeven": {
              "long_name": "Regular Expression construction: bba in even position",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExbbaeven.html",
              "mod_name": "RegExExercises",
              "threshold": 0.9
            }
          },
          "Exercise 3": {
            "RegExnoaa": {
              "long_name": "Regular Expression construction: no aa",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExnoaa.html",
              "mod_name": "RegExExercises",
              "threshold": 0.9
            }
          },
          "Exercise 4": {
            "RegExonebbb": {
              "long_name": "Regular Expression construction: one bbb",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExonebbb.html",
              "mod_name": "RegExExercises",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/RegExExercises2": {
        "long_name": "More Regular Expressions Exercises",
        "sections": {
          "Exercise 1": {
            "RegExevenbinary": {
              "long_name": "Regular Expression construction: even binary numbers",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExevenbinary.html",
              "mod_name": "RegExExercises2",
              "threshold": 0.9
            }
          },
          "Exercise 2": {
            "RegExaby3": {
              "long_name": "Regular Expression construction: a divisible by 3",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExaby3.html",
              "mod_name": "RegExExercises2",
              "threshold": 0.9
            }
          },
          "Exercise 3": {
            "RegExcb2": {
              "long_name": "Regular Expression construction: c and b total 2",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExcb2.html",
              "mod_name": "RegExExercises2",
              "threshold": 0.9
            }
          },
          "Exercise 4": {
            "RegExabyb": {
              "long_name": "Regular Expression construction: mixed a and b",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegExabyb.html",
              "mod_name": "RegExExercises2",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/RegExPower": {
        "long_name": "The Power of Regular Expressions",
        "sections": {
          "Every Regular Expression has an Equivalent NFA": {
            "RegEx2NFA1FS": {
              "long_name": "RegEx2NFA1FS",
              "required": true,
              "points": 1.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/RegEx2NFA1FS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RegEx2NFA1FS.js"
              ],
              "mod_name": "RegExPower"
            },
            "RegEx2NFAorFS": {
              "long_name": "RegEx2NFAorFS",
              "required": true,
              "points": 1.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/RegEx2NFAorFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RegEx2NFAorFS.js"
              ],
              "mod_name": "RegExPower"
            },
            "RegEx2NFAcatFS": {
              "long_name": "RegEx2NFAcatFS",
              "required": true,
              "points": 1.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/RegEx2NFAcatFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RegEx2NFAcatFS.js"
              ],
              "mod_name": "RegExPower"
            },
            "RegEx2NFAstarFS": {
              "long_name": "RegEx2NFAstarFS",
              "required": true,
              "points": 1.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/RegEx2NFAstarFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RegEx2NFAstarFS.js"
              ],
              "mod_name": "RegExPower"
            }
          },
          "Converting a Regular Expression to a NFA": {
            "RegEx2NFAExampleFS": {
              "long_name": "RegEx2NFAExampleFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/RegEx2NFAExampleFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RegEx2NFAExampleFS.js"
              ],
              "mod_name": "RegExPower"
            }
          },
          "Regular Expression to Minimized DFA Example": {
            "REtoMinimizedDFACON": {
              "long_name": "REtoMinimizedDFACON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/VisFormalLang/Regular/REtoMinimizedDFACON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "lib/paper-core.min.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/Discretizer.js",
                "DataStructures/FLA/REtoFAController.js",
                "AV/VisFormalLang/Regular/REtoMinimizedDFACON.js"
              ],
              "mod_name": "RegExPower"
            }
          },
          "Converting NFAs to Regular Expressions": {
            "ConvertRLREFS": {
              "long_name": "ConvertRLREFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/ConvertRLREFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "DataStructures/FLA/PDA.js",
                "AV/Obsolete/FL_resources/ParseTree.js",
                "AV/PIFLA/Regular/ConvertRLREFS.js"
              ],
              "mod_name": "RegExPower"
            }
          },
          "Summary": {}
        }
      },
      "PIFLA/RegularGrammars": {
        "long_name": "Regular Grammars",
        "sections": {
          "Introduction to Regular Grammars": {
            "RegularGrammarFS": {
              "long_name": "RegularGrammarFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Regular/RegularGrammarFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RegularGrammarFS.js"
              ],
              "mod_name": "RegularGrammars"
            }
          },
          "Converting Regular Grammars to NFAs": {
            "RGtoNFAFS": {
              "long_name": "RGtoNFAFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/RGtoNFAFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "DataStructures/FLA/GrammarMatrix.js",
                "AV/PIFLA/Regular/RGtoNFAFS.js"
              ],
              "mod_name": "RegularGrammars"
            }
          },
          "Converting NFAs to Regular Grammars": {
            "NFAtoRGFS": {
              "long_name": "NFAtoRGFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/NFAtoRGFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/NFAtoRGFS.js"
              ],
              "mod_name": "RegularGrammars"
            }
          },
          "Converting between Left-linear and Right-linear Grammars": {
            "LLGrammarFS": {
              "long_name": "LLGrammarFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/LLGrammarFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "DataStructures/FLA/AddQuestions.js",
                "AV/PIFLA/Regular/LLGrammarFS.js"
              ],
              "mod_name": "RegularGrammars"
            }
          },
          "RegEx and Regular Grammars": {
            "RegEXtoRegGrammarFS": {
              "long_name": "RegEXtoRegGrammarFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Regular/RegEXtoRegGrammarFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RegEXtoRegGrammarFS.js"
              ],
              "mod_name": "RegularGrammars"
            },
            "RegEXtoLeftRegGrammarFS": {
              "long_name": "RegEXtoLeftRegGrammarFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Regular/RegEXtoLeftRegGrammarFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RegEXtoLeftRegGrammarFS.js"
              ],
              "mod_name": "RegularGrammars"
            }
          },
          "Summary": {}
        }
      },
      "PIFLA/RegGrammarShort": {
        "long_name": "Regular Grammars",
        "sections": {
          "Introduction to Regular Grammars": {
            "RegularGrammarFS": {
              "long_name": "RegularGrammarFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Regular/RegularGrammarFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RegularGrammarFS.js"
              ],
              "mod_name": "RegGrammarShort"
            }
          },
          "Converting Regular Grammars to NFAs": {
            "RGtoNFAFS": {
              "long_name": "RGtoNFAFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/RGtoNFAFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "DataStructures/FLA/GrammarMatrix.js",
                "AV/PIFLA/Regular/RGtoNFAFS.js"
              ],
              "mod_name": "RegGrammarShort"
            }
          },
          "Converting NFAs to Regular Grammars": {
            "NFAtoRGFS": {
              "long_name": "NFAtoRGFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/NFAtoRGFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/NFAtoRGFS.js"
              ],
              "mod_name": "RegGrammarShort"
            }
          },
          "Converting between Left-linear and Right-linear Grammars": {
            "LLGrammarFS": {
              "long_name": "LLGrammarFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/LLGrammarFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "DataStructures/FLA/AddQuestions.js",
                "AV/PIFLA/Regular/LLGrammarFS.js"
              ],
              "mod_name": "RegGrammarShort"
            }
          },
          "Summary": {}
        }
      },
      "PIFLA/RegGramEx1": {
        "long_name": "Regular Grammars Exercises",
        "sections": {
          "Regular Grammars Exercises": {
            "RegGramNFA1": {
              "long_name": "Regular Grammar: right-linear grammar for NFA",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGramNFA1.html",
              "mod_name": "RegGramEx1",
              "threshold": 0.9
            },
            "RegGrambbbaaaa": {
              "long_name": "Regular Grammar: left-linear grammar for bbbsaaaas",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGrambbbaaaa.html",
              "mod_name": "RegGramEx1",
              "threshold": 0.9
            },
            "RegGramaby3": {
              "long_name": "Regular Grammar: regular grammar for a divisible by 3",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGramaby3.html",
              "mod_name": "RegGramEx1",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/RegGramEx2": {
        "long_name": "More Regular Grammar Exercises",
        "sections": {
          "More Regular Grammar Exercises": {
            "RegGramNFA2": {
              "long_name": "Regular Grammar: left-linear grammar for NFA",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGramNFA2.html",
              "mod_name": "RegGramEx2",
              "threshold": 0.9
            },
            "RegGramNFA2r": {
              "long_name": "Regular Grammar: right-linear grammar for NFA",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGramNFA2r.html",
              "mod_name": "RegGramEx2",
              "threshold": 0.9
            },
            "RegGramaaabba": {
              "long_name": "Regular Grammar: left-linear grammar for aaabsbas",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGramaaabba.html",
              "mod_name": "RegGramEx2",
              "threshold": 0.9
            },
            "RegGramanbmodd": {
              "long_name": "Regular Grammar: regular grammar for anbm odd length",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/Regular/RegGramanbmodd.html",
              "mod_name": "RegGramEx2",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/RegClosure": {
        "long_name": "Closure Properties of Regular Languages",
        "sections": {
          "Closure Concept": {
            "ClosureConceptFS": {
              "long_name": "ClosureConceptFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Regular/ClosureConceptFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/ClosureConceptFS.js"
              ],
              "mod_name": "RegClosure"
            }
          },
          "Closure Properties of Regular Languages - Basic Operations": {
            "RLClosPropFS": {
              "long_name": "RLClosPropFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Regular/RLClosPropFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RLClosPropFS.js"
              ],
              "mod_name": "RegClosure"
            }
          },
          "Right quotient": {
            "RLClosQuotientFS": {
              "long_name": "RLClosQuotientFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/Regular/RLClosQuotientFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RLClosQuotientFS.js"
              ],
              "mod_name": "RegClosure"
            }
          },
          "Homomorphism": {
            "RLHomomorphFS": {
              "long_name": "RLHomomorphFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/Regular/RLHomomorphFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/Regular/RLHomomorphFS.js"
              ],
              "mod_name": "RegClosure"
            }
          },
          "Some Decideable Questions about Regular Languages": {
            "RLQuestionsCON": {
              "long_name": "RLQuestionsCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/PIFLA/Regular/RLQuestionsCON.css"
              ],
              "scripts": [
                "AV/PIFLA/Regular/RLQuestionsCON.js"
              ],
              "mod_name": "RegClosure"
            }
          },
          "Summary: How do we prove that a language is regular?": {}
        }
      },
      "VisFormalLang/DFAproperties": {
        "long_name": "Properties",
        "sections": {
          "Introduction": {},
          "Properties and Proving: Problem 1": {},
          "Properties and Proving - Problem 2": {}
        }
      }
    },
    "Identifying Non-regular Languages": {
      "PIFLA/NonRegular": {
        "long_name": "Identifying Non-regular Languages",
        "sections": {
          "Identifying Non-regular Languages": {
            "introNonRegularFS": {
              "long_name": "introNonRegularFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/NonRegular/introNonRegularFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/NonRegular/introNonRegularFS.js"
              ],
              "mod_name": "NonRegular"
            },
            "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"
            }
          },
          "The Concept of Pumping": {
            "introPumpingFS": {
              "long_name": "introPumpingFS",
              "required": true,
              "points": 1.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/NonRegular/introPumpingFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/NonRegular/introPumpingFS.js"
              ],
              "mod_name": "NonRegular"
            }
          },
          "The Pumping Lemma": {
            "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"
            }
          },
          "Some Pumping Lemma Examples": {
            "PLExampanbnFS": {
              "long_name": "PLExampanbnFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/NonRegular/PLExampanbnFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/NonRegular/PLExampanbnFS.js"
              ],
              "mod_name": "NonRegular"
            },
            "PLExampwwRFS": {
              "long_name": "PLExampwwRFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/NonRegular/PLExampwwRFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/NonRegular/PLExampwwRFS.js"
              ],
              "mod_name": "NonRegular"
            },
            "PLExampa3bncn3FS": {
              "long_name": "PLExampa3bncn3FS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/NonRegular/PLExampa3bncn3FS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/NonRegular/PLExampa3bncn3FS.js"
              ],
              "mod_name": "NonRegular"
            }
          },
          "The Pumping Lemma Adversary Game": {
            "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
            }
          },
          "Using Closure Properties to Prove L is Not Regular": {
            "ClosPropFS": {
              "long_name": "ClosPropFS",
              "required": true,
              "points": 1.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/NonRegular/ClosPropFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/NonRegular/ClosPropFS.js"
              ],
              "mod_name": "NonRegular"
            },
            "ClosPropEx1FS": {
              "long_name": "ClosPropEx1FS",
              "required": true,
              "points": 1.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/NonRegular/ClosPropEx1FS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/NonRegular/ClosPropEx1FS.js"
              ],
              "mod_name": "NonRegular"
            },
            "ClosPropEx2FS": {
              "long_name": "ClosPropEx2FS",
              "required": true,
              "points": 1.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/NonRegular/ClosPropEx2FS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/NonRegular/ClosPropEx2FS.js"
              ],
              "mod_name": "NonRegular"
            }
          },
          "Questions to Think About": {}
        }
      }
    },
    "Context-Free Grammars and Languages": {
      "PIFLA/CFG1": {
        "long_name": "Context-Free Grammars Part 1",
        "sections": {
          "Context-Free Languages": {
            "CFLFS": {
              "long_name": "CFLFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/CFL/CFLFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/CFL/CFLFS.js"
              ],
              "mod_name": "CFG1"
            }
          },
          "String Derivation": {
            "CFGDerivationsFS": {
              "long_name": "CFGDerivationsFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/CFL/CFGDerivationsFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/CFL/CFGDerivationsFS.js"
              ],
              "mod_name": "CFG1"
            }
          },
          "Derivation Trees": {
            "DerivationTreesFS": {
              "long_name": "DerivationTreesFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/CFL/DerivationTreesFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/CFL/DerivationTreesFS.js"
              ],
              "mod_name": "CFG1"
            }
          },
          "Derivation Trees Example": {
            "TreeExampleCON": {
              "long_name": "TreeExampleCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/PIFLA/CFL/TreeExampleCON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "AV/PIFLA/CFL/TreeExampleCON.js"
              ],
              "mod_name": "CFG1"
            }
          },
          "Practice question 1": {
            "NumParseTreeNodes": {
              "long_name": "Determine Number of nodes",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/NumParseTreeNodes.html",
              "mod_name": "CFG1",
              "threshold": 1
            }
          },
          "Membership Problem": {
            "MembershipFS": {
              "long_name": "MembershipFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/CFL/MembershipFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/CFL/MembershipFS.js"
              ],
              "mod_name": "CFG1"
            }
          },
          "Practice question 2": {
            "StringGenFromGmr": {
              "long_name": "String Generated By a Grammar",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/StringGenFromGmr.html",
              "mod_name": "CFG1",
              "threshold": 1
            }
          }
        }
      },
      "PIFLA/CFG2": {
        "long_name": "Context-Free Grammars Part 2",
        "sections": {
          "Ambiguity": {
            "AmbiguityFS": {
              "long_name": "AmbiguityFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/CFL/AmbiguityFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/CFL/AmbiguityFS.js"
              ],
              "mod_name": "CFG2"
            },
            "NumParseTrees1": {
              "long_name": "Ambiguous CFGs, Problem 1",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/NumParseTrees1.html",
              "mod_name": "CFG2",
              "threshold": 1
            },
            "NumParseTrees2": {
              "long_name": "Ambiguous CFGs, Problem 2",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/NumParseTrees2.html",
              "mod_name": "CFG2",
              "threshold": 1
            },
            "NumParseTrees3": {
              "long_name": "Number Of Parse Trees, Problem 3",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/NumParseTrees3.html",
              "mod_name": "CFG2",
              "threshold": 1
            },
            "DeterminingAmbiguities": {
              "long_name": "Determining Ambiguities",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/DeterminingAmbiguities.html",
              "mod_name": "CFG2",
              "threshold": 1
            }
          },
          "Precedence Practice": {
            "EvalExp": {
              "long_name": "Evaluating Expression Based on Grammar",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/EvalExp.html",
              "mod_name": "CFG2",
              "threshold": 1
            }
          },
          "Unambiguous grammar parse tree Example": {
            "ParseTreeForExpCON": {
              "long_name": "ParseTreeForExpCON",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "AV/VisFormalLang/CFG/ParseTreeForExpCON.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/PDA.js",
                "AV/VisFormalLang/CFG/ParseTreeForExpCON.js"
              ],
              "mod_name": "CFG2"
            },
            "Associativity": {
              "long_name": "Associativity",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/Associativity.html",
              "mod_name": "CFG2",
              "threshold": 1
            },
            "PrecedenceAndAssociativity": {
              "long_name": "Precedence and associativity",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/PrecedenceAndAssociativity.html",
              "mod_name": "CFG2",
              "threshold": 1
            }
          },
          "Why Context Free?": {}
        }
      },
      "PIFLA/BNF": {
        "long_name": "Writing Compilers",
        "sections": {
          "Backus-Naur Form": {
            "CharacterizeLang3": {
              "long_name": "Characterizing Language 3",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/CharacterizeLang3.html",
              "mod_name": "BNF",
              "threshold": 1
            }
          },
          "Extended BNF": {
            "ExtendedBNF": {
              "long_name": "Extended BNF",
              "required": true,
              "points": 1.0,
              "type": "ka",
              "av_address": "Exercises/FLA/ExtendedBNF.html",
              "mod_name": "BNF",
              "threshold": 1
            }
          }
        }
      },
      "PIFLA/CFGExercises": {
        "long_name": "CFG exercises",
        "sections": {
          "CFG exercises": {
            "anbmodd": {
              "long_name": "CFG ambn, m-n odd",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/CFL/anbmodd.html",
              "mod_name": "CFGExercises",
              "threshold": 0.9
            },
            "ambicn": {
              "long_name": "ambicn i less than 3",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/CFL/ambicn.html",
              "mod_name": "CFGExercises",
              "threshold": 0.9
            },
            "ambian": {
              "long_name": "ambian, i is m plus n",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/CFL/ambian.html",
              "mod_name": "CFGExercises",
              "threshold": 0.9
            },
            "asbsequal": {
              "long_name": "a and b equal",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/CFL/asbsequal.html",
              "mod_name": "CFGExercises",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/CFGTransformations": {
        "long_name": "Transforming Grammars",
        "sections": {
          "Transforming Grammars": {
            "TransformGrammarsFS": {
              "long_name": "TransformGrammarsFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/CFL/TransformGrammarsFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/CFL/TransformGrammarsFS.js"
              ],
              "mod_name": "CFGTransformations"
            }
          },
          "Remove Useless Productions": {
            "RemoveUselessFS": {
              "long_name": "RemoveUselessFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/CFL/RemoveUselessFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/GrammarMatrix.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/CFL/RemoveUselessFS.js"
              ],
              "mod_name": "CFGTransformations"
            }
          },
          "Remove Lambda Productions": {
            "RemoveLambdaFS": {
              "long_name": "RemoveLambdaFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/CFL/RemoveLambdaFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/GrammarMatrix.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/CFL/RemoveLambdaFS.js"
              ],
              "mod_name": "CFGTransformations"
            }
          },
          "Remove Unit Productions": {
            "RemoveUnitFS": {
              "long_name": "RemoveUnitFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/CFL/RemoveUnitFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/GrammarMatrix.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/CFL/RemoveUnitFS.js"
              ],
              "mod_name": "CFGTransformations"
            }
          },
          "Chomsky Normal Form (CNF)": {
            "ChomskyNormalFormFS": {
              "long_name": "ChomskyNormalFormFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/CFL/ChomskyNormalFormFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/GrammarMatrix.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/CFL/ChomskyNormalFormFS.js"
              ],
              "mod_name": "CFGTransformations"
            }
          },
          "Greibach Normal Form (GNF)": {
            "GreibachNormalFormFS": {
              "long_name": "GreibachNormalFormFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/CFL/GreibachNormalFormFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/GrammarMatrix.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/CFL/GreibachNormalFormFS.js"
              ],
              "mod_name": "CFGTransformations"
            }
          }
        }
      },
      "PIFLA/CFGTransEx": {
        "long_name": "Transforming Grammars Exercises",
        "sections": {
          "Transforming Grammars Exercises": {
            "DFAmod3b": {
              "long_name": "DFA for strings with mod 3 bs an no aab",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/CFL/DFAmod3b.html",
              "mod_name": "CFGTransEx",
              "threshold": 0.9
            },
            "CFGTransEx1": {
              "long_name": "Transform to remove unit, lambda, useless productions",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/CFL/CFGTransEx1.html",
              "mod_name": "CFGTransEx",
              "threshold": 0.9
            },
            "CFGTransEx2": {
              "long_name": "Transform to remove unit, lambda, useless productions",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/CFL/CFGTransEx2.html",
              "mod_name": "CFGTransEx",
              "threshold": 0.9
            },
            "ChomskyEx": {
              "long_name": "Transform to Chomsky form",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/CFL/ChomskyEx.html",
              "mod_name": "CFGTransEx",
              "threshold": 0.9
            }
          }
        }
      }
    },
    "Pushdown Automata": {
      "PIFLA/PDA": {
        "long_name": "Pushdown Automata",
        "sections": {
          "PDA: Pushdown Automata": {
            "PDAFS": {
              "long_name": "PDAFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/PDA/PDAFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/PDAFS.js"
              ],
              "mod_name": "PDA"
            }
          },
          "Transitions Types for PDAs": {
            "PDATransitionsFS": {
              "long_name": "PDATransitionsFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/PDA/PDATransitionsFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/PDATransitionsFS.js"
              ],
              "mod_name": "PDA"
            }
          },
          "PDA Acceptace Models - Final State Acceptace": {
            "PDAAcceptanceFS": {
              "long_name": "PDAAcceptanceFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/PDA/PDAAcceptanceFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/PDAAcceptanceFS.js"
              ],
              "mod_name": "PDA"
            }
          },
          "PDA Acceptace Models - Empty Stack Acceptace": {
            "PDAEmptyStackFS": {
              "long_name": "PDAEmptyStackFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/PDA/PDAEmptyStackFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/PDAEmptyStackFS.js"
              ],
              "mod_name": "PDA"
            }
          },
          "Equivalence of Acceptance Definitions": {
            "PDAAcceptEquivFS": {
              "long_name": "PDAAcceptEquivFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/PDA/PDAAcceptEquivFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/PDAAcceptEquivFS.js"
              ],
              "mod_name": "PDA"
            }
          },
          "Something to Think About": {}
        }
      },
      "PIFLA/PDAExercises": {
        "long_name": "PDA Exercises",
        "sections": {
          "PDA Exercises": {
            "PDAwcwR": {
              "long_name": "Draw a PDA for wcwR",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/PDA/PDAwcwR.html",
              "mod_name": "PDAExercises",
              "threshold": 0.9
            },
            "PDAaicjbi": {
              "long_name": "Draw a PDA for aicjbi",
              "required": true,
              "points": 3.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/PDA/PDAaicjbi.html",
              "mod_name": "PDAExercises",
              "threshold": 0.9
            },
            "PDA2asperb": {
              "long_name": "Draw a PDA with twice as many a as b",
              "required": true,
              "points": 3.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/PDA/PDA2asperb.html",
              "mod_name": "PDAExercises",
              "threshold": 0.9
            },
            "PDAaibjck": {
              "long_name": "Draw a PDA for aibjck, where i or j equals k",
              "required": true,
              "points": 3.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/PDA/PDAaibjck.html",
              "mod_name": "PDAExercises",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/PDACFL": {
        "long_name": "PDAs and Context Free Languages",
        "sections": {
          "PDAs and Context Free Languages": {},
          "Convert a CFG to a NPDA": {
            "PDACFLFS": {
              "long_name": "PDACFLFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/PDA/PDACFLFS.css"
              ],
              "scripts": [
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "DataStructures/FLA/GrammarMatrix.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/PDACFLFS.js"
              ],
              "mod_name": "PDACFL"
            }
          },
          "Convert a NPDA to a CFG": {}
        }
      },
      "PIFLA/DPDA": {
        "long_name": "Deterministic Pushdown Automata",
        "sections": {
          "Deterministic Pushdown Automata": {
            "DPDAFS": {
              "long_name": "DPDAFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/PDA/DPDAFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/DPDAFS.js"
              ],
              "mod_name": "DPDA"
            }
          },
          "Proof there exists a CFL that is not a DCFL": {
            "NCFLProofFS": {
              "long_name": "NCFLProofFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/PDA/NCFLProofFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/NCFLProofFS.js"
              ],
              "mod_name": "DPDA"
            }
          },
          "Grammars for Deterministic Context-free Languages": {
            "GrammarsForDCFLFS": {
              "long_name": "GrammarsForDCFLFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/PDA/GrammarsForDCFLFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/PDA.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/GrammarsForDCFLFS.js"
              ],
              "mod_name": "DPDA"
            }
          }
        }
      }
    },
    "Properties of Context-free Languages": {
      "PIFLA/CFLProp": {
        "long_name": "Proving that a Language is not Context-Free",
        "sections": {
          "Introduction": {},
          "Closure Properties for Context-Free Languages": {
            "CFLClosurePropFS": {
              "long_name": "CFLClosurePropFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/PDA/CFLClosurePropFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/CFLClosurePropFS.js"
              ],
              "mod_name": "CFLProp"
            }
          },
          "A Pumping Lemma for Context-Free Languages": {
            "CFLPumpingLemmaFS": {
              "long_name": "CFLPumpingLemmaFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/PDA/CFLPumpingLemmaFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/CFLPumpingLemmaFS.js"
              ],
              "mod_name": "CFLProp"
            }
          },
          "Using the CFL Pumping Lemma to Prove a Language Not CFL: Example 1": {
            "CFLPumpingEx1FS": {
              "long_name": "CFLPumpingEx1FS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/PDA/CFLPumpingEx1FS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/CFLPumpingEx1FS.js"
              ],
              "mod_name": "CFLProp"
            }
          },
          "Pumping Lemma Example 2": {
            "CFLPumpingEx2FS": {
              "long_name": "CFLPumpingEx2FS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/PDA/CFLPumpingEx2FS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/CFLPumpingEx2FS.js"
              ],
              "mod_name": "CFLProp"
            }
          },
          "Pumping Lemma Example 3": {
            "CFLPumpingEx3FS": {
              "long_name": "CFLPumpingEx3FS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/PDA/CFLPumpingEx3FS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/CFLPumpingEx3FS.js"
              ],
              "mod_name": "CFLProp"
            }
          },
          "Pumping Lemma Example 4": {
            "CFLPumpingEx4FS": {
              "long_name": "CFLPumpingEx4FS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/PDA/CFLPumpingEx4FS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/PDA/CFLPumpingEx4FS.js"
              ],
              "mod_name": "CFLProp"
            }
          }
        }
      }
    },
    "Turing Machines": {
      "PIFLA/TuringMachines": {
        "long_name": "Introduction to Turing Machines",
        "sections": {
          "A General Model of Computation": {},
          "Turing Machines": {
            "TMGeneralFS": {
              "long_name": "TMGeneralFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/TM/TMGeneralFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/TuringMachine.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/TM/TMGeneralFS.js"
              ],
              "mod_name": "TuringMachines"
            }
          },
          "Interpreting Turing Machines": {
            "TMInterpretingFS": {
              "long_name": "TMInterpretingFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/TM/TMInterpretingFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/TuringMachine.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/TM/TMInterpretingFS.js"
              ],
              "mod_name": "TuringMachines"
            }
          },
          "Turing-Decidable vs. Turing-Acceptable Languages": {
            "TMDecidableFS": {
              "long_name": "TMDecidableFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/TM/TMDecidableFS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/TuringMachine.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/TM/TMDecidableFS.js"
              ],
              "mod_name": "TuringMachines"
            }
          }
        }
      },
      "PIFLA/TuringMachinesAdv": {
        "long_name": "Turing Machines: Advanced Topics",
        "sections": {
          "Making More Complicated Machines": {
            "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",
                "DataStructures/FLA/TuringMachine.js",
                "AV/Development/formal_language/TuringMachine.js",
                "AV/VisFormalLang/TM/TManbncnCON.js"
              ],
              "mod_name": "TuringMachinesAdv"
            },
            "TMComplicated3FS": {
              "long_name": "TMComplicated3FS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/TM/TMComplicated3FS.css"
              ],
              "scripts": [
                "lib/underscore.js",
                "DataStructures/FLA/FA.js",
                "DataStructures/FLA/TuringMachine.js",
                "DataStructures/PIFrames.js",
                "AV/PIFLA/TM/TMComplicated3FS.js"
              ],
              "mod_name": "TuringMachinesAdv"
            },
            "TMcopy": {
              "long_name": "TMcopy",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/Kochan/TMcopy.css"
              ],
              "scripts": [
                "AV/Juwon/FAcopy.js",
                "AV/Kochan/TMcopy.js"
              ],
              "mod_name": "TuringMachinesAdv"
            }
          },
          "Unrestricted and Context Sensitive Grammars": {},
          "Simple Arithmetic... and Beyond": {},
          "Turing's Thesis and Algorithms": {},
          "Turing Machine Extensions": {
            "TMExtensionFS": {
              "long_name": "TMExtensionFS",
              "required": false,
              "points": 0.0,
              "threshold": 1.0,
              "type": "ss",
              "links": [
                "DataStructures/FLA/FLA.css",
                "AV/PIFLA/TM/TMExtensionFS.css"
              ],
              "scripts": [
                "AV/PIFLA/TM/TMExtensionFS.js"
              ],
              "mod_name": "TuringMachinesAdv"
            }
          }
        }
      },
      "PIFLA/TMExercises": {
        "long_name": "Turing Machine Exercises",
        "sections": {
          "Exercise 1": {
            "addOnea": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/addOnea.html",
              "mod_name": "TMExercises",
              "threshold": 0.9
            }
          },
          "Exercise 2": {
            "eraseABC": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/eraseABC.html",
              "mod_name": "TMExercises",
              "threshold": 0.9
            }
          },
          "Exercise 3": {
            "keepABC": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/keepABC.html",
              "mod_name": "TMExercises",
              "threshold": 0.9
            }
          },
          "Exercise 4": {
            "aNumsPowerOf2": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/aNumsPowerOf2.html",
              "mod_name": "TMExercises",
              "threshold": 0.9
            }
          },
          "Exercise 5": {
            "ifaNumsPowerOf2": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/ifaNumsPowerOf2.html",
              "mod_name": "TMExercises",
              "threshold": 0.9
            }
          },
          "Exercise 6": {
            "abcWInWWROut": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/abcWInWWROut.html",
              "mod_name": "TMExercises",
              "threshold": 0.9
            }
          },
          "Exercise 7": {
            "abcNawlargerthanNbw": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/abcNawlargerthanNbw.html",
              "mod_name": "TMExercises",
              "threshold": 0.9
            }
          },
          "Exercise 8": {
            "replaceABAbyACA": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/replaceABAbyACA.html",
              "mod_name": "TMExercises",
              "threshold": 0.9
            }
          },
          "Exercise 9": {
            "abPalindromes": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/abPalindromes.html",
              "mod_name": "TMExercises",
              "threshold": 0.9
            }
          }
        }
      },
      "PIFLA/TMExercisesS22": {
        "long_name": "Turing Machine Exercises",
        "sections": {
          "Exercise 1": {
            "addOnea": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/addOnea.html",
              "mod_name": "TMExercisesS22",
              "threshold": 0.9
            }
          },
          "Exercise 2": {
            "swapab": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 2.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/swapab.html",
              "mod_name": "TMExercisesS22",
              "threshold": 0.9
            }
          },
          "Exercise 3": {
            "abcWInWWROut": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 3.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/abcWInWWROut.html",
              "mod_name": "TMExercisesS22",
              "threshold": 0.9
            }
          },
          "Exercise 4": {
            "abcNawlargerthanNbw": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 3.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/abcNawlargerthanNbw.html",
              "mod_name": "TMExercisesS22",
              "threshold": 0.9
            }
          },
          "Exercise 5": {
            "abPalindromes": {
              "long_name": "Turing Machines Exercise",
              "required": true,
              "points": 3.0,
              "type": "pe",
              "av_address": "AV/OpenFLAP/exercises/FLAssignments/TMexercise/abPalindromes.html",
              "mod_name": "TMExercisesS22",
              "threshold": 0.9
            }
          }
        }
      }
    },
    "Limits to Computing": {
      "PIFLA/LimCompFLA": {
        "long_name": "Limits to Computing",
        "sections": {
          "Limits to Computing": {}
        }
      },
      "PIFLA/Reduction": {
        "long_name": "Reductions",
        "sections": {
          "Reductions": {
            "Pair2SortFS": {
              "long_name": "Pair2SortFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/LimComp/Pair2SortFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/LimComp/Pair2SortFS.js"
              ],
              "mod_name": "Reduction"
            },
            "LowerBoundFS": {
              "long_name": "LowerBoundFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/LimComp/LowerBoundFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/LimComp/LowerBoundFS.js"
              ],
              "mod_name": "Reduction"
            }
          },
          "Reduction Examples": {
            "TwoMulExampleFS": {
              "long_name": "TwoMulExampleFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/LimComp/TwoMulExampleFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/LimComp/TwoMulExampleFS.js"
              ],
              "mod_name": "Reduction"
            }
          },
          "Bounds Theorems": {}
        }
      },
      "PIFLA/NPComplete": {
        "long_name": "NP-Completeness",
        "sections": {
          "Hard Problems": {
            "TravelSalesmanFS": {
              "long_name": "TravelSalesmanFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/LimComp/TravelSalesmanFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/LimComp/TravelSalesmanFS.js"
              ],
              "mod_name": "NPComplete"
            },
            "KCliqueFS": {
              "long_name": "KCliqueFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/LimComp/KCliqueFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/LimComp/KCliqueFS.js"
              ],
              "mod_name": "NPComplete"
            }
          },
          "Proving that a Problem is NP-Complete": {
            "SATProofFS": {
              "long_name": "SATProofFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/LimComp/SATProofFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/LimComp/SATProofFS.js"
              ],
              "mod_name": "NPComplete"
            }
          },
          "Coping with NP-Complete Problems": {
            "NPCCopingFS": {
              "long_name": "NPCCopingFS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/LimComp/NPCCopingFS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/LimComp/NPCCopingFS.js"
              ],
              "mod_name": "NPComplete"
            }
          }
        }
      },
      "PIFLA/Impossible": {
        "long_name": "Unsolveable Problems",
        "sections": {
          "Unsolveable Problems": {
            "Unsolve1FS": {
              "long_name": "Unsolve1FS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/LimComp/Unsolve1FS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/LimComp/Unsolve1FS.js"
              ],
              "mod_name": "Impossible"
            }
          },
          "The Halting Problem is Unsolvable": {
            "Unsolve2FS": {
              "long_name": "Unsolve2FS",
              "required": true,
              "points": 2.0,
              "threshold": 1.0,
              "type": "ff",
              "links": [
                "AV/PIFLA/LimComp/Unsolve2FS.css"
              ],
              "scripts": [
                "DataStructures/PIFrames.js",
                "AV/PIFLA/LimComp/Unsolve2FS.js"
              ],
              "mod_name": "Impossible"
            }
          }
        }
      }
    },
    "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": {}
        }
      }
    },
    "Appendix": {
      "Glossary": {
        "long_name": "Glossary",
        "sections": {}
      }
    }
  }
}