{
  "title": "Programming Languages",
  "desc": "Programming Languages",
  "build_dir": "Books",
  "code_dir": "SourceCode/",
  "code_lang": {
    "Pseudo": {
      "ext": [
        "txt"
      ],
      "label": "Pseudo",
      "lang": "pseudo"
    }
  },
  "lang": "en",
  "build_JSAV": false,
  "suppress_todo": false,
  "dispModComp": true,
  "glob_exer_options": {
    "JXOP-debug": "true"
  },
  "glob_ss_options": {
    "threshold": 1.0,
    "points": 0.0,
    "required": false,
    "partial_credit": false
  },
  "glob_ff_options": {
    "threshold": 1.0, 
    "points": 0.0, 
    "required": false
  },
  "glob_ka_options": {
    "threshold": 3.0,
    "points": 1.0,
    "required": true,
    "partial_credit": false
  },
  "glob_extr_options": {
    "code-workout": {
      "points": 2.0,
      "required": true,
      "partial_credit": true,
      "enable_scrolling": true
    },
    "points": 1.0,
    "partial_credit": false
  },
  "glob_pe_options": {
    "threshold": 1,
    "points": 1.0,
    "required": true,
    "partial_credit": false
  },
  "chapters": {
    "Preface": {
      "Intro": {}
    },
    "Grammars": {
      "PL/Grammars1": {
        "CharacterizeLang1": {
          "threshold": 1
        },
        "CharacterizeLang2": {
          "threshold": 1
        },
        "NumParseTreeNodes": {
          "threshold": 1
        },
        "StringGenFromGmr": {
          "threshold": 1
        }
      },
      "PL/Grammars2": {
        "NumParseTrees1": {
          "threshold": 1
        },
        "NumParseTrees2": {
          "threshold": 1
        },
        "NumParseTrees3": {
          "threshold": 1
        },
        "DeterminingAmbiguities": {
          "threshold": 1
        }
      },
      "PL/Grammars3": {
        "Associativity": {
          "threshold": 1
        },
        "CharacterizeLang3": {
          "threshold": 1
        },
        "ExtendedBNF": {
          "threshold": 1
        },
        "PrecedenceAndAssociativity": {
          "threshold": 1
        }
      },
      "PL/Grammars4": {
        "Jison2": {
          "threshold": 1
        }
      },
      "PL/Grammars5": {
        "AnnotatingJison": {
          "threshold": 1
        }
      }
    },
    "Functional Programming": {
      "PL/FP1": {
        "FPcons": {
          "threshold": 1
        },
        "FPHdTlCons2": {
          "threshold": 1
        },
        "FPisEq": {
          "threshold": 1
        }
      },
      "PL/FP2": {
        "RecListProc2": {
          "threshold": 1
        },
        "RecListProc3": {
          "threshold": 1
        }
      },
      "PL/FP3": {
        "DeepRecur2": {
          "threshold": 1
        },
        "DeepRecur3": {
          "threshold": 1
        },
        "DeepRecur1": {
          "threshold": 1
        }
      },
      "PL/FP4": {
        "SplitAndJoin": {
          "threshold": 1
        },
        "QuickSort": {
          "threshold": 1
        }
      },
      "PL/FP5": {
        "HigherOrderFuncs2": {
          "threshold": 1
        },
        "HigherOrderFuncs3": {
          "threshold": 1
        },
        "StaticDynamic": {
          "threshold": 1
        }
      },
      "PL/FP6": {
        "Curry1": {
          "threshold": 1
        },
        "Compose": {
          "threshold": 1
        },
        "Map": {
          "threshold": 1
        }
      },
      "PL/FP7": {
        "Reduce1": {
          "threshold": 1
        },
        "Reduce2": {
          "threshold": 1
        },
        "Filter": {
          "threshold": 1
        }
      },
      "PL/FP8": {},
      "PL/FP9": {
        "ContinuationPassing1": {
          "threshold": 1
        },
        "ContinuationPassing2": {
          "threshold": 1
        },
        "ContinuationPassing3": {
          "threshold": 1
        },
        "TailRecursion": {
          "threshold": 1
        }
      }
    },
    "Lambda Calculus": {
      "PL/LCSyntax": {},
      "PL/LCSemantics": {
        "LambdaCalcSemantics": {
          "threshold": 1
        }
      },
      "PL/FreeBoundVariables": {},
      "PL/AlphaConversion": {},
      "PL/Substitution": {},
      "PL/BetaReduction": {},
      "PL/ReductionStrategies": {},
      "PL/ChurchNumerals": {
        "ChurchIfThen": {
          "threshold": 1
        },
        "ChurchOR": {
          "threshold": 1
        }
      },
      "PL/RecursiveFunctions": {}
    },
    "Interpreting the Functional Language SLang 1": {
	"PL/SLang1": {
            "AbstractSynSLang1": {
		"threshold": 1
            },
            "CurryInSLang1": {
		"threshold": 1
            },
	     "SemanticsSLang1": {
		"threshold": 1
            }
	},
      "PL/Environment": {},
      "PL/SLang1withLetExpressions": {}
    },
    "Interpreting the Imperative Language SLang 2": {
      "PL/SLang2": {},
      "PL/SLang2TTK": {}
    },
      "Variations on Parameter Passing": {
	  "PL/SLang2ParameterPassing": {},
	  "PL/LazyLists": {
	       "InfSeq1": {
		"threshold": 1
               },
	       "InfSeq4": {
		"threshold": 1
               }	      
	  }
      },
    "Type Systems": {
	"PL/TypeSystems": {},
	"PL/TypeInference": {
	    "Typing1": {
		"threshold": 1
               },
	    "Typing2": {
		"threshold": 1
               },
	    "Typing3": {
		"threshold": 1
               },
	    "Typing4": {
		"threshold": 1
               },
	    "Typing5": {
		"threshold": 1
               },
	    "Typing6": {
		"threshold": 1
               }
	}	
    },
    "Appendices": {
      "PL/PL_Glossary": {}
    }
  }
}
