1*99e0aae7SDavid ReesThis is the context-free grammar for Emboss. Terminal symbols are in `"quotes"` 2*99e0aae7SDavid Reesor are named in `CamelCase`; nonterminal symbols are named in `snake_case`. The 3*99e0aae7SDavid Reesterm `<empty>` to the right of the `->` indicates an empty production (a rule 4*99e0aae7SDavid Reeswhere the left-hand-side may be parsed from an empty string). 5*99e0aae7SDavid Rees 6*99e0aae7SDavid ReesThis listing is auto-generated from the grammar defined in `module_ir.py`. 7*99e0aae7SDavid Rees 8*99e0aae7SDavid ReesNote that, unlike in many languages, comments are included in the grammar. This 9*99e0aae7SDavid Reesis so that comments can be handled more easily by the autoformatter; comments 10*99e0aae7SDavid Reesare ignored by the compiler. This is distinct from *documentation*, which is 11*99e0aae7SDavid Reesincluded in the IR for use by documentation generators. 12*99e0aae7SDavid Rees 13*99e0aae7SDavid Rees```shell 14*99e0aae7SDavid Reesmodule -> comment-line* doc-line* import-line* 15*99e0aae7SDavid Rees attribute-line* type-definition* 16*99e0aae7SDavid Reestype-definition -> bits 17*99e0aae7SDavid Rees | enum 18*99e0aae7SDavid Rees | external 19*99e0aae7SDavid Rees | struct 20*99e0aae7SDavid Reesstruct -> "struct" type-name 21*99e0aae7SDavid Rees delimited-parameter-definition-list? 22*99e0aae7SDavid Rees ":" Comment? eol struct-body 23*99e0aae7SDavid Reesstruct-body -> Indent doc-line* attribute-line* 24*99e0aae7SDavid Rees type-definition* struct-field-block 25*99e0aae7SDavid Rees Dedent 26*99e0aae7SDavid Reesstruct-field-block -> <empty> 27*99e0aae7SDavid Rees | conditional-struct-field-block 28*99e0aae7SDavid Rees struct-field-block 29*99e0aae7SDavid Rees | unconditional-struct-field 30*99e0aae7SDavid Rees struct-field-block 31*99e0aae7SDavid Reesunconditional-struct-field -> anonymous-bits-field-definition 32*99e0aae7SDavid Rees | field 33*99e0aae7SDavid Rees | inline-bits-field-definition 34*99e0aae7SDavid Rees | inline-enum-field-definition 35*99e0aae7SDavid Rees | inline-struct-field-definition 36*99e0aae7SDavid Rees | virtual-field 37*99e0aae7SDavid Reesvirtual-field -> "let" snake-name "=" expression 38*99e0aae7SDavid Rees Comment? eol field-body? 39*99e0aae7SDavid Reesfield-body -> Indent doc-line* attribute-line* Dedent 40*99e0aae7SDavid Reesexpression -> choice-expression 41*99e0aae7SDavid Reeschoice-expression -> logical-expression 42*99e0aae7SDavid Rees | logical-expression "?" 43*99e0aae7SDavid Rees logical-expression ":" 44*99e0aae7SDavid Rees logical-expression 45*99e0aae7SDavid Reeslogical-expression -> and-expression 46*99e0aae7SDavid Rees | comparison-expression 47*99e0aae7SDavid Rees | or-expression 48*99e0aae7SDavid Reesor-expression -> comparison-expression 49*99e0aae7SDavid Rees or-expression-right+ 50*99e0aae7SDavid Reesor-expression-right -> or-operator comparison-expression 51*99e0aae7SDavid Reesor-operator -> "||" 52*99e0aae7SDavid Reescomparison-expression -> additive-expression 53*99e0aae7SDavid Rees | additive-expression 54*99e0aae7SDavid Rees equality-expression-right+ 55*99e0aae7SDavid Rees | additive-expression 56*99e0aae7SDavid Rees greater-expression-right-list 57*99e0aae7SDavid Rees | additive-expression inequality-operator 58*99e0aae7SDavid Rees additive-expression 59*99e0aae7SDavid Rees | additive-expression 60*99e0aae7SDavid Rees less-expression-right-list 61*99e0aae7SDavid Reesless-expression-right-list -> equality-expression-right* 62*99e0aae7SDavid Rees less-expression-right 63*99e0aae7SDavid Rees equality-or-less-expression-right* 64*99e0aae7SDavid Reesequality-or-less-expression-right -> equality-expression-right 65*99e0aae7SDavid Rees | less-expression-right 66*99e0aae7SDavid Reesless-expression-right -> less-operator additive-expression 67*99e0aae7SDavid Reesless-operator -> "<" 68*99e0aae7SDavid Rees | "<=" 69*99e0aae7SDavid Reesinequality-operator -> "!=" 70*99e0aae7SDavid Reesgreater-expression-right-list -> equality-expression-right* 71*99e0aae7SDavid Rees greater-expression-right 72*99e0aae7SDavid Rees equality-or-greater-expression-right* 73*99e0aae7SDavid Reesequality-or-greater-expression-right -> equality-expression-right 74*99e0aae7SDavid Rees | greater-expression-right 75*99e0aae7SDavid Reesgreater-expression-right -> greater-operator additive-expression 76*99e0aae7SDavid Reesgreater-operator -> ">" 77*99e0aae7SDavid Rees | ">=" 78*99e0aae7SDavid Reesequality-expression-right -> equality-operator additive-expression 79*99e0aae7SDavid Reesequality-operator -> "==" 80*99e0aae7SDavid Reesadditive-expression -> times-expression 81*99e0aae7SDavid Rees additive-expression-right* 82*99e0aae7SDavid Reesadditive-expression-right -> additive-operator times-expression 83*99e0aae7SDavid Reesadditive-operator -> "+" 84*99e0aae7SDavid Rees | "-" 85*99e0aae7SDavid Reestimes-expression -> negation-expression 86*99e0aae7SDavid Rees times-expression-right* 87*99e0aae7SDavid Reestimes-expression-right -> multiplicative-operator 88*99e0aae7SDavid Rees negation-expression 89*99e0aae7SDavid Reesmultiplicative-operator -> "*" 90*99e0aae7SDavid Reesnegation-expression -> additive-operator bottom-expression 91*99e0aae7SDavid Rees | bottom-expression 92*99e0aae7SDavid Reesbottom-expression -> "(" expression ")" 93*99e0aae7SDavid Rees | boolean-constant 94*99e0aae7SDavid Rees | builtin-reference 95*99e0aae7SDavid Rees | constant-reference 96*99e0aae7SDavid Rees | field-reference 97*99e0aae7SDavid Rees | function-name "(" argument-list ")" 98*99e0aae7SDavid Rees | numeric-constant 99*99e0aae7SDavid Reesnumeric-constant -> Number 100*99e0aae7SDavid Reesargument-list -> <empty> 101*99e0aae7SDavid Rees | expression comma-then-expression* 102*99e0aae7SDavid Reescomma-then-expression -> "," expression 103*99e0aae7SDavid Reesfunction-name -> "$lower_bound" 104*99e0aae7SDavid Rees | "$max" 105*99e0aae7SDavid Rees | "$present" 106*99e0aae7SDavid Rees | "$upper_bound" 107*99e0aae7SDavid Reesfield-reference -> snake-reference field-reference-tail* 108*99e0aae7SDavid Reesfield-reference-tail -> "." snake-reference 109*99e0aae7SDavid Reessnake-reference -> builtin-field-word 110*99e0aae7SDavid Rees | snake-word 111*99e0aae7SDavid Reessnake-word -> SnakeWord 112*99e0aae7SDavid Reesbuiltin-field-word -> "$max_size_in_bits" 113*99e0aae7SDavid Rees | "$max_size_in_bytes" 114*99e0aae7SDavid Rees | "$min_size_in_bits" 115*99e0aae7SDavid Rees | "$min_size_in_bytes" 116*99e0aae7SDavid Rees | "$size_in_bits" 117*99e0aae7SDavid Rees | "$size_in_bytes" 118*99e0aae7SDavid Reesconstant-reference -> constant-reference-tail 119*99e0aae7SDavid Rees | snake-reference "." 120*99e0aae7SDavid Rees constant-reference-tail 121*99e0aae7SDavid Reesconstant-reference-tail -> constant-word 122*99e0aae7SDavid Rees | type-word "." constant-reference-tail 123*99e0aae7SDavid Rees | type-word "." snake-reference 124*99e0aae7SDavid Reestype-word -> CamelWord 125*99e0aae7SDavid Reesconstant-word -> ShoutyWord 126*99e0aae7SDavid Reesbuiltin-reference -> builtin-word 127*99e0aae7SDavid Reesbuiltin-word -> "$is_statically_sized" 128*99e0aae7SDavid Rees | "$next" 129*99e0aae7SDavid Rees | "$static_size_in_bits" 130*99e0aae7SDavid Reesboolean-constant -> BooleanConstant 131*99e0aae7SDavid Reesand-expression -> comparison-expression 132*99e0aae7SDavid Rees and-expression-right+ 133*99e0aae7SDavid Reesand-expression-right -> and-operator comparison-expression 134*99e0aae7SDavid Reesand-operator -> "&&" 135*99e0aae7SDavid Reessnake-name -> snake-word 136*99e0aae7SDavid Reesinline-struct-field-definition -> field-location "struct" snake-name 137*99e0aae7SDavid Rees abbreviation? ":" Comment? eol 138*99e0aae7SDavid Rees struct-body 139*99e0aae7SDavid Reesabbreviation -> "(" snake-word ")" 140*99e0aae7SDavid Reesfield-location -> expression "[" "+" expression "]" 141*99e0aae7SDavid Reesinline-enum-field-definition -> field-location "enum" snake-name 142*99e0aae7SDavid Rees abbreviation? ":" Comment? eol 143*99e0aae7SDavid Rees enum-body 144*99e0aae7SDavid Reesenum-body -> Indent doc-line* attribute-line* 145*99e0aae7SDavid Rees enum-value+ Dedent 146*99e0aae7SDavid Reesenum-value -> constant-name "=" expression attribute* 147*99e0aae7SDavid Rees doc? Comment? eol enum-value-body? 148*99e0aae7SDavid Reesenum-value-body -> Indent doc-line* attribute-line* Dedent 149*99e0aae7SDavid Reesdoc -> Documentation 150*99e0aae7SDavid Reesattribute -> "[" attribute-context? "$default"? 151*99e0aae7SDavid Rees snake-word ":" attribute-value "]" 152*99e0aae7SDavid Reesattribute-value -> expression 153*99e0aae7SDavid Rees | string-constant 154*99e0aae7SDavid Reesstring-constant -> String 155*99e0aae7SDavid Reesattribute-context -> "(" snake-word ")" 156*99e0aae7SDavid Reesconstant-name -> constant-word 157*99e0aae7SDavid Reesinline-bits-field-definition -> field-location "bits" snake-name 158*99e0aae7SDavid Rees abbreviation? ":" Comment? eol 159*99e0aae7SDavid Rees bits-body 160*99e0aae7SDavid Reesbits-body -> Indent doc-line* attribute-line* 161*99e0aae7SDavid Rees type-definition* bits-field-block 162*99e0aae7SDavid Rees Dedent 163*99e0aae7SDavid Reesbits-field-block -> <empty> 164*99e0aae7SDavid Rees | conditional-bits-field-block 165*99e0aae7SDavid Rees bits-field-block 166*99e0aae7SDavid Rees | unconditional-bits-field 167*99e0aae7SDavid Rees bits-field-block 168*99e0aae7SDavid Reesunconditional-bits-field -> unconditional-anonymous-bits-field 169*99e0aae7SDavid Rees | virtual-field 170*99e0aae7SDavid Reesunconditional-anonymous-bits-field -> field 171*99e0aae7SDavid Rees | inline-bits-field-definition 172*99e0aae7SDavid Rees | inline-enum-field-definition 173*99e0aae7SDavid Reesconditional-bits-field-block -> "if" expression ":" Comment? eol Indent 174*99e0aae7SDavid Rees unconditional-bits-field+ Dedent 175*99e0aae7SDavid Reesfield -> field-location type snake-name 176*99e0aae7SDavid Rees abbreviation? attribute* doc? Comment? 177*99e0aae7SDavid Rees eol field-body? 178*99e0aae7SDavid Reestype -> type-reference delimited-argument-list? 179*99e0aae7SDavid Rees type-size-specifier? 180*99e0aae7SDavid Rees array-length-specifier* 181*99e0aae7SDavid Reesarray-length-specifier -> "[" "]" 182*99e0aae7SDavid Rees | "[" expression "]" 183*99e0aae7SDavid Reestype-size-specifier -> ":" numeric-constant 184*99e0aae7SDavid Reesdelimited-argument-list -> "(" argument-list ")" 185*99e0aae7SDavid Reestype-reference -> snake-word "." type-reference-tail 186*99e0aae7SDavid Rees | type-reference-tail 187*99e0aae7SDavid Reestype-reference-tail -> type-word 188*99e0aae7SDavid Rees | type-word "." type-reference-tail 189*99e0aae7SDavid Reesanonymous-bits-field-definition -> field-location "bits" ":" Comment? eol 190*99e0aae7SDavid Rees anonymous-bits-body 191*99e0aae7SDavid Reesanonymous-bits-body -> Indent attribute-line* 192*99e0aae7SDavid Rees anonymous-bits-field-block Dedent 193*99e0aae7SDavid Reesanonymous-bits-field-block -> <empty> 194*99e0aae7SDavid Rees | conditional-anonymous-bits-field-block 195*99e0aae7SDavid Rees anonymous-bits-field-block 196*99e0aae7SDavid Rees | unconditional-anonymous-bits-field 197*99e0aae7SDavid Rees anonymous-bits-field-block 198*99e0aae7SDavid Reesconditional-anonymous-bits-field-block -> "if" expression ":" Comment? eol Indent 199*99e0aae7SDavid Rees unconditional-anonymous-bits-field+ 200*99e0aae7SDavid Rees Dedent 201*99e0aae7SDavid Reesconditional-struct-field-block -> "if" expression ":" Comment? eol Indent 202*99e0aae7SDavid Rees unconditional-struct-field+ Dedent 203*99e0aae7SDavid Reeseol -> "\n" comment-line* 204*99e0aae7SDavid Reesdelimited-parameter-definition-list -> "(" parameter-definition-list ")" 205*99e0aae7SDavid Reesparameter-definition-list -> <empty> 206*99e0aae7SDavid Rees | parameter-definition 207*99e0aae7SDavid Rees parameter-definition-list-tail* 208*99e0aae7SDavid Reesparameter-definition-list-tail -> "," parameter-definition 209*99e0aae7SDavid Reesparameter-definition -> snake-name ":" type 210*99e0aae7SDavid Reestype-name -> type-word 211*99e0aae7SDavid Reesexternal -> "external" type-name ":" Comment? eol 212*99e0aae7SDavid Rees external-body 213*99e0aae7SDavid Reesexternal-body -> Indent doc-line* attribute-line* Dedent 214*99e0aae7SDavid Reesenum -> "enum" type-name ":" Comment? eol 215*99e0aae7SDavid Rees enum-body 216*99e0aae7SDavid Reesbits -> "bits" type-name 217*99e0aae7SDavid Rees delimited-parameter-definition-list? 218*99e0aae7SDavid Rees ":" Comment? eol bits-body 219*99e0aae7SDavid Reesattribute-line -> attribute Comment? eol 220*99e0aae7SDavid Reesimport-line -> "import" string-constant "as" 221*99e0aae7SDavid Rees snake-word Comment? eol 222*99e0aae7SDavid Reesdoc-line -> doc Comment? eol 223*99e0aae7SDavid Reescomment-line -> Comment? "\n" 224*99e0aae7SDavid Rees``` 225*99e0aae7SDavid Rees 226*99e0aae7SDavid ReesThe following productions are automatically generated to handle zero-or-more, 227*99e0aae7SDavid Reesone-or-more, and zero-or-one repeated lists (`foo*`, `foo+`, and `foo?` 228*99e0aae7SDavid Reesnonterminals) in LR(1). They are included for completeness, but may be ignored 229*99e0aae7SDavid Reesif you just want to understand the grammar. 230*99e0aae7SDavid Rees 231*99e0aae7SDavid Rees```shell 232*99e0aae7SDavid Rees"$default"? -> <empty> 233*99e0aae7SDavid Rees | "$default" 234*99e0aae7SDavid ReesComment? -> <empty> 235*99e0aae7SDavid Rees | Comment 236*99e0aae7SDavid Reesabbreviation? -> <empty> 237*99e0aae7SDavid Rees | abbreviation 238*99e0aae7SDavid Reesadditive-expression-right* -> <empty> 239*99e0aae7SDavid Rees | additive-expression-right 240*99e0aae7SDavid Rees additive-expression-right* 241*99e0aae7SDavid Reesand-expression-right* -> <empty> 242*99e0aae7SDavid Rees | and-expression-right 243*99e0aae7SDavid Rees and-expression-right* 244*99e0aae7SDavid Reesand-expression-right+ -> and-expression-right 245*99e0aae7SDavid Rees and-expression-right* 246*99e0aae7SDavid Reesarray-length-specifier* -> <empty> 247*99e0aae7SDavid Rees | array-length-specifier 248*99e0aae7SDavid Rees array-length-specifier* 249*99e0aae7SDavid Reesattribute* -> <empty> 250*99e0aae7SDavid Rees | attribute attribute* 251*99e0aae7SDavid Reesattribute-context? -> <empty> 252*99e0aae7SDavid Rees | attribute-context 253*99e0aae7SDavid Reesattribute-line* -> <empty> 254*99e0aae7SDavid Rees | attribute-line attribute-line* 255*99e0aae7SDavid Reescomma-then-expression* -> <empty> 256*99e0aae7SDavid Rees | comma-then-expression 257*99e0aae7SDavid Rees comma-then-expression* 258*99e0aae7SDavid Reescomment-line* -> <empty> 259*99e0aae7SDavid Rees | comment-line comment-line* 260*99e0aae7SDavid Reesdelimited-argument-list? -> <empty> 261*99e0aae7SDavid Rees | delimited-argument-list 262*99e0aae7SDavid Reesdelimited-parameter-definition-list? -> <empty> 263*99e0aae7SDavid Rees | delimited-parameter-definition-list 264*99e0aae7SDavid Reesdoc-line* -> <empty> 265*99e0aae7SDavid Rees | doc-line doc-line* 266*99e0aae7SDavid Reesdoc? -> <empty> 267*99e0aae7SDavid Rees | doc 268*99e0aae7SDavid Reesenum-value* -> <empty> 269*99e0aae7SDavid Rees | enum-value enum-value* 270*99e0aae7SDavid Reesenum-value+ -> enum-value enum-value* 271*99e0aae7SDavid Reesenum-value-body? -> <empty> 272*99e0aae7SDavid Rees | enum-value-body 273*99e0aae7SDavid Reesequality-expression-right* -> <empty> 274*99e0aae7SDavid Rees | equality-expression-right 275*99e0aae7SDavid Rees equality-expression-right* 276*99e0aae7SDavid Reesequality-expression-right+ -> equality-expression-right 277*99e0aae7SDavid Rees equality-expression-right* 278*99e0aae7SDavid Reesequality-or-greater-expression-right* -> <empty> 279*99e0aae7SDavid Rees | equality-or-greater-expression-right 280*99e0aae7SDavid Rees equality-or-greater-expression-right* 281*99e0aae7SDavid Reesequality-or-less-expression-right* -> <empty> 282*99e0aae7SDavid Rees | equality-or-less-expression-right 283*99e0aae7SDavid Rees equality-or-less-expression-right* 284*99e0aae7SDavid Reesfield-body? -> <empty> 285*99e0aae7SDavid Rees | field-body 286*99e0aae7SDavid Reesfield-reference-tail* -> <empty> 287*99e0aae7SDavid Rees | field-reference-tail 288*99e0aae7SDavid Rees field-reference-tail* 289*99e0aae7SDavid Reesimport-line* -> <empty> 290*99e0aae7SDavid Rees | import-line import-line* 291*99e0aae7SDavid Reesor-expression-right* -> <empty> 292*99e0aae7SDavid Rees | or-expression-right or-expression-right* 293*99e0aae7SDavid Reesor-expression-right+ -> or-expression-right or-expression-right* 294*99e0aae7SDavid Reesparameter-definition-list-tail* -> <empty> 295*99e0aae7SDavid Rees | parameter-definition-list-tail 296*99e0aae7SDavid Rees parameter-definition-list-tail* 297*99e0aae7SDavid Reestimes-expression-right* -> <empty> 298*99e0aae7SDavid Rees | times-expression-right 299*99e0aae7SDavid Rees times-expression-right* 300*99e0aae7SDavid Reestype-definition* -> <empty> 301*99e0aae7SDavid Rees | type-definition type-definition* 302*99e0aae7SDavid Reestype-size-specifier? -> <empty> 303*99e0aae7SDavid Rees | type-size-specifier 304*99e0aae7SDavid Reesunconditional-anonymous-bits-field* -> <empty> 305*99e0aae7SDavid Rees | unconditional-anonymous-bits-field 306*99e0aae7SDavid Rees unconditional-anonymous-bits-field* 307*99e0aae7SDavid Reesunconditional-anonymous-bits-field+ -> unconditional-anonymous-bits-field 308*99e0aae7SDavid Rees unconditional-anonymous-bits-field* 309*99e0aae7SDavid Reesunconditional-bits-field* -> <empty> 310*99e0aae7SDavid Rees | unconditional-bits-field 311*99e0aae7SDavid Rees unconditional-bits-field* 312*99e0aae7SDavid Reesunconditional-bits-field+ -> unconditional-bits-field 313*99e0aae7SDavid Rees unconditional-bits-field* 314*99e0aae7SDavid Reesunconditional-struct-field* -> <empty> 315*99e0aae7SDavid Rees | unconditional-struct-field 316*99e0aae7SDavid Rees unconditional-struct-field* 317*99e0aae7SDavid Reesunconditional-struct-field+ -> unconditional-struct-field 318*99e0aae7SDavid Rees unconditional-struct-field* 319*99e0aae7SDavid Rees``` 320*99e0aae7SDavid Rees 321*99e0aae7SDavid ReesThe following regexes are used to tokenize input into the corresponding symbols. 322*99e0aae7SDavid ReesNote that the `Indent`, `Dedent`, and `EndOfLine` symbols are generated using 323*99e0aae7SDavid Reesseparate logic. 324*99e0aae7SDavid Rees 325*99e0aae7SDavid ReesPattern | Symbol 326*99e0aae7SDavid Rees------------------------------------------ | ------------------------------ 327*99e0aae7SDavid Rees`\[` | `"["` 328*99e0aae7SDavid Rees`\]` | `"]"` 329*99e0aae7SDavid Rees`\(` | `"("` 330*99e0aae7SDavid Rees`\)` | `")"` 331*99e0aae7SDavid Rees`\:` | `":"` 332*99e0aae7SDavid Rees`\=` | `"="` 333*99e0aae7SDavid Rees`\+` | `"+"` 334*99e0aae7SDavid Rees`\-` | `"-"` 335*99e0aae7SDavid Rees`\*` | `"*"` 336*99e0aae7SDavid Rees`\.` | `"."` 337*99e0aae7SDavid Rees`\?` | `"?"` 338*99e0aae7SDavid Rees`\=\=` | `"=="` 339*99e0aae7SDavid Rees`\!\=` | `"!="` 340*99e0aae7SDavid Rees`\&\&` | `"&&"` 341*99e0aae7SDavid Rees`\|\|` | `"||"` 342*99e0aae7SDavid Rees`\<` | `"<"` 343*99e0aae7SDavid Rees`\>` | `">"` 344*99e0aae7SDavid Rees`\<\=` | `"<="` 345*99e0aae7SDavid Rees`\>\=` | `">="` 346*99e0aae7SDavid Rees`\,` | `","` 347*99e0aae7SDavid Rees`\$static_size_in_bits` | `"$static_size_in_bits"` 348*99e0aae7SDavid Rees`\$is_statically_sized` | `"$is_statically_sized"` 349*99e0aae7SDavid Rees`\$max` | `"$max"` 350*99e0aae7SDavid Rees`\$present` | `"$present"` 351*99e0aae7SDavid Rees`\$upper_bound` | `"$upper_bound"` 352*99e0aae7SDavid Rees`\$lower_bound` | `"$lower_bound"` 353*99e0aae7SDavid Rees`\$next` | `"$next"` 354*99e0aae7SDavid Rees`\$size_in_bits` | `"$size_in_bits"` 355*99e0aae7SDavid Rees`\$size_in_bytes` | `"$size_in_bytes"` 356*99e0aae7SDavid Rees`\$max_size_in_bits` | `"$max_size_in_bits"` 357*99e0aae7SDavid Rees`\$max_size_in_bytes` | `"$max_size_in_bytes"` 358*99e0aae7SDavid Rees`\$min_size_in_bits` | `"$min_size_in_bits"` 359*99e0aae7SDavid Rees`\$min_size_in_bytes` | `"$min_size_in_bytes"` 360*99e0aae7SDavid Rees`\$default` | `"$default"` 361*99e0aae7SDavid Rees`struct` | `"struct"` 362*99e0aae7SDavid Rees`bits` | `"bits"` 363*99e0aae7SDavid Rees`enum` | `"enum"` 364*99e0aae7SDavid Rees`external` | `"external"` 365*99e0aae7SDavid Rees`import` | `"import"` 366*99e0aae7SDavid Rees`as` | `"as"` 367*99e0aae7SDavid Rees`if` | `"if"` 368*99e0aae7SDavid Rees`let` | `"let"` 369*99e0aae7SDavid Rees`EmbossReserved[A-Za-z0-9]*` | `BadWord` 370*99e0aae7SDavid Rees`emboss_reserved[_a-z0-9]*` | `BadWord` 371*99e0aae7SDavid Rees`EMBOSS_RESERVED[_A-Z0-9]*` | `BadWord` 372*99e0aae7SDavid Rees`"(?:[^"\n\\]\|\\[n\\"])*"` | `String` 373*99e0aae7SDavid Rees`[0-9]+` | `Number` 374*99e0aae7SDavid Rees`[0-9]{1,3}(?:_[0-9]{3})*` | `Number` 375*99e0aae7SDavid Rees`0x[0-9a-fA-F]+` | `Number` 376*99e0aae7SDavid Rees`0x_?[0-9a-fA-F]{1,4}(?:_[0-9a-fA-F]{4})*` | `Number` 377*99e0aae7SDavid Rees`0x_?[0-9a-fA-F]{1,8}(?:_[0-9a-fA-F]{8})*` | `Number` 378*99e0aae7SDavid Rees`0b[01]+` | `Number` 379*99e0aae7SDavid Rees`0b_?[01]{1,4}(?:_[01]{4})*` | `Number` 380*99e0aae7SDavid Rees`0b_?[01]{1,8}(?:_[01]{8})*` | `Number` 381*99e0aae7SDavid Rees`true\|false` | `BooleanConstant` 382*99e0aae7SDavid Rees`[a-z][a-z_0-9]*` | `SnakeWord` 383*99e0aae7SDavid Rees`[A-Z][A-Z_0-9]*[A-Z_][A-Z_0-9]*` | `ShoutyWord` 384*99e0aae7SDavid Rees`[A-Z][a-zA-Z0-9]*[a-z][a-zA-Z0-9]*` | `CamelWord` 385*99e0aae7SDavid Rees`-- .*` | `Documentation` 386*99e0aae7SDavid Rees`--$` | `Documentation` 387*99e0aae7SDavid Rees`--.*` | `BadDocumentation` 388*99e0aae7SDavid Rees`\s+` | *no symbol emitted* 389*99e0aae7SDavid Rees`#.*` | `Comment` 390*99e0aae7SDavid Rees`[0-9][bxBX]?[0-9a-fA-F_]*` | `BadNumber` 391*99e0aae7SDavid Rees`[a-zA-Z_$0-9]+` | `BadWord` 392*99e0aae7SDavid Rees 393*99e0aae7SDavid ReesThe following 534 keywords are reserved, but not used, by Emboss. They may not 394*99e0aae7SDavid Reesbe used as field, type, or enum value names. 395*99e0aae7SDavid Rees 396*99e0aae7SDavid Rees`ATOMIC_BOOL_LOCK_FREE` `ATOMIC_CHAR16_T_LOCK_FREE` `ATOMIC_CHAR32_T_LOCK_FREE` 397*99e0aae7SDavid Rees`ATOMIC_CHAR_LOCK_FREE` `ATOMIC_FLAG_INIT` `ATOMIC_INT_LOCK_FREE` 398*99e0aae7SDavid Rees`ATOMIC_LLONG_LOCK_FREE` `ATOMIC_LONG_LOCK_FREE` `ATOMIC_POINTER_LOCK_FREE` 399*99e0aae7SDavid Rees`ATOMIC_SHORT_LOCK_FREE` `ATOMIC_VAR_INIT` `ATOMIC_WCHAR_T_LOCK_FREE` `BUFSIZ` 400*99e0aae7SDavid Rees`CGFloat` `CHAR_BIT` `CHAR_MAX` `CHAR_MIN` `CLOCKS_PER_SEC` `CMPLX` `CMPLXF` 401*99e0aae7SDavid Rees`CMPLXL` `DBL_DECIMAL_DIG` `DBL_DIG` `DBL_EPSILON` `DBL_HAS_SUBNORM` 402*99e0aae7SDavid Rees`DBL_MANT_DIG` `DBL_MAX` `DBL_MAX_10_EXP` `DBL_MAX_EXP` `DBL_MIN` 403*99e0aae7SDavid Rees`DBL_MIN_10_EXP` `DBL_MIN_EXP` `DBL_TRUE_MIN` `DECIMAL_DIG` `DOMAIN` `EDOM` 404*99e0aae7SDavid Rees`EILSEQ` `EOF` `ERANGE` `EXIT_FAILURE` `EXIT_SUCCESS` `FE_ALL_EXCEPT` 405*99e0aae7SDavid Rees`FE_DFL_ENV` `FE_DIVBYZERO` `FE_DOWNWARD` `FE_INEXACT` `FE_INVALID` 406*99e0aae7SDavid Rees`FE_OVERFLOW` `FE_TONEAREST` `FE_TOWARDZERO` `FE_UNDERFLOW` `FE_UPWARD` 407*99e0aae7SDavid Rees`FILENAME_MAX` `FLT_DECIMAL_DIG` `FLT_DIG` `FLT_EPSILON` `FLT_EVAL_METHOD` 408*99e0aae7SDavid Rees`FLT_HAS_SUBNORM` `FLT_MANT_DIG` `FLT_MAX` `FLT_MAX_10_EXP` `FLT_MAX_EXP` 409*99e0aae7SDavid Rees`FLT_MIN` `FLT_MIN_10_EXP` `FLT_MIN_EXP` `FLT_RADIX` `FLT_ROUNDS` `FLT_TRUE_MIN` 410*99e0aae7SDavid Rees`FOPEN_MAX` `FP_FAST_FMA` `FP_FAST_FMAF` `FP_FAST_FMAL` `FP_ILOGB0` 411*99e0aae7SDavid Rees`FP_ILOGBNAN` `FP_INFINITE` `FP_NAN` `FP_NORMAL` `FP_SUBNORMAL` `FP_ZERO` 412*99e0aae7SDavid Rees`False` `HUGE_VAL` `HUGE_VALF` `HUGE_VALL` `INFINITY` `INT16_C` `INT16_MAX` 413*99e0aae7SDavid Rees`INT16_MIN` `INT32_C` `INT32_MAX` `INT32_MIN` `INT64_C` `INT64_MAX` `INT64_MIN` 414*99e0aae7SDavid Rees`INT8_C` `INT8_MAX` `INT8_MIN` `INTMAX_C` `INTMAX_MAX` `INTMAX_MIN` `INTPTR_MAX` 415*99e0aae7SDavid Rees`INTPTR_MIN` `INT_FAST16_MAX` `INT_FAST16_MIN` `INT_FAST32_MAX` `INT_FAST32_MIN` 416*99e0aae7SDavid Rees`INT_FAST64_MAX` `INT_FAST64_MIN` `INT_FAST8_MAX` `INT_FAST8_MIN` 417*99e0aae7SDavid Rees`INT_LEAST16_MAX` `INT_LEAST16_MIN` `INT_LEAST32_MAX` `INT_LEAST32_MIN` 418*99e0aae7SDavid Rees`INT_LEAST64_MAX` `INT_LEAST64_MIN` `INT_LEAST8_MAX` `INT_LEAST8_MIN` `INT_MAX` 419*99e0aae7SDavid Rees`INT_MIN` `LC_ALL` `LC_COLLATE` `LC_CTYPE` `LC_MONETARY` `LC_NUMERIC` `LC_TIME` 420*99e0aae7SDavid Rees`LDBL_DECIMAL_DIG` `LDBL_DIG` `LDBL_EPSILON` `LDBL_HAS_SUBNORM` `LDBL_MANT_DIG` 421*99e0aae7SDavid Rees`LDBL_MAX` `LDBL_MAX_10_EXP` `LDBL_MAX_EXP` `LDBL_MIN` `LDBL_MIN_10_EXP` 422*99e0aae7SDavid Rees`LDBL_MIN_EXP` `LDBL_TRUE_MIN` `LLONG_MAX` `LLONG_MIN` `LONG_MAX` `LONG_MIN` 423*99e0aae7SDavid Rees`MATH_ERREXCEPT` `MATH_ERRNO` `MAXFLOAT` `MB_CUR_MAX` `MB_LEN_MAX` `M_1_PI` 424*99e0aae7SDavid Rees`M_2_PI` `M_2_SQRTPI` `M_3PI_4` `M_E` `M_INVLN2` `M_IVLN10` `M_LN10` `M_LN2` 425*99e0aae7SDavid Rees`M_LN2HI` `M_LN2LO` `M_LOG10E` `M_LOG2E` `M_LOG2_E` `M_PI` `M_PI_2` `M_PI_4` 426*99e0aae7SDavid Rees`M_SQRT1_2` `M_SQRT2` `M_SQRT3` `M_SQRTPI` `M_TWOPI` `NAN` `NDEBUG` `NSInteger` 427*99e0aae7SDavid Rees`NSNumber` `NSObject` `NULL` `None` `ONCE_FLAG_INIT` `OVERFLOW` `PLOSS` 428*99e0aae7SDavid Rees`PTRDIFF_MAX` `PTRDIFF_MIN` `RAND_MAX` `SCHAR_MAX` `SCHAR_MIN` `SEEK_CUR` 429*99e0aae7SDavid Rees`SEEK_END` `SEEK_SET` `SHRT_MAX` `SHRT_MIN` `SIGABRT` `SIGFPE` `SIGILL` `SIGINT` 430*99e0aae7SDavid Rees`SIGSEGV` `SIGTERM` `SIG_ATOMIC_MAX` `SIG_ATOMIC_MIN` `SIG_DFL` `SIG_ERR` 431*99e0aae7SDavid Rees`SIG_IGN` `SING` `SIZE_MAX` `Self` `TIME_UTC` `TLOSS` `TMP_MAX` `TMP_MAX_S` 432*99e0aae7SDavid Rees`TSS_DTOR_ITERATIONS` `True` `UCHAR_MAX` `UINT16_C` `UINT16_MAX` `UINT32_C` 433*99e0aae7SDavid Rees`UINT32_MAX` `UINT64_C` `UINT64_MAX` `UINT8_C` `UINT8_MAX` `UINTMAX_C` 434*99e0aae7SDavid Rees`UINTMAX_MAX` `UINTPTR_MAX` `UINT_FAST16_MAX` `UINT_FAST32_MAX` 435*99e0aae7SDavid Rees`UINT_FAST64_MAX` `UINT_FAST8_MAX` `UINT_LEAST16_MAX` `UINT_LEAST32_MAX` 436*99e0aae7SDavid Rees`UINT_LEAST64_MAX` `UINT_LEAST8_MAX` `UINT_MAX` `ULLONG_MAX` `ULONG_MAX` 437*99e0aae7SDavid Rees`UNDERFLOW` `USHRT_MAX` `WCHAR_MAX` `WCHAR_MIN` `WEOF` `WINT_MAX` `WINT_MIN` 438*99e0aae7SDavid Rees`abstract` `acos` `acosh` `after` `alignas` `alignof` `and` `and_eq` `andalso` 439*99e0aae7SDavid Rees`asin` `asinh` `asm` `assert` `atan` `atan2` `atanh` 440*99e0aae7SDavid Rees`atomic_compare_exchange_strong` `atomic_compare_exchange_strong_explicit` 441*99e0aae7SDavid Rees`atomic_compare_exchange_weak` `atomic_compare_exchange_weak_explicit` 442*99e0aae7SDavid Rees`atomic_exchange` `atomic_exchange_explicit` `atomic_fetch_add` 443*99e0aae7SDavid Rees`atomic_fetch_add_explicit` `atomic_fetch_and` `atomic_fetch_and_explicit` 444*99e0aae7SDavid Rees`atomic_fetch_or` `atomic_fetch_or_explicit` `atomic_fetch_sub` 445*99e0aae7SDavid Rees`atomic_fetch_sub_explicit` `atomic_fetch_xor` `atomic_fetch_xor_explicit` 446*99e0aae7SDavid Rees`atomic_init` `atomic_is_lock_free` `atomic_load` `atomic_load_explicit` 447*99e0aae7SDavid Rees`atomic_store` `atomic_store_explicit` `auto` `band` `become` `begin` `bitand` 448*99e0aae7SDavid Rees`bitor` `bnot` `bool` `boolean` `bor` `box` `break` `bsl` `bsr` `bxor` `byte` 449*99e0aae7SDavid Rees`carg` `case` `catch` `cbrt` `ceil` `chan` `char` `char16_t` `char32_t` `cimag` 450*99e0aae7SDavid Rees`class` `classdef` `compl` `complex` `concept` `cond` `conj` `const` 451*99e0aae7SDavid Rees`const_cast` `constexpr` `continue` `copysign` `cos` `cosh` `cproj` `crate` 452*99e0aae7SDavid Rees`creal` `decltype` `def` `default` `defer` `del` `delete` `div` `do` `double` 453*99e0aae7SDavid Rees`dynamic_cast` `elif` `else` `elseif` `end` `erf` `erfc` `errno` `except` `exec` 454*99e0aae7SDavid Rees`exp` `exp2` `explicit` `expm1` `export` `extends` `extern` `fabs` `fallthrough` 455*99e0aae7SDavid Rees`fdim` `final` `finally` `float` `floor` `fma` `fmax` `fmin` `fmod` `fn` `for` 456*99e0aae7SDavid Rees`fortran` `fpclassify` `frexp` `friend` `from` `fun` `func` `function` `global` 457*99e0aae7SDavid Rees`go` `goto` `hypot` `ilogb` `imaginary` `impl` `implementation` `implements` 458*99e0aae7SDavid Rees`in` `inline` `instanceof` `int` `interface` `is` `isfinite` `isgreater` 459*99e0aae7SDavid Rees`isgreaterequal` `isinf` `isless` `islessequal` `islessgreater` `isnan` 460*99e0aae7SDavid Rees`isnormal` `isunordered` `kill_dependency` `lambda` `ldexp` `lgamma` `llrint` 461*99e0aae7SDavid Rees`llround` `log` `log10` `log1p` `log2` `logb` `long` `loop` `lrint` `lround` 462*99e0aae7SDavid Rees`macro` `map` `match` `math_errhandling` `mod` `move` `mut` `mutable` 463*99e0aae7SDavid Rees`namespace` `native` `nearbyint` `new` `nextafter` `nexttoward` `noexcept` 464*99e0aae7SDavid Rees`nonatomic` `nonlocal` `noreturn` `not` `not_eq` `null` `nullptr` `of` 465*99e0aae7SDavid Rees`offsetof` `operator` `or` `or_eq` `orelse` `otherwise` `override` `package` 466*99e0aae7SDavid Rees`parfor` `pass` `persistent` `pow` `print` `priv` `private` `proc` `property` 467*99e0aae7SDavid Rees`protected` `protocol` `pub` `public` `pure` `raise` `range` `readonly` 468*99e0aae7SDavid Rees`readwrite` `receive` `ref` `register` `reinterpret_cast` `rem` `remainder` 469*99e0aae7SDavid Rees`remquo` `requires` `restrict` `retain` `rethrow` `return` `rint` `round` 470*99e0aae7SDavid Rees`scalbln` `scalbn` `select` `self` `setjmp` `short` `signbit` `signed` `sin` 471*99e0aae7SDavid Rees`sinh` `sizeof` `spmd` `sqrt` `static` `static_assert` `static_cast` `stderr` 472*99e0aae7SDavid Rees`stdin` `stdout` `strictfp` `strong` `super` `switch` `synchronized` `tan` 473*99e0aae7SDavid Rees`tanh` `template` `tgamma` `this` `thread_local` `throw` `throws` `trait` 474*99e0aae7SDavid Rees`transient` `trunc` `try` `type` `typedef` `typeid` `typename` `typeof` `union` 475*99e0aae7SDavid Rees`unsafe` `unsafe_unretained` `unsigned` `unsized` `use` `using` `va_arg` 476*99e0aae7SDavid Rees`va_copy` `va_end` `va_start` `var` `virtual` `void` `volatile` `wchar_t` `weak` 477