-
Notifications
You must be signed in to change notification settings - Fork 51
E. Formal Grammar
simicsmp edited this page Mar 13, 2026
·
8 revisions
- dml →
- maybe_provisional maybe_device maybe_bitorder device_statements
- maybe_provisional →
-
provisionalident_list;
| <empty> - maybe_device →
-
deviceobjident;
| <empty> - maybe_bitorder →
-
<empty>
|bitorderident; - 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
registerobjident array_list sizespec offsetspec maybe_istemplate object_spec - bitrangespec →
-
@bitrange
| <empty> - object →
-
maybe_extension
fieldobjident 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 →
-
savednamed_cdecl;
|savednamed_cdecl=initializer;
|saved(cdecl_maybe_discarded_list_nonempty);
|saved(cdecl_maybe_discarded_list_nonempty)=initializer; - object →
-
maybe_extension
connectobjident array_list maybe_istemplate object_spec
| maybe_extensioninterfaceobjident array_list maybe_istemplate object_spec
| maybe_extensionattributeobjident array_list maybe_istemplate object_spec
| maybe_extensionbankobjident array_list maybe_istemplate object_spec
| maybe_extensioneventobjident array_list maybe_istemplate object_spec
| maybe_extensiongroupobjident array_list maybe_istemplate object_spec
| maybe_extensionportobjident array_list maybe_istemplate object_spec
| maybe_extensionimplementobjident array_list maybe_istemplate object_spec
| maybe_extensionsubdeviceobjident array_list maybe_istemplate object_spec - maybe_default →
-
default
| <empty> - maybe_colon →
-
:
| <empty> - method →
-
method_qualifiers
methodobjident method_params_typed maybe_colon maybe_default compound_statement
| method_qualifiersmethodobjident method_params_typed;
|inlinemethodobjident 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
|sharedmethod_qualifiersmethodshared_method
|sharedhook_decl - method_qualifiers →
-
<empty>
|independent
|independentstartup
|independentstartupmemoized - shared_method →
-
ident method_params_typed
;
| ident method_params_typed maybe_colondefaultcompound_statement
| ident method_params_typed maybe_colon compound_statement - toplevel →
-
templateobjident maybe_istemplate{template_stmts}
|header%{ ... %}
|footer%{ ... %}
|_header%{ ... %}
|loggroupident;
|constantident=expression;
|externnamed_cdecl;
|typedefnamed_cdecl;
|externtypedefnamed_cdecl;
|importutf8_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 →
-
sharedmethod_qualifiersmethodshared_method - toplevel →
-
exportexpressionasexpression; - object_statement_or_typedparam →
-
object
| param
| method
| istemplate;
| object_if
| error_stmt
| in_each - in_each →
-
ineachistemplate_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 →
-
paramobjident paramspec_maybe_empty
|paramobjidentauto;
|paramobjident:paramspec
|paramobjident:ctypedecl paramspec_maybe_empty - paramspec_maybe_empty →
-
paramspec
|; - paramspec →
-
=expression;
|defaultexpression; - 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 →
-
isistemplate_list - istemplate_list →
-
objident
|(objident_list) - sizespec →
-
sizeexpression
| <empty> - offsetspec →
-
@expression
| <empty> - cdecl_maybe_discarded_or_ident →
-
named_cdecl_maybe_discarded
|inlineident - named_cdecl_maybe_discarded →
- cdecl_maybe_discarded
- named_cdecl →
- named_cdecl_maybe_discarded
- cdecl_maybe_discarded →
-
basetype cdecl2
|constbasetype cdecl2 - basetype →
-
typeident
| struct
| layout
| bitfields
| typeof
|sequence(typeident)
|hook(cdecl_maybe_discarded_list) - cdecl2 →
-
cdecl3
|constcdecl2
|*cdecl2
|vectcdecl2 - 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 →
-
typeofexpression - struct →
-
struct{struct_decls} - struct_decls →
-
struct_decls named_cdecl
;
| <empty> - layout_decl →
-
layoututf8_sconst{layout_decls} - layout →
- layout_decl
- layout_decls →
-
layout_decls named_cdecl_maybe_discarded
;
| <empty> - bitfields →
-
bitfieldsinteger-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>
|*conststars
|*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)
|sizeofexpression
|-expression
|+expression
|!expression
|~expression
|&expression
|*expression
|definedexpression
|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
|sizeoftypetypeoparg - typeoparg →
-
ctypedecl
|(ctypedecl) - expression →
-
newctypedecl
|newctypedecl[expression]
|(expression)
|[expression_list]
| expression[expression]
| expression[expression,identifier]
| expression[expression:expression endianflag]
|eachobjidentin(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)statementelsestatement - statement →
-
#if(expression)statement
|#if(expression)statement#elsestatement - statement_except_hashif →
-
while(expression)statement
|dostatementwhile(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 →
-
deleteexpression;
|trystatementcatchstatement
|afterexpression 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 →
-
afterexpression->(ident_or_discard_list):expression;
|afterexpression->ident:expression;
|afterexpression->discard:expression;
|afterexpression:expression;
|after:expression;
|assertexpression; - log_kind →
-
identifier
|error - log_level →
-
expression
thenexpression
| expression - statement_except_hashif →
-
loglog_kind,log_level,expression:bracketed_string_literal log_args;
|loglog_kind,log_level:bracketed_string_literal log_args;
|loglog_kind:bracketed_string_literal log_args; - hashselect →
-
#select - statement_except_hashif →
-
hashselect ident_or_discard
in(expression)where(expression)statement hashelse statement
|foreachident_or_discardin(expression)statement
|#foreachident_or_discardin(expression)statement - case_statement →
-
caseexpression:
|default: - statement_except_hashif →
-
gotoident;
|break;
|continue;
|throw;
|return;
|returninitializer;
| error_stmt - error_stmt →
-
error;
|errorbracketed_string_literal; - statement_except_hashif →
- warning_stmt
- warning_stmt →
-
_warningbracketed_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
|savedcdecl_maybe_discarded
| local_decl_kind cdecl_maybe_discarded=initializer
|savedcdecl_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