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