\r
expression\r
=\r
- content | raw_block_expression | functional_block_expression | variable_expression | comment_expression\r
+ content | raw_block_expression | block_expression | variable_expression | comment_expression\r
;\r
\r
raw_block_expression\r
block_open "endraw" block_close\r
;\r
\r
-functional_block_expression\r
- =\r
- for_block_expression | block_expression\r
- ;\r
-\r
-for_block_expression\r
- =\r
- for_block_start {SP}* expressions {SP}* for_block_end\r
- ;\r
-\r
-for_block_start\r
- =\r
- block_open type:`blockstart` name:"for" {SP}* target:assignment_target {SP}* "in" {SP}* iter:variable_accessor_call_parameter_value [ {SP}* recursive:`True` "recursive" ] block_close\r
- ;\r
-\r
-for_block_end\r
- =\r
- block_open "endfor" block_close\r
- ;\r
-\r
-assignment_target\r
- =\r
- tuple+:block_parameter {"," {SP}* tuple+:block_parameter}+\r
- | block_parameter\r
- ;\r
-\r
block_expression\r
=\r
block_start {SP}* expressions {SP}* block_end\r
\r
block_start\r
=\r
- block_open type:`blockstart` !("end") name:IDENTIFIER parameters:[ { block_parameter }* ] block_close\r
+ block_open type:`blockstart` !("end") name:IDENTIFIER parameters:[ { assignment_target }* ] block_close\r
;\r
\r
block_end\r
{SP}* @:"%}"\r
;\r
\r
+assignment_target\r
+ =\r
+ tuple+:block_parameter {"," {SP}* tuple+:block_parameter}+\r
+ | block_parameter\r
+ ;\r
+\r
block_parameter\r
=\r
variable_accessor_call_parameter\r