\r
variable_identifier\r
=\r
- ( IDENTIFIER | STRING )\r
+ ( IDENTIFIER | LITERAL )\r
{ variable_accessor }*\r
;\r
\r
\r
content = !(block_open | variable_open | comment_open) CHAR ;\r
\r
-STRING\r
+LITERAL\r
=\r
- SINGLE_QUOTE_STRING | DOUBLE_QUOTE_STRING\r
+ STRING_LITERAL | NUMBER_LITERAL\r
;\r
\r
-SINGLE_QUOTE_STRING\r
+INTEGER_LITERAL\r
=\r
- "'" { !"'" ?'.' }* "'"\r
+ /[\d_]*\d+/\r
;\r
\r
-DOUBLE_QUOTE_STRING\r
+NUMBER_LITERAL\r
=\r
- '"' { !'"' ?'.' }* '"'\r
+ whole:INTEGER_LITERAL\r
+ ["." fractional:INTEGER_LITERAL]\r
+ [ "e" exponent:[ ( "+" | "-" ) ] INTEGER_LITERAL ]\r
+ ;\r
+\r
+STRING_LITERAL\r
+ =\r
+ STRING_LITERAL_SINGLE_QUOTE | STRING_LITERAL_DOUBLE_QUOTE\r
+ ;\r
+\r
+STRING_LITERAL_SINGLE_QUOTE\r
+ =\r
+ "'" { !"'" /./ }* "'"\r
+ ;\r
+\r
+STRING_LITERAL_DOUBLE_QUOTE\r
+ =\r
+ '"' { !'"' /./ }* '"'\r
;\r
\r
IDENTIFIER\r
{% with key=val.test %}\r
-{{ dict_var['single']["double"].dot |test(first ,second, named=third)|filter | lastFilter}}\r
+{{ dict_var['single']["double"].dot |test("first" ,2_000, named=3.14)|filter | lastFilter}}\r
{%block single key=val param=value %}\r
test {{var}}\r
{%endblock%}\r