\r
variable_expression\r
=\r
- variable_open type:`variable` name:conditional_expression variable_close\r
+ variable_open type:`variable` name:variable_expression_name variable_close\r
;\r
\r
variable_open\r
"}}"\r
;\r
\r
+variable_expression_name\r
+ =\r
+ | TUPLE_LITERAL\r
+ | conditional_expression\r
+ ;\r
+\r
variable_identifier\r
=\r
| variable_identifier_parentheses\r
| BOOLEAN_LITERAL\r
| DICTIONARY_LITERAL\r
| LIST_LITERAL\r
- | TUPLE_LITERAL\r
+ | EXPLICIT_TUPLE_LITERAL\r
;\r
\r
DICTIONARY_LITERAL\r
\r
TUPLE_LITERAL\r
=\r
- literal_type:`tuple`\r
- (\r
- | value:EXPLICIT_TUPLE_LITERAL\r
- | value:IMPLICIT_TUPLE_LITERAL\r
- | EMPTY_TUPLE_LITERAL\r
- )\r
+ | EXPLICIT_TUPLE_LITERAL\r
+ | IMPLICIT_TUPLE_LITERAL\r
+ | EMPTY_TUPLE_LITERAL\r
;\r
\r
EXPLICIT_TUPLE_LITERAL\r
=\r
- | ( "(" {SP}* @+:LITERAL {SP}* { "," {SP}* @+:LITERAL {SP}* }+ ")" )\r
- | ( "(" {SP}* @+:LITERAL {SP}* "," {SP}* ")" )\r
+ literal_type:`tuple`\r
+ "(" value:TUPLE_LITERAL_CONTENTS ")"\r
;\r
\r
IMPLICIT_TUPLE_LITERAL\r
=\r
- | ( @+:LITERAL {SP}* { "," {SP}* @+:LITERAL {SP}* }+ )\r
- | ( @+:LITERAL {SP}* "," {SP}* )\r
+ literal_type:`tuple`\r
+ value:TUPLE_LITERAL_CONTENTS\r
+ ;\r
+\r
+TUPLE_LITERAL_CONTENTS\r
+ =\r
+ | ( @+:variable_identifier {SP}* { "," {SP}* @+:variable_identifier {SP}* }+ )\r
+ | ( @+:variable_identifier {SP}* "," {SP}* )\r
;\r
\r
EMPTY_TUPLE_LITERAL\r
=\r
+ literal_type:`tuple`\r
"(" {SP}* ")"\r
;\r
\r
if 'variable' in ast:\r
return parse_variable(ast)\r
\r
+ if 'literal_type' in ast:\r
+ return parse_literal(ast)\r
+\r
if 'concatenate' in ast:\r
return parse_concatenate_expression(ast)\r
\r
ast['value'] = []\r
\r
items = [\r
- parse_literal(item) for item in ast['value']\r
+ parse_variable(item) for item in ast['value']\r
]\r
\r
return nodes.Tuple(\r