The NEURON MODeling language ============================ The NMODL Framework is able to parse all language features and constructs of the NMODL DSL. The programmer is thus able to parse any mechanism file with the NMODL Framework and process the AST data structures with a few notable exceptions (mainly VERBATIM C blocks). The Framework however still lacks code generation support for a some of the language constructs. In the following table we summarize the various NMODL DSL constructs and their support in the framework. Code generation information is related to CoreNEURON backend. +------------------------+-------------------+-------------------+---------------------+ | NMODL DSL construct | parsing supported | codegen supported | AST docs available | +========================+===================+===================+=====================+ | Blocks | +------------------------+-------------------+-------------------+---------------------+ | PARAMETER | yes | yes | yes | +------------------------+-------------------+-------------------+---------------------+ | ASSIGNED | yes | yes | yes | +------------------------+-------------------+-------------------+---------------------+ | STATE | yes | yes | yes | +------------------------+-------------------+-------------------+---------------------+ | INITIAL | yes | yes | yes | +------------------------+-------------------+-------------------+---------------------+ | DERIVATIVE | yes | yes | yes | +------------------------+-------------------+-------------------+---------------------+ | LINEAR | yes | yes | yes | +------------------------+-------------------+-------------------+---------------------+ | NONLINEAR | yes | yes | yes | +------------------------+-------------------+-------------------+---------------------+ | FUNCTION | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | PROCEDURE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | NET_RECEIVE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | SOLVE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | BREAKPOINT | yes | yes | yes | +------------------------+-------------------+-------------------+---------------------+ | KINETIC | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | UNITS | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | NEURON | yes | yes | yes | +------------------------+-------------------+-------------------+---------------------+ | VERBATIM | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | CONSTANT | yes | no | no | +------------------------+-------------------+-------------------+---------------------+ | BEFORE | yes | no | no | +------------------------+-------------------+-------------------+---------------------+ | AFTER | yes | no | no | +------------------------+-------------------+-------------------+---------------------+ | STEP | yes | no | no | +------------------------+-------------------+-------------------+---------------------+ | DISCRETE | yes | no | no | +------------------------+-------------------+-------------------+---------------------+ | FUNCTION_TABLE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | CONSTRUCTOR | yes | no | yes | +------------------------+-------------------+-------------------+---------------------+ | DESTRUCTOR | yes | yes | yes | +------------------------+-------------------+-------------------+---------------------+ | INDEPENDENT | yes | no | yes | +------------------------+-------------------+-------------------+---------------------+ | Control Flow | +------------------------+-------------------+-------------------+---------------------+ | WHILE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | IF | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | ELSE IF | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | ELSE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | Other | +------------------------+-------------------+-------------------+---------------------+ | ~ | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | -> | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | FOR_NETCONS | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | LOCAL | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | TITLE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | DEFINE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | INCLUDE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | SWEEP | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | CONDUCTANCE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | PROTECT | yes | no | no | +------------------------+-------------------+-------------------+---------------------+ | FROM | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | WATCH | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | MUTEXLOCK | yes | no | no | +------------------------+-------------------+-------------------+---------------------+ | MUTEXUNLOCK | yes | no | no | +------------------------+-------------------+-------------------+---------------------+ | CONSERVE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | COMPARTMENT | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | LONGITUDINAL_DIFFUSION | yes | no | no | +------------------------+-------------------+-------------------+---------------------+ | LAG | yes | no | no | +------------------------+-------------------+-------------------+---------------------+ | TABLE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | USEION | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | READ | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | WRITE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | VALENCE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | REPRESENTS | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | NONSPECIFIC_CURRENT | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | ELECTRODE_CURRENT | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | SUFFIX | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | POINT_PROCESS | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | RANGE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | GLOBAL | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | POINTER | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | BBCOREPOINTER | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | EXTERNAL | yes | no | no | +------------------------+-------------------+-------------------+---------------------+ | THREADSAFE | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | COMMENT | yes | yes | no | +------------------------+-------------------+-------------------+---------------------+ | SOLVE METHODs | +------------------------+-------------------+-------------------+---------------------+ | cnexp | yes | yes | | +------------------------+-------------------+-------------------+---------------------+ | euler | yes | yes | | +------------------------+-------------------+-------------------+---------------------+ | derivimplicit | yes | yes | | +------------------------+-------------------+-------------------+---------------------+ | sparse | yes | yes | | +------------------------+-------------------+-------------------+---------------------+ | runge | yes | no | | +------------------------+-------------------+-------------------+---------------------+ | after_cvode | yes | no | | +------------------------+-------------------+-------------------+---------------------+ | simeq | yes | no | | +------------------------+-------------------+-------------------+---------------------+ | cvode_t | yes | no | | +------------------------+-------------------+-------------------+---------------------+ | cvode_v | yes | no | | +------------------------+-------------------+-------------------+---------------------+