> For the complete documentation index, see [llms.txt](https://glados-2.gitbook.io/clight/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://glados-2.gitbook.io/clight/reference/ebnf-grammar.md).

# EBNF Grammar

[*`program`*](/clight/reference/program-structure.md):\
&#x20;   [*`external-declaration`*](/clight/reference/program-structure.md)

[*`external-declaration`*](/clight/reference/program-structure.md):\
&#x20;  [*`function-prototype`*](/clight/reference/functions/function-prototypes.md)\
&#x20;  [*`function-definition`*](/clight/reference/functions/function-definitions.md)\
&#x20;   [*`declaration`*](/clight/reference/declarations-and-types.md)

[*`function-prototype`*](/clight/reference/functions/function-prototypes.md)*:*\
&#x20;   [*`type-specifier`*](/clight/reference/declarations-and-types.md) [*`declarator`*](/clight/reference/functions/function-definitions.md) **`;`**

[*`function-definition`*](/clight/reference/functions/function-definitions.md):\
&#x20;   [*`type-specifier`*](/clight/reference/declarations-and-types.md) [*`declarator`*](/clight/reference/functions/function-definitions.md) [*`compound-statement`*](/clight/reference/functions/function-definitions.md)

[*`declarator`*](/clight/reference/functions/function-definitions.md)*:*\
&#x20;   [*`identifier`*](/clight/reference/declarations-and-types.md) [*`parameter-list`*](/clight/reference/functions/function-definitions.md)

[*`parameter-list`*](/clight/reference/functions/function-definitions.md)*:*\
&#x20;   **`(`** [*`parameter-declaration-list`*](/clight/reference/functions/function-definitions.md) opt **`)`**

[*`parameter-declaration-list`*](/clight/reference/functions/function-definitions.md):\
&#x20;   [*`parameter-declaration`*](/clight/reference/functions/function-definitions.md)\
&#x20;   [*`parameter-declaration`*](/clight/reference/functions/function-definitions.md) **,** [*`parameter-declaration-list`*](/clight/reference/functions/function-definitions.md)

[*`parameter-declaration`*](/clight/reference/functions/function-definitions.md):\
&#x20;   [*`type-specifier`*](/clight/reference/declarations-and-types.md) [*`identifier`*](/clight/reference/declarations-and-types.md)

[*`compound-statement`*](/clight/reference/functions/function-definitions.md):\
 **`{`** [*`statement-list`*](/clight/reference/functions/function-definitions.md)opt **`}`**

[*`statement-list`*](/clight/reference/functions/function-definitions.md)*:*\
&#x20;   [*`statement`*](/clight/reference/statements.md)\
&#x20;   [*`statement`*](/clight/reference/statements.md) [*`statement-list`*](/clight/reference/functions/function-definitions.md)

[*`statement`*](/clight/reference/statements.md):\
&#x20;   [*`declaration`*](broken://pages/gYKXwM3sbzb6KCROotj1)\
&#x20;   [*`expression-statement`*](/clight/reference/statements/expression-statements.md)\
&#x20;   [*`if-statement`*](/clight/reference/statements/conditional-statements.md)\
&#x20;   [*`iteration-statement`*](/clight/reference/statements/iterative-statements.md)

[*`declaration`*](/clight/reference/declarations-and-types.md):\
 [*`type-specifier`*](/clight/reference/declarations-and-types.md) [*`identifier`*](/clight/reference/declarations-and-types.md) **`;`**

[*`expression-statement`*](/clight/reference/statements/expression-statements.md):\
 [*`expression`*](/clight/reference/expressions-and-assignments/expressions.md)**`;`**

[*`expression`*](/clight/reference/expressions-and-assignments/expressions.md):\
&#x20;   [*`assignement-expression`*](/clight/reference/expressions-and-assignments/expressions.md#assignement-expressions)

[*`assignement-expression`*](/clight/reference/expressions-and-assignments/expressions.md#assignement-expressions):\
&#x20;   [*`binary-expression`*](/clight/reference/expressions-and-assignments/expressions.md#binary-expressions)\
&#x20;   [*`identifier`*](/clight/reference/declarations-and-types.md#identifiers) [*`assignment-operator`*](/clight/reference/expressions-and-assignments/assignement-operators.md) [*`assignement-expression`*](/clight/reference/expressions-and-assignments/expressions.md#assignement-expressions)\
&#x20;   [*`unary-expression`*](/clight/reference/expressions-and-assignments/expressions.md#unary-expressions)\
&#x20;   [*`function-call`*](/clight/reference/functions/function-calls.md)

[*`binary-expression`*](/clight/reference/expressions-and-assignments/expressions.md#binary-expressions):\
&#x20;   [*`number`*](/clight/reference/declarations-and-types.md#number) [*`binary-operator`*](/clight/reference/expressions-and-assignments/binary-operators.md) **(** [*`expression`*](/clight/reference/expressions-and-assignments/expressions.md) **|** [*`number`*](/clight/reference/declarations-and-types.md#number) **)**

[*`binary-operator`*](/clight/reference/expressions-and-assignments/binary-operators.md):  **`+`**  **`-`**  **`*`**  **`/`**  **`%`**  **`==`**  **`!=`**  **`<`**  **`<=`**  **`>`**  **`>=`**

[*`assignment-operator`*](/clight/reference/expressions-and-assignments/assignement-operators.md): **`=`** **`*=`** **`/=`** **`%=`** **`+=`** **`-=`**

[*`unary-expression`*](/clight/reference/expressions-and-assignments/expressions.md#unary-expressions):\
&#x20;   [*`identifier`*](/clight/reference/declarations-and-types.md#identifiers) [*`unary-operator`*](/clight/reference/expressions-and-assignments/unary-operators.md)&#x20;

[*`unary-operator`*](/clight/reference/expressions-and-assignments/unary-operators.md):  **`++`**  **`--`**

[*`if-statement`*](/clight/reference/statements/conditional-statements.md):\
 **`if (`** [*`expression`*](/clight/reference/expressions-and-assignments/expressions.md) **`)`** [*`statement`*](/clight/reference/statements.md)\
 **`if (`** [*`expression`*](/clight/reference/expressions-and-assignments/expressions.md) **`)`** [*`statement`*](/clight/reference/statements.md) **`else`** [*`statement`*](/clight/reference/statements.md)

[*`iteration-statement`*](/clight/reference/statements/iterative-statements.md):\
 **`while (`**[*`expression`*](/clight/reference/expressions-and-assignments/expressions.md)**`)`** [*`statement`*](/clight/reference/statements.md)\
&#x20;   **`for`** **`(`** [*`init-expression`*](/clight/reference/expressions-and-assignments/expressions.md)opt **`;`** [*`cond-expression`*](/clight/reference/expressions-and-assignments/expressions.md)opt **`;`** [*`loop-expression`*](/clight/reference/expressions-and-assignments/expressions.md)opt **`)`** [*`statement`*](/clight/reference/statements.md)

[*`function-call`*](/clight/reference/functions/function-calls.md):\
&#x20;   [*`identifier`*](/clight/reference/declarations-and-types.md) **`(`** [*`argument-list`*](/clight/reference/functions/function-calls.md) **`)`**

[*`argument-list`*](/clight/reference/functions/function-calls.md):\
&#x20;   [*`number`*](/clight/reference/declarations-and-types.md#number)\
&#x20;   [*`identifier`*](/clight/reference/declarations-and-types.md#identifiers)\
&#x20;   [*`function-call`*](/clight/reference/functions/function-calls.md)

[*`type-specifier`*](/clight/reference/declarations-and-types.md):  **`void`**  **`int`**  **`long`**     **`float`**

[*`identifier`*](/clight/reference/declarations-and-types.md):\
 *`[a-zA-Z_][a-zA-Z0-9_]*`*

[*`number`*](/clight/reference/declarations-and-types.md):\
 `[+|-]?[0-9]+`\
&#x20;   `[+|-]?[0-9]+.[0-9]+`
