The NEURON MODeling language
The NMODL transpiler 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 transpiler and process the AST data structures with a few notable exceptions (mainly VERBATIM C blocks).
The transpiler 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 transpiler. 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 |