Skip to content

Syntax Reference

Vincent Laporte edited this page Feb 14, 2022 · 1 revision

Syntax Reference

This briefly describes the concrete syntax of Jasmin programs

var:

var      ::= NID

referenced by:

keyword:

keyword  ::= 'inline'

           | 'export'

           | 'reg'

           | 'stack'

referenced by:

annotationlabel:

         ::= NID

           | keyword

           | 'string'

referenced by:

int:

int      ::= '-'? INT

referenced by:

simple_attribute:

         ::= int

           | NID

           | 'string'

           | keyword

           | utype

referenced by:

attribute:

         ::= '=' ( simple_attribute | '{' struct_annot '}' )

referenced by:

annotation:

         ::= annotationlabel attribute?

referenced by:

struct_annot:

         ::= ( annotation ( ',' annotation )* )?

referenced by:

top_annotation:

         ::= '#' ( annotation | '[' struct_annot ']' )

referenced by:

annotations:

         ::= top_annotation*

referenced by:

utype:

utype    ::= 'u8'

           | 'u16'

           | 'u32'

           | 'u64'

           | 'u128'

           | 'u256'

referenced by:

ptype_r:

ptype_r  ::= 'bool'

           | 'int'

           | utype ( '[' pexpr ']' )?

referenced by:

ptype:

ptype    ::= ptype_r

referenced by:

swsize:

swsize   ::= SWSIZE

referenced by:

svsize:

svsize   ::= SVSIZE

referenced by:

castop1:

castop1  ::= swsize

           | svsize

referenced by:

castop:

castop   ::= castop1?

referenced by:

cast:

cast     ::= 'int'

           | swsize

referenced by:

prim:

prim     ::= '#' NID

referenced by:

arr_access_len:

         ::= ':' pexpr

referenced by:

arr_access_i:

         ::= utype? pexpr arr_access_len?

referenced by:

arr_access:

         ::= '.'? '[' arr_access_i ']'

referenced by:

pexpr_r:

pexpr_r  ::= var ( arr_access | '(' ( pexpr ( ',' pexpr )* )? ')' )?

           | 'true'

           | 'false'

           | INT

           | ( '(' utype ')' )? '[' var ( ( '+' | '-' ) pexpr )? ']'

           | '(' ( svsize ')' '[' pexpr ( ',' pexpr )* ']' | cast ')' pexpr | pexpr ')' )

           | ( ( '!' | '-' ) castop | pexpr ( '&&' | '!!' | ( '+' | '-' | '*' | '/' | '%' | '&' | '|' | '^' | '<<' | '>>[su]?' | '==' | '!=' | '<[su]?' | '<=[su]?' | '>[su]?' | '>=[su]?' ) castop | '?' pexpr ':' ) ) pexpr

           | prim '(' ( pexpr ( ',' pexpr )* )? ')'

referenced by:

pexpr:

pexpr    ::= pexpr_r

referenced by:

peqop:

peqop    ::= ( ( '+' | '-' | '*' | '>>[su]?' | '<<' | '&' | '^' | '|' ) castop )? '='

referenced by:

plvalue_r:

         ::= '_'

           | var arr_access?

           | ( '(' utype ')' )? '[' var ( ( '+' | '-' ) pexpr )? ']'

referenced by:

plvalue:

referenced by:

implicites:

         ::= '?' '{' struct_annot '}'

referenced by:

plvalues:

plvalues ::= '(' plvalue ( ',' plvalue )* ')'

           | ( plvalue | implicites ) ( ',' plvalue )*

referenced by:

pinstr_r:

pinstr_r ::= ( 'ArrayInit' '(' var ')' | ( plvalues peqop pexpr | var '(' ( pexpr ( ',' pexpr )* )? ')' ) ( 'if' pexpr )? | stor_type var ( ','? var )* ) ';'

           | ( 'if' pexpr ( pblock 'else' )? | 'for' var '=' pexpr ( 'to' | 'downto' ) pexpr ) pblock

           | 'while' pblock? '(' pexpr ')' pblock?

referenced by:

pinstr:

referenced by:

pblock_r:

pblock_r ::= '{' pinstr* '}'

referenced by:

pblock:

pblock   ::= pblock_r

referenced by:

stor_type:

         ::= storage ptype

referenced by:

annot_stor_type:

         ::= annotations stor_type

referenced by:

writable:

writable ::= 'const'

           | 'mut'

referenced by:

pointer:

pointer  ::= writable? 'ptr'

referenced by:

ptr:

ptr      ::= pointer?

referenced by:

storage:

storage  ::= ( 'reg' | 'stack' ) ptr

           | 'inline'

           | 'global'

referenced by:

annot_pvardecl:

         ::= annotations stor_type var+

referenced by:

pfunbody:

pfunbody ::= '{' pinstr* ( 'return' ( '(' ( var ( ',' var )* )? ')' | var ( ',' var )* )? ';' )? '}'

referenced by:

call_conv:

         ::= 'export'

           | 'inline'

referenced by:

pfundef:

pfundef  ::= annotations call_conv? 'fn' NID '(' ( annot_pvardecl ( ',' annot_pvardecl )* )? ')' ( '->' ( '(' ( annot_stor_type ( ',' annot_stor_type )* )? ')' | annot_stor_type ( ',' annot_stor_type )* )? )? pfunbody

referenced by:

pparam:

pparam   ::= 'param' ptype NID '=' pexpr ';'

referenced by:

pgexpr:

pgexpr   ::= pexpr

           | '{' pexpr ( ',' pexpr )* '}'

referenced by:

pglobal:

pglobal  ::= ptype NID '=' pgexpr ';'

referenced by:

pexec:

pexec    ::= 'exec' NID '(' ( range ( ',' range )* )? ')'

referenced by:

range:

range    ::= INT ':' INT

referenced by:

from:

from     ::= 'from' NID

referenced by:

prequire:

prequire ::= from? 'require' 'string'+

referenced by:

top:

top      ::= pfundef

           | pparam

           | pglobal

           | pexec

           | prequire

referenced by:

module_:

module_  ::= top* EOF

           | error

no references


  ... generated by RR - Railroad Diagram Generator
Clone this wiki locally