Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

式 Expression

<expression>

::= <if-expression>
| <match-expression>
| <logical-additional-expression>

<if-expression>

::= if <expression> <block-expression>
(else if <block-expression>)*
else <block-expression>

::= “match” “{” ( “=>” “,”)* ( “=>” | “_” “=>” )? “}”

<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>)? }

構造体のリテラル(初期化表現)。

型名の明示する必要がある。

また、すべてのメンバを正しく初期化することが必要ある。