mirror of
https://github.com/ValKmjolnir/Nasal-Interpreter.git
synced 2026-07-23 11:28:45 +08:00
72 lines
2.2 KiB
BNF
72 lines
2.2 KiB
BNF
# <> must choose
|
|
# [] can choose
|
|
# {} can repeat 0 to infinite time(s)
|
|
# | or
|
|
# ::= is defined as
|
|
|
|
<number> ::= <token_number>
|
|
<string> ::= <token_string>
|
|
<id> ::= <token_identifier>
|
|
<dynamic_id> ::= <token_dynamic_id>
|
|
<scalar> ::=
|
|
|
|
<calculation_expr> ::=
|
|
<or_expr> {<and> <or_expr>}
|
|
<or_expr> ::=
|
|
<unary_expr> {<or> <unary_expr>}
|
|
| <unary_expr> {<or> <additive_expr>}
|
|
| <additive_expr> {<or> <unary_expr>}
|
|
| <additive_expr> {<or> <additive_expr>}
|
|
<unary_expr> ::=
|
|
<-> <additive_expr>
|
|
| <!> <additive_expr>
|
|
<additive_expr> ::=
|
|
<multive_expr> {<+> <multive_expr>}
|
|
| <multive_expr> {<-> <multive_expr>}
|
|
| <multive_expr> {<~> <multive_expr>}
|
|
<multive_expr> ::=
|
|
<scalar> {<*> <scalar>}
|
|
| <scalar> {</> <scalar>}
|
|
|
|
<loop_expr> ::=
|
|
<for_loop>
|
|
| <while_loop>
|
|
| <forindex_loop>
|
|
| <foreach_loop>
|
|
<for_loop> ::=
|
|
<for> <(> [<statement>] <;> [<scalar>] <;> <statement> <)> <statement> [<;>]
|
|
| <for> <(> [<statement>] <;> [<scalar>] <;> <statement> <)> <{> {<statement> <;>} <}>
|
|
<while_loop> ::=
|
|
<while> <(> <scalar> <)> <statement> [<;>]
|
|
| <while> <(> <scalar> <) <{> {<statement> <;>} <}>
|
|
<forindex_loop> ::=
|
|
<forindex> <(> [<statement] <;> [<scalar>] <)> <statement> [<;>]
|
|
| <forindex> <(> [<statement] <;> [<scalar>] <) <{> {<statement> <;>} <}>
|
|
<foreach_loop> ::=
|
|
<foreach> <(> [<statement] <;> [<scalar>] <)> <statement> [<;>]
|
|
| <foreach> <(> [<statement] <;> [<scalar>] <) <{> {<statement> <;>} <}>
|
|
|
|
<choose_expr> ::= <choose_expr_if> {<choose_expr_elsif>} [<choose_expr_else>]
|
|
<choose_expr_if> ::=
|
|
<if> <(> <scalar> <)> <statement> [<;>]
|
|
| <if> <(> <scalar> <)> <{> {<statement> <;>} <}>
|
|
<choose_expr_elsif> ::=
|
|
<elsif> <(> <scalar> <)> <statement> [<;>]
|
|
| <elsif> <(> <scalar> <)> <{> {<statement> <;>} <}>
|
|
| <else> <if> <(> <scalar> <)> <statement> [<;>]
|
|
| <else> <if> <(> <scalar> <)> <{> {<statement> <;>} <}>
|
|
<choose_expr_else> ::=
|
|
<else> <statement> [<;>]
|
|
| <else> {<statement> <;>} <}>
|
|
|
|
<continue_expr> ::= <continue>
|
|
<break_expr> ::= <break>
|
|
<return_expr> ::= <return> [<scalar>]
|
|
<statement> ::=
|
|
<definition>
|
|
| <assignment>
|
|
| <choose_expr>
|
|
| <loop_expr>
|
|
| <continue_expr>
|
|
| <break_expr>
|
|
| <return_expr> |