]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Converted more of parse tree to dictionary
authorKevin Brown <kevin@kevin-brown.com>
Fri, 8 May 2020 21:19:04 +0000 (17:19 -0400)
committerKevin <kevin@kevin-brown.com>
Sun, 10 May 2020 01:50:06 +0000 (21:50 -0400)
This should make it easier to detect what type of literal has been
parsed (we don't differentiate between single and double quoted
strings) as well as determining the specific accessors that are
called on a given variable.

Tuple and list literals have also been normalized to hold their
values in a key called `value` which is the same as other literals.
Implicit identifier tuples have not been switched yet because those
are not currently parses like tuple literals.

tatsu_grammar.txt

index d74e998f5e98759b915644be963c98a100a338d7..1f5da0f851523ffd11ca93f1c4f1ef011ce382cd 100644 (file)
@@ -96,8 +96,8 @@ variable_close
 \r
 variable_identifier\r
     =\r
-    ( LITERAL | IDENTIFIER )\r
-    { variable_accessor }*\r
+    variable:( LITERAL | IDENTIFIER )\r
+    accessors:{ variable_accessor }*\r
     ;\r
 \r
 variable_accessor\r
@@ -107,12 +107,20 @@ variable_accessor
 \r
 variable_accessor_brackets\r
     =\r
-    "[" variable_identifier "]"\r
+    accessor_type:`brackets`\r
+    "[" parameter:variable_identifier "]"\r
     ;\r
 \r
 variable_accessor_call\r
     =\r
-    "(" [variable_accessor_call_parameters] ")"\r
+    accessor_type:`call`\r
+    "(" parameters:[variable_accessor_call_parameters] ")"\r
+    ;\r
+\r
+variable_accessor_dot\r
+    =\r
+    accessor_type:`dot`\r
+    "." parameter:variable_identifier\r
     ;\r
 \r
 variable_accessor_call_parameters\r
@@ -139,7 +147,7 @@ variable_accessor_call_parameter_value_only
 \r
 variable_accessor_call_parameter_key\r
     =\r
-    {SP}* key:IDENTIFIER {SP}*\r
+    {SP}* @:IDENTIFIER {SP}*\r
     ;\r
 \r
 variable_accessor_call_parameter_value\r
@@ -173,11 +181,6 @@ variable_tests_logical_operator
     | "or"\r
     ;\r
 \r
-variable_accessor_dot\r
-    =\r
-    "." variable_identifier\r
-    ;\r
-\r
 variable_filter\r
     =\r
     {SP}* "|" {SP}* @:filter\r
@@ -206,14 +209,20 @@ LITERAL
 \r
 LIST_LITERAL\r
     =\r
-    "[" {SP}* list+:LITERAL {SP}* { "," {SP}* list+:LITERAL }* {SP}* "]"\r
-    | "[" {SP}* "]"\r
+    literal_type:`list`\r
+    (\r
+        | ( "[" {SP}* value+:LITERAL {SP}* { "," {SP}* value+:LITERAL }* {SP}* "]" )\r
+        | ( "[" {SP}* "]" )\r
+    )\r
     ;\r
 \r
 TUPLE_LITERAL\r
     =\r
-    "(" {SP}* tuple+:LITERAL {SP}* { "," {SP}* tuple+:LITERAL {SP}* } ")"\r
-    | "(" {SP}* tuple+:LITERAL {SP}* "," {SP}* ")"\r
+    literal_type:`tuple`\r
+    (\r
+        | ( "(" {SP}* value+:LITERAL {SP}* { "," {SP}* value+:LITERAL {SP}* } ")" )\r
+        | ( "(" {SP}* value+:LITERAL {SP}* "," {SP}* ")" )\r
+    )\r
     ;\r
 \r
 INTEGER_LITERAL\r
@@ -223,6 +232,7 @@ INTEGER_LITERAL
 \r
 NUMBER_LITERAL\r
     =\r
+    literal_type:`number`\r
     whole:INTEGER_LITERAL\r
     ["." fractional:INTEGER_LITERAL]\r
     [ "e" exponent:[ ( "+" | "-" ) ] INTEGER_LITERAL ]\r
@@ -235,17 +245,23 @@ STRING_LITERAL
 \r
 STRING_LITERAL_SINGLE_QUOTE\r
     =\r
-    "'" { !"'" /./ }* "'"\r
+    literal_type:`string`\r
+    "'" value:{ !"'" /./ }* "'"\r
     ;\r
 \r
 STRING_LITERAL_DOUBLE_QUOTE\r
     =\r
-    '"' { !'"' /./ }* '"'\r
+    literal_type:`string`\r
+    '"' value:{ !'"' /./ }* '"'\r
     ;\r
 \r
 BOOLEAN_LITERAL\r
     =\r
-    (("true" | "True") @:`True`) | (("false" | "False") @:`False`)\r
+    literal_type:`boolean`\r
+    (\r
+        | ( ("true" | "True") value:`True`)\r
+        | ( ("false" | "False") value:`False`)\r
+    )\r
     ;\r
 \r
 IDENTIFIER\r