diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-03-15 12:00:20 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-03-15 12:00:38 +0900 |
| commit | e2021e3eecadec49542ab9a97660ce390a65f85a (patch) | |
| tree | 9a1ccc481e8ef59c2b3ea0da1dd5ca5db74261e8 /docs | |
| parent | 7435692fec7b82284eac236714931faee8b825d6 (diff) | |
| download | ducc-e2021e3eecadec49542ab9a97660ce390a65f85a.tar.gz ducc-e2021e3eecadec49542ab9a97660ce390a65f85a.tar.zst ducc-e2021e3eecadec49542ab9a97660ce390a65f85a.zip | |
refactor: declaration parsing
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/c_grammar.md | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/docs/c_grammar.md b/docs/c_grammar.md index 807db1a..a41358c 100644 --- a/docs/c_grammar.md +++ b/docs/c_grammar.md @@ -375,49 +375,63 @@ balanced-token: ``` stmt: - labeled-stmt - unlabaled-stmt - -unlabaled-stmt: - expr-stmt - attribute-specifier-sequence? ( primary-block / jump-stmt ) - -primary-block: - compound-stmt - selection-stmt - iteration-stmt + { label }* unlabaled-stmt label: attribute-specifier-sequence? identifier ':' attribute-specifier-sequence? 'case' constant-expr ':' attribute-specifier-sequence? 'default' ':' -labeled-stmt: - label stmt +unlabaled-stmt: + attribute-specifier-sequence? compound-stmt + attribute-specifier-sequence? if-stmt + attribute-specifier-sequence? switch-stmt + attribute-specifier-sequence? while-stmt + attribute-specifier-sequence? do-while-stmt + attribute-specifier-sequence? for-stmt + attribute-specifier-sequence? goto-stmt + attribute-specifier-sequence? continue-stmt + attribute-specifier-sequence? break-stmt + attribute-specifier-sequence? return-stmt + attribute-specifier-sequence? expr-stmt compound-stmt: - '{' block-item-list? '}' + '{' { block-item }* '}' -block-item-list: - { block-item }+ +block-item: + declaration + unlabaled-stmt + label expr-stmt: - attribute-specifier-sequence? expr? ';' + expr? ';' -selection-stmt: +if-stmt: 'if' '(' expr ')' stmt ( 'else' stmt )? + +switch-stmt: 'switch' '(' expr ')' stmt -iteration-stmt: +while-stmt: 'while' '(' expr ')' stmt + +do-while-stmt: 'do' stmt 'while' '(' expr ')' ';' + +for-stmt: 'for' '(' expr? ';' expr? ';' expr? ')' stmt 'for' '(' declaration expr? ';' expr? ')' stmt -jump-stmt: +goto-stmt: 'goto' identifier ';' + +continue-stmt: 'continue' ';' + +break-stmt: 'break' ';' + +return-stmt: 'return' expr? ';' ``` |
