X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/391c5a3467f5ac9a1e2b3aa9bd7f50792a80f159..d5fdd49e70b734b791eb907706f92da5775e2a8b:/src/sod-module.5 diff --git a/src/sod-module.5 b/src/sod-module.5 index 2a1123f..8e21b5d 100644 --- a/src/sod-module.5 +++ b/src/sod-module.5 @@ -106,7 +106,7 @@ are variables which vary over all nonterminal and terminal symbols, and the variables may also appear on the right-hand side in place of a nonterminal. Such a rule stands for a family of rules, -in each variable is replaced by +in which each variable is replaced by each possible simple nonterminal or terminal symbol. .PP The letter \*e denotes the empty nonterminal @@ -480,7 +480,7 @@ any character other than newline .B code .I identifier .B -.I identifier +.I item-name .RI [ constraints ] .B { .I c-fragment @@ -494,7 +494,15 @@ any character other than newline .br .I constraint ::= +.IR item-name \*+ +.br +.I item-name +::= +.I identifier +| +.B ( .IR identifier \*+ +.B ) . .SS Class definitions .I @@ -534,6 +542,10 @@ class-definition .| .I initializer-item .| +.I initarg-item +.| +.I fragment-item +.| .I message-item .| .I method-item @@ -560,29 +572,48 @@ class-definition .I slot-initializer ::= .I dotted-name -.B = -.I initializer +.RB [ = +.IR initializer ] .br .I initializer ::= +.I c-fragment +.br +.I initarg-item +::= +.< +.B initarg +.IR declaration-specifier \*+ +.IR list [ init-declarator ] +.B ; +.br +.I fragment-item +::= +.I fragment-kind .B { .I c-fragment .B } +.br +.I fragment-kind +::= +.B init | -.I c-fragment +.B teardown .br .I message-item ::= .< .IR declaration-specifier \*+ -.I simple-declarator +.IR keyword-declarator [ identifier ] +.< .RI [ method-body ] .br .I method-item ::= .< .IR declaration-specifier \*+ -.IR declarator [ dotted-name ] +.IR keyword-declarator [ dotted-name ] +.< .I method-body .br .I method-body @@ -652,6 +683,10 @@ class-definition | .I identifier .| +.B < +.I plain-type +.B > +.| .B ? .I s-expression .| @@ -691,24 +726,89 @@ class-definition | .B unsigned .| +.B bool +| +.B _Bool +.| +.B imaginary +| +.B _Imaginary +| +.B complex +| +.B _Complex +.| .I qualifier +.| +.I storage-specifier +.| +.I atomic-type .br .I qualifier ::= +.I atomic +| .B const | .B volatile | .B restrict .br +.I plain-type +::= +.IR declaration-specifier \*+ +.I abstract-declarator +.br +.I atomic-type +::= +.I +atomic +.B ( +.I plain-type +.B ) +.br +.I atomic +::= +.B atomic +| +.B _Atomic +.br +.I storage-specifier +::= +.I alignas +.B ( +.I c-fragment +.B ) +.br +.I alignas +::= +.B alignas +| +.B _Alignas +.br .I type-name ::= .I identifier .PP +The following +.IR type-name s +are defined in the built-in module. +.hP \*o +.B va_list +.hP \*o +.B size_t +.hP \*o +.B ptrdiff_t +.hP \*o +.B wchar_t +.PP Declaration specifiers may appear in any order. However, not all combinations are permitted. A declaration specifier must consist of -zero or more qualifiers, +zero or more +.IR qualifier s, +zero or more +.IR storage-specifier s, and one of the following, up to reordering. .hP \*o .I type-name @@ -759,36 +859,52 @@ and one of the following, up to reordering. .BR float , .BR double , .B long double +.hP \*o +.BR "float _Imaginary" , +.BR "double _Imaginary" , +.B "long double _Imaginary" +.hP \*o +.BR "float imaginary" , +.BR "double imaginary" , +.B "long double imaginary" +.hP \*o +.BR "float _Complex" , +.BR "double _Complex" , +.B "long double _Complex" +.hP \*o +.BR "float complex" , +.BR "double complex" , +.B "long double complex" .PP -.IR declarator [ k ] +.IR declarator [ k ", " a ] ::= .IR pointer \** -.IR primary-declarator [ k ] +.IR primary-declarator [ k ", " a ] .br -.IR primary-declarator [ k ] +.IR primary-declarator [ k ", " a ] ::= .I k .| .B ( -.IR primary-declarator [ k ] +.IR primary-declarator [ k ", " a ] .B ) .| -.IR primary-declarator [ k ] -.IR declarator-suffix +.IR primary-declarator [ k ", " a ] +.IR declarator-suffix [ a ] .br .I pointer ::= .B * .IR qualifier \** .br -.I declarator-suffix +.IR declarator-suffix [ a ] ::= .B [ .I c-fragment .B ] .| .B ( -.I argument-list +.I a .B ) .br .I argument-list @@ -805,19 +921,45 @@ and one of the following, up to reordering. .IR declaration-specifier \*+ .I argument-declarator .br +.I abstract-declarator +::= +.IR declarator "[\*e, " argument-list ] +.br .I argument-declarator ::= -.IR declarator [ identifier " | \*e]" +.IR declarator [ identifier " | \*e, " argument-list ] .br .I simple-declarator ::= -.IR declarator [ identifier ] +.IR declarator [ identifier ", " argument-list ] +.br +.I keyword-argument +::= +.I argument +.RB [ = +.IR c-fragment ] +.br +.I keyword-argument-list +::= +.I argument-list +.B ?\& +.I keyword-argument-list +.br +.I method-argument-list +::= +.I argument-list +| +.I keyword-argument-list .br .I dotted-name ::= .I identifier .B .\& .I identifier +.br +.IR keyword-declarator [ k ] +::= +.IR declarator [ k ", " method-argument-list ] . .\"-------------------------------------------------------------------------- .SH SEE ALSO