1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
|
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 | |
+------------------------+-------------------+-------------------+---------------------+
|