E. Formal Grammar - intel/device-modeling-language GitHub Wiki

dml
maybe_provisional maybe_device maybe_bitorder device_statements
maybe_provisional
provisional ident_list ;
| <empty>
maybe_device
device objident ;
| <empty>
maybe_bitorder
<empty>
| bitorder ident ;
device_statements
device_statements device_statement
| <empty>
device_statement
toplevel
| object
| toplevel_param
| method
| bad_shared_method
| istemplate ;
| toplevel_if
| error_stmt
| in_each
toplevel_param
param
toplevel_if
hashif ( expression ) { device_statements } toplevel_else
toplevel_else
<empty>
| hashelse { device_statements }
| hashelse toplevel_if
array_list
<empty>
| array_list [ arraydef ]
object
maybe_extension register objident array_list sizespec offsetspec maybe_istemplate object_spec
bitrangespec
@ bitrange
| <empty>
object
maybe_extension field objident array_list bitrangespec maybe_istemplate object_spec
bitrange
[ expression ]
| [ expression : expression ]
session
session
object
session_decl
session_decl
session named_cdecl ;
| session named_cdecl = initializer ;
| session ( cdecl_maybe_discarded_list_nonempty ) ;
| session ( cdecl_maybe_discarded_list_nonempty ) = initializer ;
object
saved_decl
saved_decl
saved named_cdecl ;
| saved named_cdecl = initializer ;
| saved ( cdecl_maybe_discarded_list_nonempty ) ;
| saved ( cdecl_maybe_discarded_list_nonempty ) = initializer ;
object
maybe_extension connect objident array_list maybe_istemplate object_spec
| maybe_extension interface objident array_list maybe_istemplate object_spec
| maybe_extension attribute objident array_list maybe_istemplate object_spec
| maybe_extension bank objident array_list maybe_istemplate object_spec
| maybe_extension event objident array_list maybe_istemplate object_spec
| maybe_extension group objident array_list maybe_istemplate object_spec
| maybe_extension port objident array_list maybe_istemplate object_spec
| maybe_extension implement objident array_list maybe_istemplate object_spec
| maybe_extension subdevice objident array_list maybe_istemplate object_spec
maybe_default
default
| <empty>
maybe_colon
:
| <empty>
method
method_qualifiers method objident method_params_typed maybe_colon maybe_default compound_statement
| method_qualifiers method objident method_params_typed ;
| inline method objident method_params_maybe_untyped maybe_colon maybe_default compound_statement
arraydef
ident_or_discard < expression
| ident_or_discard < ...
template_stmts
<empty>
| template_stmts template_stmt
template_stmt
object_statement_or_typedparam
| shared method_qualifiers method shared_method
| shared hook_decl
method_qualifiers
<empty>
| independent
| independent startup
| independent startup memoized
shared_method
ident method_params_typed ;
| ident method_params_typed maybe_colon default compound_statement
| ident method_params_typed maybe_colon compound_statement
toplevel
template objident maybe_istemplate { template_stmts }
| header %{ ... %}
| footer %{ ... %}
| _header %{ ... %}
| loggroup ident ;
| constant ident = expression ;
| extern named_cdecl ;
| typedef named_cdecl ;
| extern typedef named_cdecl ;
| import utf8_sconst ;
object_desc
composed_string_literal
| <empty>
maybe_extension
in
| <empty>
object_spec
object_desc ;
| object_desc { object_statements }
object_statements
object_statements object_statement
| <empty>
object_statement
object_statement_or_typedparam
| bad_shared_method
bad_shared_method
shared method_qualifiers method shared_method
toplevel
export expression as expression ;
object_statement_or_typedparam
object
| param
| method
| istemplate ;
| object_if
| error_stmt
| in_each
in_each
in each istemplate_list { object_statements }
hashif
#if
| if
hashelse
#else
| else
object_if
hashif ( expression ) { object_statements } object_else
object_else
<empty>
| hashelse { object_statements }
| hashelse object_if
param
param objident paramspec_maybe_empty
| param objident auto ;
| param objident : paramspec
| param objident : ctypedecl paramspec_maybe_empty
paramspec_maybe_empty
paramspec
| ;
paramspec
= expression ;
| default expression ;
method_outparams
<empty>
| -> ( cdecl_maybe_discarded_list )
method_params_maybe_untyped
( cdecl_maybe_discarded_or_ident_list ) method_outparams throws
method_params_typed
( cdecl_maybe_discarded_list ) method_outparams throws
throws
throws
| <empty>
maybe_istemplate
<empty>
| istemplate
istemplate
is istemplate_list
istemplate_list
objident
| ( objident_list )
sizespec
size expression
| <empty>
offsetspec
@ expression
| <empty>
cdecl_maybe_discarded_or_ident
named_cdecl_maybe_discarded
| inline ident
named_cdecl_maybe_discarded
cdecl_maybe_discarded
named_cdecl
named_cdecl_maybe_discarded
cdecl_maybe_discarded
basetype cdecl2
| const basetype cdecl2
basetype
typeident
| struct
| layout
| bitfields
| typeof
| sequence ( typeident )
| hook ( cdecl_maybe_discarded_list )
cdecl2
cdecl3
| const cdecl2
| * cdecl2
| vect cdecl2
cdecl3
ident_or_discard
| <empty>
| cdecl3 [ expression ]
| cdecl3 ( cdecl_maybe_discarded_list_opt_ellipsis )
| ( cdecl2 )
cdecl_maybe_discarded_list
<empty>
| cdecl_maybe_discarded_list_nonempty
cdecl_maybe_discarded_list_nonempty
cdecl_maybe_discarded
| cdecl_maybe_discarded_list_nonempty , cdecl_maybe_discarded
cdecl_maybe_discarded_list_opt_ellipsis
cdecl_maybe_discarded_list
| ...
| cdecl_maybe_discarded_list_nonempty , ...
cdecl_maybe_discarded_or_ident_list
<empty>
| cdecl_maybe_discarded_or_ident_list2
cdecl_maybe_discarded_or_ident_list2
cdecl_maybe_discarded_or_ident
| cdecl_maybe_discarded_or_ident_list2 , cdecl_maybe_discarded_or_ident
typeof
typeof expression
struct
struct { struct_decls }
struct_decls
struct_decls named_cdecl ;
| <empty>
layout_decl
layout utf8_sconst { layout_decls }
layout
layout_decl
layout_decls
layout_decls named_cdecl_maybe_discarded ;
| <empty>
bitfields
bitfields integer-literal { bitfields_decls }
bitfields_decls
bitfields_decls named_cdecl @ [ bitfield_range ] ;
bitfield_range
expression
| expression : expression
bitfields_decls
<empty>
ctypedecl
const_opt basetype ctypedecl_ptr
ctypedecl_ptr
stars ctypedecl_array
stars
<empty>
| * const stars
| * stars
ctypedecl_array
ctypedecl_simple
ctypedecl_simple
( ctypedecl_ptr )
| <empty>
const_opt
const
| <empty>
typeident
ident
| char
| double
| float
| int
| long
| short
| signed
| unsigned
| void
| register
assignop
expression += expression
| expression -= expression
| expression *= expression
| expression /= expression
| expression %= expression
| expression |= expression
| expression &= expression
| expression ^= expression
| expression <<= expression
| expression >>= expression
expression
expression ? expression : expression
| expression #? expression #: expression
| expression + expression
| expression - expression
| expression * expression
| expression / expression
| expression % expression
| expression << expression
| expression >> expression
| expression == expression
| expression != expression
| expression < expression
| expression > expression
| expression <= expression
| expression >= expression
| expression || expression
| expression && expression
| expression | expression
| expression ^ expression
| expression & expression
| cast ( expression , ctypedecl )
| sizeof expression
| - expression
| + expression
| ! expression
| ~ expression
| & expression
| * expression
| defined expression
| stringify ( expression )
| ++ expression
| -- expression
| expression ++
| expression --
| expression ( )
| expression ( single_initializer_list )
| expression ( single_initializer_list , )
| integer-literal
| hex-literal
| binary-literal
| char-literal
| float-literal
| string-literal
utf8_sconst
string-literal
expression
undefined
| objident_base
| default
| discard
| this
| expression . objident_base
| expression -> objident_base
| sizeoftype typeoparg
typeoparg
ctypedecl
| ( ctypedecl )
expression
new ctypedecl
| new ctypedecl [ expression ]
| ( expression )
| [ expression_list ]
| expression [ expression ]
| expression [ expression , identifier ]
| expression [ expression : expression endianflag ]
| each objident in ( expression )
endianflag
, identifier
| <empty>
expression_opt
expression
| <empty>
expression_list
<empty>
| expression
| expression , expression_list
expression_list_ntc_nonempty
expression
| expression , expression_list_ntc_nonempty
composed_string_literal
utf8_sconst
| composed_string_literal + utf8_sconst
bracketed_string_literal
composed_string_literal
| ( composed_string_literal )
single_initializer
expression
| { single_initializer_list }
| { single_initializer_list , }
initializer
single_initializer
| ( single_initializer , single_initializer_list )
single_initializer_list
single_initializer
| single_initializer_list , single_initializer
single_initializer
{ designated_struct_initializer_list }
| { designated_struct_initializer_list , }
| { designated_struct_initializer_list , ... }
designated_struct_initializer
. ident = single_initializer
designated_struct_initializer_list
designated_struct_initializer
| designated_struct_initializer_list , designated_struct_initializer
statement
statement_except_hashif
statement_except_hashif
compound_statement
| local ;
| assign_stmt ;
| assignop ;
assign_stmt
assign_chain
| tuple_literal = initializer
assign_chain
expression = assign_chain
| expression = initializer
tuple_literal
( expression , expression_list_ntc_nonempty )
statement_except_hashif
;
| expression ;
| if ( expression ) statement
| if ( expression ) statement else statement
statement
#if ( expression ) statement
| #if ( expression ) statement #else statement
statement_except_hashif
while ( expression ) statement
| do statement while ( expression ) ;
for_post
<empty>
| for_post_nonempty
for_post_nonempty
for_post_one
| for_post_nonempty , for_post_one
for_post_one
assign_stmt
| assignop
| expression
for_pre
local
| for_post
statement_except_hashif
for ( for_pre ; expression_opt ; for_post ) statement
| switch ( expression ) { stmt_or_case_list }
stmt_or_case
statement_except_hashif
| cond_case_statement
| case_statement
cond_case_statement
#if ( expression ) { stmt_or_case_list }
| #if ( expression ) { stmt_or_case_list } #else { stmt_or_case_list }
stmt_or_case_list
<empty>
| stmt_or_case_list stmt_or_case
statement_except_hashif
delete expression ;
| try statement catch statement
| after expression identifier : expression ;
ident_list
<empty>
| nonempty_ident_list
nonempty_ident_list
ident
| nonempty_ident_list , ident
ident_or_discard_list
<empty>
| nonempty_ident_or_discard_list
nonempty_ident_or_discard_list
ident_or_discard
| nonempty_ident_or_discard_list , ident_or_discard
statement_except_hashif
after expression -> ( ident_or_discard_list ) : expression ;
| after expression -> ident : expression ;
| after expression -> discard : expression ;
| after expression : expression ;
| after : expression ;
| assert expression ;
log_kind
identifier
| error
log_level
expression then expression
| expression
statement_except_hashif
log log_kind , log_level , expression : bracketed_string_literal log_args ;
| log log_kind , log_level : bracketed_string_literal log_args ;
| log log_kind : bracketed_string_literal log_args ;
hashselect
#select
statement_except_hashif
hashselect ident_or_discard in ( expression ) where ( expression ) statement hashelse statement
| foreach ident_or_discard in ( expression ) statement
| #foreach ident_or_discard in ( expression ) statement
case_statement
case expression :
| default :
statement_except_hashif
goto ident ;
| break ;
| continue ;
| throw ;
| return ;
| return initializer ;
| error_stmt
error_stmt
error ;
| error bracketed_string_literal ;
statement_except_hashif
warning_stmt
warning_stmt
_warning bracketed_string_literal ;
log_args
<empty>
| log_args , expression
compound_statement
{ statement_list }
statement_list
<empty>
| statement_list statement
local_keyword
local
static
session
local_decl_kind
local_keyword
| static
local
local_decl_kind cdecl_maybe_discarded
| saved cdecl_maybe_discarded
| local_decl_kind cdecl_maybe_discarded = initializer
| saved cdecl_maybe_discarded = initializer
| local_decl_kind ( cdecl_maybe_discarded_list_nonempty )
| saved ( cdecl_maybe_discarded_list_nonempty )
| local_decl_kind ( cdecl_maybe_discarded_list_nonempty ) = initializer
| saved ( cdecl_maybe_discarded_list_nonempty ) = initializer
simple_array_list
<empty>
| simple_array_list [ expression ]
hook_decl
hook ( cdecl_maybe_discarded_list ) ident simple_array_list ;
object
hook_decl
objident_list
objident
| objident_list , objident
objident_base
ident
| register
objident
objident_base
| discard
ident_or_discard
ident
| discard
discard
discard
ident
attribute
| bank
| bitorder
| connect
| constant
| device
| event
| field
| footer
| group
| header
| implement
| import
| interface
| loggroup
| method
| port
| size
| subdevice
| then
| throws
| _header
| provisional
| param
| saved
| independent
| startup
| memoized
| identifier
| class
| enum
| namespace
| private
| protected
| public
| restrict
| union
| using
| virtual
| volatile
| call
| auto
| static
| select
| async
| await
| with
⚠️ **GitHub.com Fallback** ⚠️