式 Expression
<expression>
::= <if-expression>
| <match-expression>
| <logical-additional-expression>
<if-expression>
::= if <expression> <block-expression>
(else if <block-expression>)* else <block-expression>
<logical-or-expression>
::= <logical-and-expression>
| <logical-and-expression> || <logical-and-expression>
<logical-and-expression>
::= <relational-expression>
| <relational-expression> && <relational-expression>
<relational-expression>
::= <additive-expression>
| <additive-expression> < <additive-expression>
| <additive-expression> > <additive-expression>
| <additive-expression> <= <additive-expression>
| <additive-expression> >= <additive-expression>
| <additive-expression> == <additive-expression>
| <additive-expression> != <additive-expression>
<additive-expression>
::= <multiplicative-expression>
| <multiplicative-expression> + <multiplicative-expression>
| <multiplicative-expression> - <multiplicative-expression>
<multiplicative-expression>
::= <unary-expression>
| <unary-expression> * <unary-expression>
| <unary-expression> / <unary-expression>
| <unary-expression> % <unary-expression>
<unary-expression>
::= <postfix-expression>
| + <postfix-expression>
| - <postfix-expression>
| ! <postfix-expression>
<postfix-expression>
::= <primary-expression>
| <postfix-expression> <function-calling-argument-list>
| <postfix-expression> . <identifier>
| <postfix-expression> . <identifier> <function-calling-argument-list>
<function-calling-argument-list>
::= ( (<expression> ,)* <expression>? )
<primary-expression>
::= <qualified-identifier>
| <literal>
| ( <expression> )
| <block-expression>
<block-expression>
::= { <statement>* <expression> }
<literal>
::= <integer-literal>
| <floating-literal>
| <boolean-literal>
| <string-literal>
| <struct-literal>
| NONE
<integer-literal>
::= [0-9]+u?
| 0x[0-9a-fA-F]+
| 0b[01]+
<floating-literal>
::= [0-9]+.[0-9]+
<boolean-literal>
::= TRUE
| FALSE
<string-literal>
::= ".*"
文字列リテラルは " で囲んで表す。
行をまたぐことは出来ない。
特殊な文字にはエスケープシーケンスを使用する。
<struct-literal>
::= <\qualified-identifier> {
(<identifier> = <expression> ,)*
(<identifier> = <expression>)?
}
構造体のリテラル(初期化表現)。
型名の明示する必要がある。
また、すべてのメンバを正しく初期化することが必要ある。