Changeset 12218 in project


Ignore:
Timestamp:
10/21/08 01:42:04 (12 years ago)
Author:
Ivan Raikov
Message:

Documentation updates.

Location:
release/3/nemo/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • release/3/nemo/trunk/expr-parser.scm

    r12204 r12218  
    166166                                          ('?           (tok (QUESTION)))
    167167                                          (':           (tok (COLON)))
    168                                           ('let         (tok (LET)))
    169                                           ('if          (tok (IF)))
    170                                           ('then        (tok (THEN)))
    171                                           ('else        (tok (ELSE)))
     168                                          ((or 'let 'LET)     (tok (LET)))
     169                                          ((or 'if  'IF)      (tok (IF)))
     170                                          ((or 'then 'THEN)   (tok (THEN)))
     171                                          ((or 'else 'ELSE)   (tok (ELSE)))
    172172                                          ((? number?)  (tok (NUM ,x)))
    173173                                          ((? symbol?)  (tok (ID ,x)))
  • release/3/nemo/trunk/nemo-core.scm

    r12204 r12218  
    863863          (let ((qs1  (match decl
    864864                             ;; imported quantities
    865                              (('input . lst)
     865                             (((or 'input 'INPUT) . lst)
    866866                              (cond ((every (lambda (x) (or (symbol? x) (list? x))) lst)
    867867                                     (fold (lambda (x ax)
     
    870870                                                     (((nemo-core 'add-external!) sys) x `(input ,x ,x #f))
    871871                                                     (cons x ax))
    872                                                     ((id1 'as x1)
     872                                                    ((id1 (or 'as 'AS) x1)
    873873                                                     (((nemo-core 'add-external!) sys) x `(input ,id1 ,x1 #f))
    874874                                                     (cons x1 ax))
    875                                                     ((id1 'from n1)
     875                                                    ((id1 (or 'from 'FROM) n1)
    876876                                                     (((nemo-core 'add-external!) sys) x `(input ,id1 ,id1 ,n1))
    877877                                                     (cons id1 ax))
    878                                                     ((id1 'as x1 'from n1)
     878                                                    ((id1 (or 'as 'AS) x1 (or 'from 'FROM) n1)
    879879                                                     (((nemo-core 'add-external!) sys) x `(input ,id1 ,x1 ,n1))
    880880                                                     (cons x1 ax))
     
    886886
    887887                            ;; exported quantities
    888                             (('output . lst)
     888                            (((or 'output 'OUTPUT) . lst)
    889889                             (cond ((every symbol? lst) 
    890890                                    (for-each (lambda (x) (((nemo-core 'add-external!) sys) x 'output)) lst)
     
    895895
    896896                            ;; constant during integration
    897                             (('const id '= expr)
     897                            (((or 'const 'CONST) id '= expr)
    898898                             (cond ((and (symbol? id) (or (number? expr) (list? expr)))
    899899                                    (let ((val (eval-const (parse-expr expr))))
     
    905905
    906906                            ;; state transition complex
    907                             (('state-complex (id . alst) )
     907                            (((or 'state-complex 'STATE-COMPLEX) (id . alst) )
    908908                             (cond ((and (symbol? id) (list? alst))
    909909                                    (let ((initial      (lookup-def 'initial alst))
     
    955955                           
    956956                            ;; user-defined function
    957                             (('defun id idlist expr)
     957                            (((or 'defun 'DEFUN) id idlist expr)
    958958                             (cond ((and (symbol? id) (list? idlist) (every symbol? idlist) (list? expr))
    959959                                    (((nemo-core 'defun!) sys) id idlist (parse-expr expr))
     
    964964                           
    965965                            ;; compiled primitives
    966                             (('prim id value)
     966                            (((or 'prim 'PRIM) id value)
    967967                             (cond ((symbol? id)  (env-extend! id '(prim) value))
    968968                                   (else (nemo:error 'eval-nemo-system-decls
     
    970970                                                        "prim id value"))))
    971971                           
    972                             (('component ('type typ) ('name name) . lst) 
     972                            (((or 'component 'COMPONENT)
     973                              ((or 'type 'TYPE) typ)
     974                              ((or 'name 'NAME) name) . lst) 
    973975                             (let* ((cqs   (loop lst (list) #f))
    974976                                    (sym   (qname "comp"))
     
    978980
    979981                             
    980                             (('component ('type typ)  . lst) 
     982                            (((or 'component 'COMPONENT) ((or 'type 'TYPE) typ)  . lst) 
    981983                             (let* ((sym   (qname "comp"))
    982984                                    (cqs   (loop lst (list) #f))
     
    986988                             
    987989                           
    988                             (('sysname name)  (if (symbol? name)
    989                                                   (environment-set! sys (nemo-intern 'name) (SYSNAME name))
    990                                                   (nemo:error 'eval-nemo-system-decls
    991                                                                  "system name must be a symbol")))
    992                            
    993                             (('const . _)
     990                            (((or 'sysname 'SYSNAME) name) 
     991                             (if (symbol? name)
     992                                 (environment-set! sys (nemo-intern 'name) (SYSNAME name))
     993                                 (nemo:error 'eval-nemo-system-decls
     994                                             "system name must be a symbol")))
     995                           
     996                            (((or 'const 'CONST) . _)
    994997                             (nemo:error 'eval-nemo-system-decls "constant declarations must be of the form: "
    995998                                            "const id = expr"))
     
    9991002                                            "id = expr"))
    10001003                           
    1001                             (('state-complex . _)
     1004                            (((or 'state-complex 'STATE-COMPLEX) . _)
    10021005                             (nemo:error 'eval-nemo-system-decls
    10031006                                            "state complex declarations must be of the form: "
    10041007                                            "state-complex (id ...)"))
    10051008                           
    1006                             (('defun . _)
     1009                            (((or 'defun 'DEFUN) . _)
    10071010                             (nemo:error 'eval-nemo-system-decls "function declarations must be of the form: "
    10081011                                            "defun id (arg1 arg2 ...) expr"))
    10091012                           
    1010                             (('prim . _)
     1013                            (((or 'prim 'PRIM) . _)
    10111014                             (nemo:error 'eval-nemo-system-decls "prim declarations must be of the form: "
    10121015                                            "prim id value"))
    10131016                           
    1014                             (('component . _) 
     1017                            (((or 'component 'COMPONENT) . _) 
    10151018                             (nemo:error 'eval-nemo-system-decls "invalid component: " decl))
    10161019                           
    1017                             (('sysname . _) 
     1020                            (((or 'sysname 'SYSNAME) . _) 
    10181021                             (nemo:error 'eval-nemo-system-decls "system name must be of the form (sysname name)"))
    10191022                           
  • release/3/nemo/trunk/nemo-eggdoc.scm

    r12113 r12218  
    2020
    2121
    22 (use eggdoc)
     22(use eggdoc srfi-1)
    2323
    2424(define doc
     
    3232
    3333     (history
     34      (version "1.6" "Added infix expression parser (nemo format)")
    3435      (version "1.0" "Initial release"))
    3536
     
    7374      (subsection "Model description language"
    7475        (p "The following constructs comprise the model description language: ")
    75         (p (symbol-table
    76             (describe "(INPUT {ID | (ID [AS LOCAL-ID] [FROM NAMESPACE])} ... )"
    77                       (p "Declares one or several imported quantities. "
    78                          
    79                          ))
    80             (describe "(OUTPUT ID)"
    81                       "declare that an existing quantity be exported")
    82             (describe "(CONST ID = EXPR)"
    83                       "declare a constant quantity (its value will be computed at declaration time)")
    84             (describe "(DEFUN ID ({ARG-ID} ... ) BODY)"
    85                       "declare a function (an expression with no free variables)")
    86             (describe "(ASGN ID = EXPR)"
    87                       "declare an assigned quantity (an expression that can refer to other quantities in the system)")
    88             (describe "(STATE-COMPLEX ID TRANSITIONS INITIAL OPEN)"
    89                       "declare a state complex quantity")
    90             (describe "(COMPONENT (TYPE ID) (NAME ID) ELEMENTS)"
    91                       "declare a system component (a quantity that can contain other quantities)")
    92             )
    93           ))
     76        (p (ebnf-def "MODEL"
     77            (ebnf-choice
     78             ( (ebnf-form (ebnf-kw "INPUT ")
     79                          (ebnf-choice (ebnf-var "ID")
     80                             (ebnf-form (ebnf-var "ID") (ebnf-opt (ebnf-kw "AS ") (ebnf-var "LOCAL-ID"))
     81                                        (ebnf-opt (ebnf-kw "FROM ") (ebnf-var "NAMESPACE"))))
     82                          "... )")
     83               (comment "Declares one or several imported quantities. "
     84                        "If the optional " (ebnf-kw "AS") " parameter is given, "
     85                        "then the quantity is imported as " (ebnf-var "LOCAL-ID") ". "
     86                        "If the optional " (ebnf-kw "FROM") " parameter is given, "
     87                        "then the quantity is imported from namespace " (ebnf-var "NAMESPACE") ". "))
     88               
     89             ( (ebnf-form (ebnf-kw "OUTPUT") (ebnf-var "ID") )
     90               (comment "Declares that an existing quantity be exported."))
     91
     92             ( (ebnf-form (ebnf-kw "CONST") (ebnf-var "ID") "=" (ebnf-var "EXPR"))
     93               (comment "Declares a constant quantity (its value will be computed at declaration time)."))
     94
     95             ( (ebnf-form (ebnf-kw "DEFUN") (ebnf-var "ID") (ebnf-form (ebnf-var "ARG-ID") "..." )
     96                          (ebnf-var "EXPR"))
     97               (comment "Declares a function (a parameterized expression with no free variables)."))
     98
     99             ( (ebnf-form (ebnf-var "ID") "=" (ebnf-var "EXPR"))
     100               (comment "Declares an assigned quantity "
     101                        "(an expression that can refer to other quantities in the system)."))
     102
     103             ( (ebnf-form (ebnf-kw "STATE-COMPLEX") (ebnf-var "ID") (ebnf-var "TRANSITIONS")
     104                          (ebnf-var "INITIAL-EXPR") (ebnf-var "OPEN-ID"))
     105               (p "Declares a state complex quantity. See below for the syntax of state transition equations. "
     106                  (ebnf-var "INITIAL-EXPR") " is an expression that computes the initial value. "
     107                  (ebnf-var "OPEN-ID") " is the name of the open state. It must be one of the states "
     108                  "defined by the transition equations. "))
     109
     110             ( (ebnf-form (ebnf-kw "COMPONENT")
     111                          (ebnf-form (ebnf-kw "TYPE") (ebnf-var "ID"))
     112                          (ebnf-form (ebnf-kw "NAME") (ebnf-var "ID"))
     113                          (ebnf-var "ELEMENTS"))
     114               (p "Declares a system component (a quantity that can contain other quantities)."))
     115             )))
     116
     117        (subsubsection "Expressions"
     118          (p "Expressions in the model description language are defined as: ")
     119          (p (ebnf-def "EXPR"
     120               (ebnf-choice
     121                       ( (ebnf-var "NUM")
     122                         (comment "A numeric constant."))
     123                       ( (ebnf-var "ID")
     124                         (comment "A variable name."))
     125                       ( (ebnf-form (ebnf-var "ID") (ebnf-form (ebnf-var "EXPR") "..."))
     126                         (comment "A function invocation."))
     127                       ( (ebnf-form (ebnf-var "EXPR") (ebnf-var "OP") (ebnf-var "EXPR") )
     128                         (comment "Arithmetic operator invocation. The following operators are supported: "
     129                                  (tt "+ - / * > < <= >= ^")))
     130                       ( (ebnf-form (ebnf-kw "LET") (ebnf-form (ebnf-var "BINDINGS")) (ebnf-var "EXPR") )
     131                         (comment "Local variables declaration. Each element in "
     132                                  (ebnf-var "BINDINGS") " is of the form: "
     133                                  (ebnf-form (ebnf-var "ID") (ebnf-var "EXPR"))))
     134                       ( (ebnf-form (ebnf-kw "IF") (ebnf-var "CONDITION")
     135                                    (ebnf-kw "THEN") (ebnf-var "EXPR")
     136                                    (ebnf-kw "ELSE") (ebnf-var "EXPR") )
     137                         (comment "Conditional expression. The expression after " (ebnf-kw "IF")
     138                                  " must be a comparison expression. ")))
     139                       )))
     140
     141        (subsubsection "State transition equations"
     142          (p "State transition equations in the model description language are defined as: ")
     143          (p (ebnf-def "TRANSITION"
     144               (ebnf-choice
     145                ( (ebnf-form (ebnf-kw "->") (ebnf-var "SRC-ID") (ebnf-var "DEST-ID")
     146                             (ebnf-var "EXPR") )
     147                  (comment "Declares that a transition occurs from state "
     148                           (ebnf-var "SRC-ID") " to state " (ebnf-var "DEST-ID")
     149                           " at rate computed by " (ebnf-var "EXPR") ". "))
     150                ( (ebnf-form (ebnf-kw "<->") (ebnf-var "SRC-ID") (ebnf-var "DEST-ID")
     151                             (ebnf-var "EXPR-1") (ebnf-var "EXPR-2") )
     152                  (comment "Declares that a transition occurs from state "
     153                           (ebnf-var "SRC-ID") " to state " (ebnf-var "DEST-ID")
     154                           " and vice versa, at rates computed by " (ebnf-var "EXPR-1")
     155                           " and " (ebnf-var "EXPR-2") ". "))
     156                ))))
     157
     158        (subsubsection "Ion channel definitions"
     159          (p "Currently, the " (tt "NMODL") " code generator recognizes and generates code for "
     160             "ion channel components that are defined as follows: "
     161          (p (ebnf-def (ebnf-form "COMPONENT (TYPE ion-channel) (NAME {NAME})")
     162                       ( (ebnf-form "COMPONENT (TYPE gate) ...")
     163                         (comment "One or more gate definitions. Each component of type gate "
     164                                  "must export the state complexes that characterize the gate dynamics. "))
     165
     166                       ( (ebnf-form "COMPONENT (TYPE pore) ...")
     167                         (comment "Conductance law definition. This component must export a "
     168                                  "constant maximal conductance, or an assigned quantity whose "
     169                                  "equation represents the conductance law used. "))
     170                           
     171                       ( (ebnf-opt (ebnf-form "COMPONENT (TYPE permeating-substance) ..."))
     172                         (comment "Conductance law definition. This component must export a "
     173                                  "constant maximal conductance, or an assigned quantity whose "
     174                                  "equation represents the conductance law used. "))
     175                           
     176                       ))))
     177        )
    94178
    95179      )
     
    386470<http://www.gnu.org/licenses/>."))))
    387471
    388 (if (eggdoc->html doc) (void))
     472
     473(define nemo-eggdoc:css (make-parameter #<<EOF
     474 <!--
     475      CODE {
     476            color: #666666;
     477          }
     478/*   DT.definition EM { font-weight: bold; font-style: normal; } */
     479
     480     DT.definition {
     481                   background: #eee;
     482                   color: black;
     483                   padding: 0.2em 1em 0.2em 0.7em;
     484                   margin-left: 0.2em;
     485border: 1px solid #bbc;
     486                   font-family: "Andale Mono", monospace;
     487                   /* font-size: 1.2em; */
     488                   
     489                 }
     490     DD {
     491                   margin-top: 0.8em;
     492                   margin-bottom: 0.8em;
     493     }
     494     DIV.subsection {
     495                    border-top: 1px solid #448;
     496                    padding-left: 1em;
     497                    margin-bottom: 1.2em;
     498     }
     499     DIV.subsubsection {
     500                    border-top: 1px dotted #99c;
     501                    /* border-left: 1px solid #99c; */
     502                    padding-left: 1em;
     503                    margin-bottom: 1.2em;
     504     }
     505     DIV.subsubsubsection {
     506                    border-top: 1px solid #ddf;
     507                    padding-left: 1em;
     508                    margin-bottom: 1.2em;
     509     }
     510
     511         DIV.section {
     512                 margin-bottom: 1.5em;
     513         }
     514         a:link {
     515                 color: #336;
     516         }
     517         a:visited { color: #666; }
     518         a:active  { color: #966; }
     519         a:hover   { color: #669; }
     520         body { margin: 0; padding: 0; background: #fff; color: #000; font: 9pt "Lucida Grande", "Verdana", sans-serif; }
     521         H2 {
     522                 background: #336;
     523                 color: #fff;
     524                 padding-top: 0.5em;
     525                 padding-bottom: 0.5em;
     526                 padding-left: 16px;
     527                 margin: 0 0 1em 0;
     528        }
     529        UL LI {
     530                list-style: none;
     531        }
     532        TT {
     533                font-family: "Andale Mono", monospace;
     534                /* font-size: 1.2em; */
     535        }
     536        H3 {
     537                color: #113;
     538                margin-bottom: 0.5em;
     539        }
     540        H4, H5, H6 {
     541                color: #113;
     542                margin-bottom: 1.0em;
     543        }
     544        H5 {
     545                font-weight: normal;
     546                font-style: italic;
     547                font-size: 100%;
     548                margin-top: 1.2em;
     549        }
     550        H6 {
     551                font-weight: bold;
     552                font-size: 85%;
     553                margin-top: 1.2em;
     554        }
     555     DIV#eggheader {
     556         text-align: center;
     557                 float: right;
     558                 margin-right: 2em;
     559     }
     560     DIV#header IMG {
     561            /* display: block; margin-left: auto; margin-right: auto;  */
     562            /* float: right; */
     563            border: none;  /* firefox */
     564     }
     565     DIV#footer {
     566                background: #bbd;
     567                padding: 0.7em ;
     568                border-top: 1px solid #cce;
     569     }
     570     DIV#footer hr {
     571                display: none;
     572     }
     573     DIV#footer a {
     574                float: left;
     575     }
     576     DIV#revision-history {
     577         float: right;
     578     }
     579     
     580     DIV#body {
     581                 margin: 1em 1em 1em 16px;
     582         }
     583
     584     DIV#examples PRE {
     585       background: #eef;
     586       padding: 0.1em;
     587       border: 1px solid #aac;
     588     }
     589     PRE#license, DIV#examples PRE {
     590       padding: 0.5em;
     591     }
     592     DIV#examples PRE {
     593       /* font-size: 85%; */
     594     }
     595     PRE { font-family: "Andale Mono", monospace; }
     596     TABLE {
     597       background: #eef;
     598       padding: 0.2em;
     599       border: 1px solid #aac;
     600       border-collapse: collapse;
     601       width: 100%;
     602     }
     603     TABLE.symbol-table TD.symbol {
     604          font-family: "Andale Mono", monospace;
     605          vertical-align: top;
     606          /* font-size: 1.2em; */
     607     }
     608     TABLE.symbol-table TD {
     609          font-family: "Andale Mono", monospace;
     610          vertical-align: top;
     611          /* font-size: 1.2em; */
     612     }
     613     TH {
     614       text-align: left;
     615       border-bottom: 1px solid #aac;
     616       padding: 0.25em 0.5em 0.25em 0.5em;
     617     }
     618     TD { padding: 0.25em 0.5em 0.25em 0.5em; }
     619     -->
     620EOF
     621))
     622
     623
     624
     625(if (eggdoc->html
     626     doc
     627     `( (eggdoc-style . ,(lambda (tag)
     628                           `("<style type=\"text/css\">" ,(nemo-eggdoc:css)
     629                             "</style>")))
     630       
     631        (comment
     632         *macro*
     633         . ,(lambda (tag . content) `(p . ,content)))
     634                         
     635        (ebnf-def       ; Term definition
     636         *macro*
     637         . ,(lambda (tag term-def . others)
     638              `(dl (dt (b (tt ,term-def)) (tt " ::= "))
     639                   (dd ,@others))))
     640                         
     641        (ebnf-kw        ; Keyword
     642         *macro*
     643         . ,(lambda (tag kw)
     644              `((b (tt ,kw)))))
     645                         
     646        (ebnf-var       ; Variable
     647         *macro*
     648         . ,(lambda (tag varname) `("{" (i ,varname) "}")))
     649                         
     650        (ebnf-choice    ; Choice of terms
     651         *macro*
     652         . ,(lambda (tag . terms)
     653              (intersperse terms `(tt " | "))))
     654
     655        (ebnf-opt       ; Optional terms
     656         . ,(lambda (tag . terms)
     657              `(" [" ,@terms "] ")))
     658                         
     659        (ebnf-form      ; ( ... ) Form
     660         *macro*
     661         . ,(lambda (tag . terms)
     662              `("( " ,@(intersperse terms " ") " )")))
     663                         
     664        (ebnf-several
     665         . ,(lambda (tag . elems)
     666              (intersperse elems ", ")))
     667                         
     668        ,@(eggdoc:make-stylesheet doc) ))
     669   
     670    (void))
Note: See TracChangeset for help on using the changeset viewer.