Waddle_Language/grammar/declarations/function_declarations.bnf

47 lines
1.7 KiB
BNF

<function_declaration> ::= <optional_whitespace>
<accessibility_modifier>
<function_keyword>
<optional_whitespace>
<identifier>
<optional_whitespace>
<function_signature>
<optional_whitespace>
"{"
<optional_whitespace>
<statement>*
<optional_whitespace>
"}"
<function_signature> ::= "(" <parameter_list>? ")"
<arrow_keyword> <return_type_list>
<error_type_list> ::= <error_type> ("," <error_type>)*
<error_type> ::= <identifier> ("/" <identifier>)?
<parameter_list> ::= <parameter_group>?
<parameter_group> ::= <optional_whitespace>
( <required_parameters>
| <required_parameters> "," <default_parameters>
| <default_parameters> )
<optional_whitespace>
<required_parameters> ::=
<optional_whitespace>
( <required_parameter>
| <required_parameter> "," <optional_whitespace> <required_parameters> )
<default_parameters> ::=
<optional_whitespace>
( <default_parameter>
| <default_parameter> "," <default_parameters> )
<required_parameter> ::= <parameter_type> <identifier>
<default_parameter> ::= <parameter_type> <identifier> ".default(" <literal> ")"
<lambda_declaration> ::= <function_keyword> <optional_whitespace> "(" <parameter_list>? ")"
<arrow_keyword> <optional_whitespace> "[" <optional_whitespace> <type> <optional_whitespace> "]"
"{" <optional_whitespace> <statement>* <optional_whitespace> "}"