Difference between revisions of "GenAsm (language)"

From Mill Computing Wiki
Jump to: navigation, search
(Created page with "The genAsm assembly language is a low-level [https://en.wikipedia.org/wiki/Dataflow_programming| dataflow language] for writing programs to be executed on the Mill processors....")
 
Line 29:Line 29:
 
     binding ::=        ''-:'' identifier '''|''' ''-:'' bindings
 
     binding ::=        ''-:'' identifier '''|''' ''-:'' bindings
 
     bindings ::=      ''{'' idList ''}''
 
     bindings ::=      ''{'' idList ''}''
 +
    pick ::=          ''?'' expression '':'' expression
 
     idList ::=        identifier '''|''' identifier '','' idList
 
     idList ::=        identifier '''|''' identifier '','' idList
 
     invoke ::=        opCall '''|''' opId secondary-option
 
     invoke ::=        opCall '''|''' opId secondary-option
 
     opCall ::=        opId ''('' argList-option '')''
 
     opCall ::=        opId ''('' argList-option '')''

Revision as of 20:53, 4 September 2014

The genAsm assembly language is a low-level dataflow language for writing programs to be executed on the Mill processors. The language is accepted by the genAsm assembler, which create ELF files suitable as input to the prelinker or specializer. The assembler is intended for use when high-level language compilers are unable to provide a desired access to Mill hardware facilities.

Syntax in BNF:

BNF: Terminal keywords and symbols are italic; meta-symbols are bold.

   program ::=        moduleHead moduleBody-option
   moduleHead ::=     module identifier
   moduleBody ::=     functionDef-sequence
   functionDef ::=    func identifier parmsBinding resultSpec-option { functionBody }
   parmsBinding ::=   ( parmList-option )
   parmList ::=       parm | parm , parmList
   arg ::=            widthTag identifier
   widthTag ::=       b | h | w | d | q | bv | hv | wv | dv | qv
   resultSpec ::=     -> widthTag | -> ( resultList-option )
   resultList ::=     widthTag | widthTag , resultList
   functionBody ::=   expressionList-option
   expressionList ::= expression | expression ; expressionList
   expression ::=     secondary-option | 
                      expression invoke-option | 
                      expression binding | 
                      expression pick
   secondary ::=      primary | secondary call
   primary ::=        number widthSpec-option | argId | boundId | funcId | ( expression )
   widthSpec ::=      : widthTag
   call ::=           ( argList-option )
   argList ::=        arg | arg , argList
   binding ::=        -: identifier | -: bindings
   bindings ::=       { idList }
   pick ::=           ? expression : expression
   idList ::=         identifier | identifier , idList
   invoke ::=         opCall | opId secondary-option
   opCall ::=         opId ( argList-option )