aboutsummaryrefslogtreecommitdiffhomepage
path: root/docs/c_grammar.md
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-24 12:29:17 +0900
committernsfisis <nsfisis@gmail.com>2026-01-24 12:32:39 +0900
commita5bff442c1f09792ff7291652103048688c3a128 (patch)
treed30d94201236471591b2af495f8ad41ae6a4cef5 /docs/c_grammar.md
parentc780cbb6acd0e0526f2d305138190392bdc8cdd7 (diff)
downloadducc-a5bff442c1f09792ff7291652103048688c3a128.tar.gz
ducc-a5bff442c1f09792ff7291652103048688c3a128.tar.zst
ducc-a5bff442c1f09792ff7291652103048688c3a128.zip
feat: implement array initializer
Diffstat (limited to 'docs/c_grammar.md')
-rw-r--r--docs/c_grammar.md19
1 files changed, 11 insertions, 8 deletions
diff --git a/docs/c_grammar.md b/docs/c_grammar.md
index 6529b2b..3bde591 100644
--- a/docs/c_grammar.md
+++ b/docs/c_grammar.md
@@ -9,8 +9,14 @@
* `A?`: Optional A
* `{ A }+`: 1 or more repetitions of A
* `{ A }*`: 0 or more repetitions of A
-* `{ A | S }`: Repetition of A separated by S
- * Note that trailing S is not allowed.
+* `{ A | S }+`: 1 or more repetitions of A separated by S
+ * Equivalent to `A { S A }*`
+* `{ A | S }*`: 0 or more repetitions of A separated by S
+ * Equivalent to `{ A | S }+?`
+* `{ A |? S }+`: 1 or more repetitions of A separated by S, allowing optional trailing S
+ * Equivalent to `A { S A }* S?`
+* `{ A |? S }*`: 1 or more repetitions of A separated by S, allowing optional trailing S
+ * Equivalent to `{ A |? S }+?`
* `( A )`: Grouping
* `# ...`: Additional constraints
@@ -222,11 +228,11 @@ member-declarator:
declarator? ':' constant-expr
enum-specifier:
- 'enum' attribute-specifier-sequence? identifier? enum-type-specifier? '{' enumerator-list ','? '}'
+ 'enum' attribute-specifier-sequence? identifier? enum-type-specifier? '{' enumerator-list '}'
'enum' identifier enum-type-specifier?
enumerator-list:
- { enumerator | ',' }+
+ { enumerator |? ',' }+
enumerator:
enumeration-constant attribute-specifier-sequence? ( '=' constant-expr )?
@@ -317,15 +323,12 @@ typedef-name:
identifier
braced-initializer:
- '{' ( initializer-list ','? )? '}'
+ '{' { designation? initializer |? ',' }* '}'
initializer:
assignment-expr
braced-initializer
-initializer-list:
- { designation? initializer | ',' }+
-
designation:
designator-list '='