Browse Source

ncd: Permit functions with have zero arguments.

Ambroz Bizjak 11 năm trước cách đây
mục cha
commit
2d242ebc89

+ 68 - 68
generated/NCDConfigParser_parse.c

@@ -201,29 +201,29 @@ static const YYMINORTYPE yyzerominor = { 0 };
 **  yy_default[]       Default action for each state.
 */
 static const YYACTIONTYPE yy_action[] = {
- /*     0 */   107,   51,   59,    3,  104,    9,  107,    7,   59,    3,
- /*    10 */    94,    9,  107,   58,   59,    3,   54,    9,   95,  180,
- /*    20 */     4,    5,   29,   30,  100,   54,    4,  117,   29,   30,
- /*    30 */    34,  128,    4,   54,   29,   30,  111,   57,  102,  112,
- /*    40 */    59,  113,  115,   43,  111,   65,  102,  112,   96,  113,
- /*    50 */   115,   43,   91,  111,    1,   60,  112,   32,  113,  115,
- /*    60 */    43,  101,  111,   54,    7,  112,   63,  113,  115,   44,
- /*    70 */   111,    8,  103,  112,  108,  113,  115,   43,  111,    7,
- /*    80 */   116,  112,  106,  113,  115,   44,  111,  110,   62,  112,
- /*    90 */     7,  113,  115,   43,  111,   61,   64,  112,  109,  113,
- /*   100 */   115,   45,  111,   66,    6,  112,   74,  113,  115,   46,
- /*   110 */    71,  111,   85,   52,  112,   53,  113,  115,   47,  111,
- /*   120 */     7,   92,  112,   35,  113,  115,   48,  111,   70,   59,
- /*   130 */   112,   76,  113,  115,   50,    7,   67,   72,   97,   98,
- /*   140 */    79,   73,   77,   23,   80,   20,   39,   20,   82,   56,
- /*   150 */    42,   69,   42,   20,   84,  130,   20,   90,   42,   89,
- /*   160 */    75,   42,   24,   20,  129,   20,   55,   78,   42,   81,
- /*   170 */    42,    7,   68,   20,   13,   20,   25,   83,   42,  124,
- /*   180 */    42,   20,   27,   20,   99,   88,   42,   93,   42,  105,
- /*   190 */   114,   28,   31,    2,  119,   33,  118,   10,   14,   49,
- /*   200 */    26,  120,   15,   11,   16,   86,   36,  121,   17,  181,
- /*   210 */    37,  122,   18,   87,   38,  123,   19,  181,   21,  181,
- /*   220 */    40,  125,  127,   41,  126,  181,   12,   22,
+ /*     0 */   107,   51,   59,    4,  104,    9,  107,    2,   59,    4,
+ /*    10 */    94,    9,  107,   58,   59,    4,   54,    9,   95,  180,
+ /*    20 */     5,    6,   29,   30,  100,   54,    5,  117,   29,   30,
+ /*    30 */    34,  128,    5,   54,   29,   30,  111,   57,  102,  112,
+ /*    40 */    59,  113,  115,   43,  111,   62,  102,  112,   96,  113,
+ /*    50 */   115,   43,    2,  111,   65,  102,  112,   91,  113,  115,
+ /*    60 */    43,  101,  111,   54,   60,  112,    7,  113,  115,   43,
+ /*    70 */   111,   61,    2,  112,   63,  113,  115,   44,  111,    8,
+ /*    80 */   103,  112,  108,  113,  115,   43,  111,    2,  116,  112,
+ /*    90 */   106,  113,  115,   44,  111,    2,   68,  112,    2,  113,
+ /*   100 */   115,   45,    1,  111,   73,   32,  112,  110,  113,  115,
+ /*   110 */    46,  111,   64,   52,  112,   53,  113,  115,   47,  111,
+ /*   120 */   109,   66,  112,   71,  113,  115,   48,  111,   70,   59,
+ /*   130 */   112,   35,  113,  115,   50,   39,   67,   72,   97,   98,
+ /*   140 */    76,   20,   77,   79,   80,   56,   42,   20,   82,   20,
+ /*   150 */   129,   69,   42,   90,   42,  130,   20,   84,   20,   89,
+ /*   160 */    75,   42,   78,   42,   20,   23,   24,   20,   81,   42,
+ /*   170 */    20,   83,   42,   20,  124,   42,   20,   88,   42,   74,
+ /*   180 */    93,   42,    2,   92,   55,   85,   13,   27,   25,   28,
+ /*   190 */   105,  118,   99,   31,  114,    3,  119,   33,   10,   14,
+ /*   200 */    49,   26,  120,   15,   11,   16,   86,   36,  121,   17,
+ /*   210 */   181,   37,  122,   18,   87,   38,  123,   19,  181,   21,
+ /*   220 */   181,   40,  125,  127,   41,  126,  181,   12,   22,
 };
 static const YYCODETYPE yy_lookahead[] = {
  /*     0 */     2,   29,    4,    5,    6,    7,    2,    7,    4,    5,
@@ -231,50 +231,50 @@ static const YYCODETYPE yy_lookahead[] = {
  /*    20 */    22,   21,   24,   25,    4,   44,   22,   23,   24,   25,
  /*    30 */    31,   32,   22,   44,   24,   25,   35,   36,   37,   38,
  /*    40 */     4,   40,   41,   42,   35,   36,   37,   38,   29,   40,
- /*    50 */    41,   42,   15,   35,    7,   37,   38,   10,   40,   41,
- /*    60 */    42,   35,   35,   44,    7,   38,   39,   40,   41,   42,
- /*    70 */    35,   14,   37,   38,   35,   40,   41,   42,   35,    7,
- /*    80 */     8,   38,   39,   40,   41,   42,   35,   45,   37,   38,
- /*    90 */     7,   40,   41,   42,   35,    4,   35,   38,   45,   40,
- /*   100 */    41,   42,   35,   43,   21,   38,    8,   40,   41,   42,
- /*   110 */    16,   35,   14,    1,   38,    3,   40,   41,   42,   35,
- /*   120 */     7,    8,   38,   33,   40,   41,   42,   35,   43,    4,
- /*   130 */    38,   43,   40,   41,   42,    7,   11,   12,   26,   27,
- /*   140 */    43,   13,   17,    2,   19,   30,   46,   30,   18,   34,
- /*   150 */    35,   34,   35,   30,   43,    0,   30,   34,   35,   43,
- /*   160 */    34,   35,    2,   30,   32,   30,    4,   34,   35,   34,
- /*   170 */    35,    7,    8,   30,    5,   30,    6,   34,   35,   34,
- /*   180 */    35,   30,    8,   30,    9,   34,   35,   34,   35,    6,
- /*   190 */     8,   20,   20,    7,    9,    8,   23,    7,    5,    4,
- /*   200 */     6,    9,    5,    7,    5,    4,    6,    9,    5,   48,
- /*   210 */     6,    9,    5,    8,    6,    6,    5,   48,    5,   48,
- /*   220 */     6,    9,    6,    6,    9,   48,    7,    5,
+ /*    50 */    41,   42,    7,   35,   36,   37,   38,   15,   40,   41,
+ /*    60 */    42,   35,   35,   44,   37,   38,   21,   40,   41,   42,
+ /*    70 */    35,    4,    7,   38,   39,   40,   41,   42,   35,   14,
+ /*    80 */    37,   38,   35,   40,   41,   42,   35,    7,    8,   38,
+ /*    90 */    39,   40,   41,   42,   35,    7,    8,   38,    7,   40,
+ /*   100 */    41,   42,    7,   35,   13,   10,   38,   45,   40,   41,
+ /*   110 */    42,   35,   35,    1,   38,    3,   40,   41,   42,   35,
+ /*   120 */    45,   43,   38,   16,   40,   41,   42,   35,   43,    4,
+ /*   130 */    38,   33,   40,   41,   42,   46,   11,   12,   26,   27,
+ /*   140 */    43,   30,   17,   43,   19,   34,   35,   30,   18,   30,
+ /*   150 */    32,   34,   35,   34,   35,    0,   30,   43,   30,   43,
+ /*   160 */    34,   35,   34,   35,   30,    2,    2,   30,   34,   35,
+ /*   170 */    30,   34,   35,   30,   34,   35,   30,   34,   35,    8,
+ /*   180 */    34,   35,    7,    8,    4,   14,    5,    8,    6,   20,
+ /*   190 */     6,   23,    9,   20,    8,    7,    9,    8,    7,    5,
+ /*   200 */     4,    6,    9,    5,    7,    5,    4,    6,    9,    5,
+ /*   210 */    48,    6,    9,    5,    8,    6,    6,    5,   48,    5,
+ /*   220 */    48,    6,    9,    6,    6,    9,   48,    7,    5,
 };
 #define YY_SHIFT_USE_DFLT (-3)
 #define YY_SHIFT_MAX 93
 static const short yy_shift_ofst[] = {
- /*     0 */   112,   10,   10,   -2,    4,   10,   10,   10,   10,   10,
+ /*     0 */   112,   10,   10,   10,   -2,    4,   10,   10,   10,   10,
  /*    10 */    10,   10,   10,  125,  125,  125,  125,  125,  125,  125,
- /*    20 */   125,  125,  125,  112,  112,  112,   37,   20,   36,   36,
- /*    30 */    91,   91,   36,   20,   94,   20,   20,   20,  130,   20,
- /*    40 */    20,   37,   47,    0,   57,   83,   72,  164,  128,   98,
- /*    50 */   113,  155,  141,  160,  162,  169,  170,  174,  175,  171,
- /*    60 */   183,  172,  182,  173,  186,  187,  185,  190,  193,  194,
- /*    70 */   192,  197,  196,  195,  199,  200,  198,  203,  204,  202,
- /*    80 */   207,  208,  211,  209,  212,  201,  205,  213,  214,  215,
- /*    90 */   216,  219,  222,  217,
+ /*    20 */   125,  125,  125,  112,  112,  112,   42,   20,   36,   36,
+ /*    30 */    67,   67,   36,   20,  107,   20,   20,   20,  130,   20,
+ /*    40 */    20,   42,   95,    0,   65,   45,   80,   88,   91,  171,
+ /*    50 */   175,  155,  163,  164,  180,  181,  182,  179,  183,  169,
+ /*    60 */   184,  173,  186,  168,  188,  189,  187,  191,  194,  195,
+ /*    70 */   193,  198,  197,  196,  200,  201,  199,  204,  205,  203,
+ /*    80 */   208,  209,  212,  210,  213,  202,  206,  214,  215,  216,
+ /*    90 */   217,  220,  223,  218,
 };
 #define YY_REDUCE_USE_DFLT (-31)
 #define YY_REDUCE_MAX 41
 static const short yy_reduce_ofst[] = {
- /*     0 */   -28,    1,    9,   18,   27,   35,   43,   51,   59,   67,
- /*    10 */    76,   84,   92,  115,  117,  123,  126,  133,  135,  143,
- /*    20 */   145,  151,  153,  -19,  -11,   19,   -1,  -30,   26,   39,
- /*    30 */    42,   53,   61,   60,   90,   85,   88,   97,  100,  111,
- /*    40 */   116,  132,
+ /*     0 */   -28,    1,    9,   18,   27,   35,   43,   51,   59,   68,
+ /*    10 */    76,   84,   92,  111,  117,  119,  126,  128,  134,  137,
+ /*    20 */   140,  143,  146,  -19,  -11,   19,   -1,  -30,   26,   47,
+ /*    30 */    62,   75,   77,   78,   98,   85,   97,  100,   89,  114,
+ /*    40 */   116,  118,
 };
 static const YYACTIONTYPE yy_default[] = {
- /*     0 */   131,  156,  156,  179,  179,  179,  179,  179,  179,  179,
+ /*     0 */   131,  156,  156,  156,  179,  179,  179,  179,  179,  179,
  /*    10 */   179,  179,  179,  179,  179,  179,  179,  179,  179,  179,
  /*    20 */   150,  179,  179,  131,  131,  131,  140,  175,  179,  179,
  /*    30 */   179,  179,  179,  175,  144,  175,  175,  175,  147,  175,
@@ -389,7 +389,7 @@ static const char *const yyTokenName[] = {
   "AT_SIGN",       "CARET",         "PROCESS",       "TEMPLATE",    
   "error",         "processes",     "statement",     "elif_maybe",  
   "elif",          "else_maybe",    "statements",    "dotted_name", 
-  "statement_args_maybe",  "list_contents",  "list",          "map_contents",
+  "list_contents_maybe",  "list_contents",  "list",          "map_contents",
   "map",           "invoc",         "value",         "name_maybe",  
   "process_or_template",  "name_list",     "interrupt_maybe",  "input",       
 };
@@ -404,8 +404,8 @@ static const char *const yyRuleName[] = {
  /*   2 */ "processes ::= INCLUDE STRING processes",
  /*   3 */ "processes ::= INCLUDE_GUARD STRING processes",
  /*   4 */ "processes ::= process_or_template NAME CURLY_OPEN statements CURLY_CLOSE processes",
- /*   5 */ "statement ::= dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON",
- /*   6 */ "statement ::= dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON",
+ /*   5 */ "statement ::= dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON",
+ /*   6 */ "statement ::= dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON",
  /*   7 */ "statement ::= IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON",
  /*   8 */ "statement ::= FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON",
  /*   9 */ "statement ::= FOREACH ROUND_OPEN value AS NAME COLON NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON",
@@ -425,8 +425,8 @@ static const char *const yyRuleName[] = {
  /*  23 */ "dotted_name ::= NAME DOT dotted_name",
  /*  24 */ "name_list ::= NAME",
  /*  25 */ "name_list ::= NAME DOT name_list",
- /*  26 */ "statement_args_maybe ::=",
- /*  27 */ "statement_args_maybe ::= list_contents",
+ /*  26 */ "list_contents_maybe ::=",
+ /*  27 */ "list_contents_maybe ::= list_contents",
  /*  28 */ "list_contents ::= value",
  /*  29 */ "list_contents ::= value COMMA list_contents",
  /*  30 */ "list ::= CURLY_OPEN CURLY_CLOSE",
@@ -435,7 +435,7 @@ static const char *const yyRuleName[] = {
  /*  33 */ "map_contents ::= value COLON value COMMA map_contents",
  /*  34 */ "map ::= BRACKET_OPEN BRACKET_CLOSE",
  /*  35 */ "map ::= BRACKET_OPEN map_contents BRACKET_CLOSE",
- /*  36 */ "invoc ::= value ROUND_OPEN list_contents ROUND_CLOSE",
+ /*  36 */ "invoc ::= value ROUND_OPEN list_contents_maybe ROUND_CLOSE",
  /*  37 */ "value ::= STRING",
  /*  38 */ "value ::= AT_SIGN dotted_name",
  /*  39 */ "value ::= CARET name_list",
@@ -599,7 +599,7 @@ static void yy_destructor(
 #line 600 "NCDConfigParser_parse.c"
 }
       break;
-    case 36: /* statement_args_maybe */
+    case 36: /* list_contents_maybe */
     case 37: /* list_contents */
     case 38: /* list */
     case 39: /* map_contents */
@@ -1079,7 +1079,7 @@ doneB:
 }
 #line 1081 "NCDConfigParser_parse.c"
         break;
-      case 5: /* statement ::= dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON */
+      case 5: /* statement ::= dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON */
 #line 254 "NCDConfigParser_parse.y"
 {
     if (!yymsp[-5].minor.yy49 || !yymsp[-3].minor.yy19.have) {
@@ -1107,7 +1107,7 @@ doneC:
 }
 #line 1109 "NCDConfigParser_parse.c"
         break;
-      case 6: /* statement ::= dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON */
+      case 6: /* statement ::= dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON */
 #line 276 "NCDConfigParser_parse.y"
 {
     if (!yymsp[-7].minor.yy49 || !yymsp[-5].minor.yy49 || !yymsp[-3].minor.yy19.have) {
@@ -1610,7 +1610,7 @@ doneKA:
 }
 #line 1612 "NCDConfigParser_parse.c"
         break;
-      case 26: /* statement_args_maybe ::= */
+      case 26: /* list_contents_maybe ::= */
 #line 673 "NCDConfigParser_parse.y"
 {
     yygotominor.yy19.have = 1;
@@ -1618,7 +1618,7 @@ doneKA:
 }
 #line 1620 "NCDConfigParser_parse.c"
         break;
-      case 27: /* statement_args_maybe ::= list_contents */
+      case 27: /* list_contents_maybe ::= list_contents */
       case 41: /* value ::= list */ yytestcase(yyruleno==41);
       case 42: /* value ::= map */ yytestcase(yyruleno==42);
       case 44: /* value ::= invoc */ yytestcase(yyruleno==44);
@@ -1780,7 +1780,7 @@ doneT:
 }
 #line 1782 "NCDConfigParser_parse.c"
         break;
-      case 36: /* invoc ::= value ROUND_OPEN list_contents ROUND_CLOSE */
+      case 36: /* invoc ::= value ROUND_OPEN list_contents_maybe ROUND_CLOSE */
 #line 798 "NCDConfigParser_parse.y"
 {
     if (!yymsp[-3].minor.yy19.have || !yymsp[-1].minor.yy19.have) {

+ 127 - 123
generated/NCDConfigParser_parse.out

@@ -17,18 +17,18 @@ State 0:
                      {default} reduce 1
 
 State 1:
-          statement ::= dotted_name ROUND_OPEN * statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= dotted_name ROUND_OPEN * list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           dotted_name ::= * NAME
           dotted_name ::= * NAME DOT dotted_name
-     (26) statement_args_maybe ::= *
-          statement_args_maybe ::= * list_contents
+     (26) list_contents_maybe ::= *
+          list_contents_maybe ::= * list_contents
           list_contents ::= * value
           list_contents ::= * value COMMA list_contents
           list ::= * CURLY_OPEN CURLY_CLOSE
           list ::= * CURLY_OPEN list_contents CURLY_CLOSE
           map ::= * BRACKET_OPEN BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -40,13 +40,13 @@ State 1:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
+                    CURLY_OPEN shift  4
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
+                  BRACKET_OPEN shift  5
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
-          statement_args_maybe shift  57
+           list_contents_maybe shift  57
                  list_contents shift  102
                           list shift  112
                            map shift  113
@@ -55,18 +55,18 @@ State 1:
                      {default} reduce 26
 
 State 2:
-          statement ::= dotted_name ARROW dotted_name ROUND_OPEN * statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
           dotted_name ::= * NAME
           dotted_name ::= * NAME DOT dotted_name
-     (26) statement_args_maybe ::= *
-          statement_args_maybe ::= * list_contents
+     (26) list_contents_maybe ::= *
+          list_contents_maybe ::= * list_contents
           list_contents ::= * value
           list_contents ::= * value COMMA list_contents
           list ::= * CURLY_OPEN CURLY_CLOSE
           list ::= * CURLY_OPEN list_contents CURLY_CLOSE
           map ::= * BRACKET_OPEN BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
+          invoc ::= value ROUND_OPEN * list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -78,13 +78,13 @@ State 2:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
+                    CURLY_OPEN shift  4
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
+                  BRACKET_OPEN shift  5
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
-          statement_args_maybe shift  65
+           list_contents_maybe shift  62
                  list_contents shift  102
                           list shift  112
                            map shift  113
@@ -93,17 +93,18 @@ State 2:
                      {default} reduce 26
 
 State 3:
+          statement ::= dotted_name ARROW dotted_name ROUND_OPEN * list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           dotted_name ::= * NAME
           dotted_name ::= * NAME DOT dotted_name
+     (26) list_contents_maybe ::= *
+          list_contents_maybe ::= * list_contents
           list_contents ::= * value
           list_contents ::= * value COMMA list_contents
           list ::= * CURLY_OPEN CURLY_CLOSE
-          list ::= CURLY_OPEN * CURLY_CLOSE
           list ::= * CURLY_OPEN list_contents CURLY_CLOSE
-          list ::= CURLY_OPEN * list_contents CURLY_CLOSE
           map ::= * BRACKET_OPEN BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -115,31 +116,32 @@ State 3:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
-                   CURLY_CLOSE shift  104
+                    CURLY_OPEN shift  4
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
+                  BRACKET_OPEN shift  5
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
-                 list_contents shift  60
+           list_contents_maybe shift  65
+                 list_contents shift  102
                           list shift  112
                            map shift  113
                          invoc shift  115
                          value shift  43
+                     {default} reduce 26
 
 State 4:
           dotted_name ::= * NAME
           dotted_name ::= * NAME DOT dotted_name
+          list_contents ::= * value
+          list_contents ::= * value COMMA list_contents
           list ::= * CURLY_OPEN CURLY_CLOSE
+          list ::= CURLY_OPEN * CURLY_CLOSE
           list ::= * CURLY_OPEN list_contents CURLY_CLOSE
-          map_contents ::= * value COLON value
-          map_contents ::= * value COLON value COMMA map_contents
+          list ::= CURLY_OPEN * list_contents CURLY_CLOSE
           map ::= * BRACKET_OPEN BRACKET_CLOSE
-          map ::= BRACKET_OPEN * BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          map ::= BRACKET_OPEN * map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -151,30 +153,31 @@ State 4:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
+                    CURLY_OPEN shift  4
+                   CURLY_CLOSE shift  104
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
-                 BRACKET_CLOSE shift  117
+                  BRACKET_OPEN shift  5
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
+                 list_contents shift  60
                           list shift  112
-                  map_contents shift  63
                            map shift  113
                          invoc shift  115
-                         value shift  44
+                         value shift  43
 
 State 5:
           dotted_name ::= * NAME
           dotted_name ::= * NAME DOT dotted_name
-          list_contents ::= * value
-          list_contents ::= * value COMMA list_contents
-          list_contents ::= value COMMA * list_contents
           list ::= * CURLY_OPEN CURLY_CLOSE
           list ::= * CURLY_OPEN list_contents CURLY_CLOSE
+          map_contents ::= * value COLON value
+          map_contents ::= * value COLON value COMMA map_contents
           map ::= * BRACKET_OPEN BRACKET_CLOSE
+          map ::= BRACKET_OPEN * BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
+          map ::= BRACKET_OPEN * map_contents BRACKET_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -186,29 +189,30 @@ State 5:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
+                    CURLY_OPEN shift  4
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
+                  BRACKET_OPEN shift  5
+                 BRACKET_CLOSE shift  117
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
-                 list_contents shift  103
                           list shift  112
+                  map_contents shift  63
                            map shift  113
                          invoc shift  115
-                         value shift  43
+                         value shift  44
 
 State 6:
           dotted_name ::= * NAME
           dotted_name ::= * NAME DOT dotted_name
+          list_contents ::= * value
+          list_contents ::= * value COMMA list_contents
+          list_contents ::= value COMMA * list_contents
           list ::= * CURLY_OPEN CURLY_CLOSE
           list ::= * CURLY_OPEN list_contents CURLY_CLOSE
-          map_contents ::= * value COLON value
-          map_contents ::= * value COLON value COMMA map_contents
-          map_contents ::= value COLON value COMMA * map_contents
           map ::= * BRACKET_OPEN BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -220,29 +224,29 @@ State 6:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
+                    CURLY_OPEN shift  4
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
+                  BRACKET_OPEN shift  5
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
+                 list_contents shift  103
                           list shift  112
-                  map_contents shift  106
                            map shift  113
                          invoc shift  115
-                         value shift  44
+                         value shift  43
 
 State 7:
           dotted_name ::= * NAME
           dotted_name ::= * NAME DOT dotted_name
-          list_contents ::= * value
-          list_contents ::= * value COMMA list_contents
           list ::= * CURLY_OPEN CURLY_CLOSE
           list ::= * CURLY_OPEN list_contents CURLY_CLOSE
+          map_contents ::= * value COLON value
+          map_contents ::= * value COLON value COMMA map_contents
+          map_contents ::= value COLON value COMMA * map_contents
           map ::= * BRACKET_OPEN BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
-          invoc ::= value ROUND_OPEN * list_contents ROUND_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -254,17 +258,17 @@ State 7:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
+                    CURLY_OPEN shift  4
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
+                  BRACKET_OPEN shift  5
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
-                 list_contents shift  62
                           list shift  112
+                  map_contents shift  106
                            map shift  113
                          invoc shift  115
-                         value shift  43
+                         value shift  44
 
 State 8:
           dotted_name ::= * NAME
@@ -275,7 +279,7 @@ State 8:
           map_contents ::= value COLON * value COMMA map_contents
           map ::= * BRACKET_OPEN BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -287,9 +291,9 @@ State 8:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
+                    CURLY_OPEN shift  4
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
+                  BRACKET_OPEN shift  5
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
@@ -305,7 +309,7 @@ State 9:
           list ::= * CURLY_OPEN list_contents CURLY_CLOSE
           map ::= * BRACKET_OPEN BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -318,9 +322,9 @@ State 9:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
+                    CURLY_OPEN shift  4
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
+                  BRACKET_OPEN shift  5
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
@@ -337,7 +341,7 @@ State 10:
           list ::= * CURLY_OPEN list_contents CURLY_CLOSE
           map ::= * BRACKET_OPEN BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -349,9 +353,9 @@ State 10:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
+                    CURLY_OPEN shift  4
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
+                  BRACKET_OPEN shift  5
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
@@ -369,7 +373,7 @@ State 11:
           list ::= * CURLY_OPEN list_contents CURLY_CLOSE
           map ::= * BRACKET_OPEN BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -381,9 +385,9 @@ State 11:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
+                    CURLY_OPEN shift  4
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
+                  BRACKET_OPEN shift  5
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
@@ -401,7 +405,7 @@ State 12:
           list ::= * CURLY_OPEN list_contents CURLY_CLOSE
           map ::= * BRACKET_OPEN BRACKET_CLOSE
           map ::= * BRACKET_OPEN map_contents BRACKET_CLOSE
-          invoc ::= * value ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= * value ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= * STRING
           value ::= * AT_SIGN dotted_name
           value ::= * CARET name_list
@@ -413,9 +417,9 @@ State 12:
 
                         STRING shift  107
                           NAME shift  59
-                    CURLY_OPEN shift  3
+                    CURLY_OPEN shift  4
                     ROUND_OPEN shift  9
-                  BRACKET_OPEN shift  4
+                  BRACKET_OPEN shift  5
                        AT_SIGN shift  29
                          CARET shift  30
                    dotted_name shift  111
@@ -426,8 +430,8 @@ State 12:
 
 State 13:
           processes ::= process_or_template NAME CURLY_OPEN * statements CURLY_CLOSE processes
-          statement ::= * dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
-          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           statement ::= * IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME COLON NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
@@ -448,8 +452,8 @@ State 13:
                    dotted_name shift  42
 
 State 14:
-          statement ::= * dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
-          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           statement ::= * IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
           statement ::= IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN * statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
@@ -471,8 +475,8 @@ State 14:
                    dotted_name shift  42
 
 State 15:
-          statement ::= * dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
-          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           statement ::= * IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME COLON NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
@@ -494,8 +498,8 @@ State 15:
                    dotted_name shift  42
 
 State 16:
-          statement ::= * dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
-          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           statement ::= * IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
           statement ::= FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN * statements CURLY_CLOSE name_maybe SEMICOLON
@@ -517,8 +521,8 @@ State 16:
                    dotted_name shift  42
 
 State 17:
-          statement ::= * dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
-          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           statement ::= * IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME COLON NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
@@ -540,8 +544,8 @@ State 17:
                    dotted_name shift  42
 
 State 18:
-          statement ::= * dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
-          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           statement ::= * IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME COLON NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
@@ -563,8 +567,8 @@ State 18:
                    dotted_name shift  42
 
 State 19:
-          statement ::= * dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
-          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           statement ::= * IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME COLON NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
@@ -586,8 +590,8 @@ State 19:
                    dotted_name shift  42
 
 State 20:
-          statement ::= * dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
-          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           statement ::= * IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME COLON NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
@@ -611,8 +615,8 @@ State 20:
                      {default} reduce 20
 
 State 21:
-          statement ::= * dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
-          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           statement ::= * IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME COLON NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
@@ -634,8 +638,8 @@ State 21:
                    dotted_name shift  42
 
 State 22:
-          statement ::= * dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
-          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= * dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           statement ::= * IF ROUND_OPEN value ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
           statement ::= * FOREACH ROUND_OPEN value AS NAME COLON NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
@@ -721,7 +725,7 @@ State 26:
                      {default} reduce 10
 
 State 27:
-          statement ::= dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE * name_maybe SEMICOLON
+          statement ::= dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE * name_maybe SEMICOLON
      (45) name_maybe ::= *
           name_maybe ::= * NAME
 
@@ -762,7 +766,7 @@ State 31:
                      name_list shift  109
 
 State 32:
-          statement ::= dotted_name ARROW * dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= dotted_name ARROW * dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
           dotted_name ::= * NAME
           dotted_name ::= * NAME DOT dotted_name
 
@@ -770,7 +774,7 @@ State 32:
                    dotted_name shift  64
 
 State 33:
-          statement ::= dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE * name_maybe SEMICOLON
+          statement ::= dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE * name_maybe SEMICOLON
      (45) name_maybe ::= *
           name_maybe ::= * NAME
 
@@ -852,8 +856,8 @@ State 41:
                      {default} reduce 12
 
 State 42:
-          statement ::= dotted_name * ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
-          statement ::= dotted_name * ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= dotted_name * ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= dotted_name * ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
 
                     ROUND_OPEN shift  1
                          ARROW shift  32
@@ -861,49 +865,49 @@ State 42:
 State 43:
      (28) list_contents ::= value *
           list_contents ::= value * COMMA list_contents
-          invoc ::= value * ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= value * ROUND_OPEN list_contents_maybe ROUND_CLOSE
 
-                    ROUND_OPEN shift  7
-                         COMMA shift  5
+                    ROUND_OPEN shift  2
+                         COMMA shift  6
                      {default} reduce 28
 
 State 44:
           map_contents ::= value * COLON value
           map_contents ::= value * COLON value COMMA map_contents
-          invoc ::= value * ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= value * ROUND_OPEN list_contents_maybe ROUND_CLOSE
 
-                    ROUND_OPEN shift  7
+                    ROUND_OPEN shift  2
                          COLON shift  8
 
 State 45:
      (32) map_contents ::= value COLON value *
           map_contents ::= value COLON value * COMMA map_contents
-          invoc ::= value * ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= value * ROUND_OPEN list_contents_maybe ROUND_CLOSE
 
-                    ROUND_OPEN shift  7
-                         COMMA shift  6
+                    ROUND_OPEN shift  2
+                         COMMA shift  7
                      {default} reduce 32
 
 State 46:
-          invoc ::= value * ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= value * ROUND_OPEN list_contents_maybe ROUND_CLOSE
           value ::= ROUND_OPEN value * ROUND_CLOSE
 
-                    ROUND_OPEN shift  7
+                    ROUND_OPEN shift  2
                    ROUND_CLOSE shift  116
 
 State 47:
           statement ::= IF ROUND_OPEN value * ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif_maybe else_maybe name_maybe SEMICOLON
-          invoc ::= value * ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= value * ROUND_OPEN list_contents_maybe ROUND_CLOSE
 
-                    ROUND_OPEN shift  7
+                    ROUND_OPEN shift  2
                    ROUND_CLOSE shift  68
 
 State 48:
           statement ::= FOREACH ROUND_OPEN value * AS NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
           statement ::= FOREACH ROUND_OPEN value * AS NAME COLON NAME ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE name_maybe SEMICOLON
-          invoc ::= value * ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= value * ROUND_OPEN list_contents_maybe ROUND_CLOSE
 
-                    ROUND_OPEN shift  7
+                    ROUND_OPEN shift  2
                             AS shift  73
 
 State 49:
@@ -916,9 +920,9 @@ State 49:
 State 50:
           elif ::= ELIF ROUND_OPEN value * ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE
           elif ::= ELIF ROUND_OPEN value * ROUND_CLOSE CURLY_OPEN statements CURLY_CLOSE elif
-          invoc ::= value * ROUND_OPEN list_contents ROUND_CLOSE
+          invoc ::= value * ROUND_OPEN list_contents_maybe ROUND_CLOSE
 
-                    ROUND_OPEN shift  7
+                    ROUND_OPEN shift  2
                    ROUND_CLOSE shift  92
 
 State 51:
@@ -952,12 +956,12 @@ State 56:
                    CURLY_CLOSE shift  25
 
 State 57:
-          statement ::= dotted_name ROUND_OPEN statement_args_maybe * ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= dotted_name ROUND_OPEN list_contents_maybe * ROUND_CLOSE name_maybe SEMICOLON
 
                    ROUND_CLOSE shift  27
 
 State 58:
-          statement ::= dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe * SEMICOLON
+          statement ::= dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe * SEMICOLON
 
                      SEMICOLON shift  99
 
@@ -981,7 +985,7 @@ State 61:
                      {default} reduce 24
 
 State 62:
-          invoc ::= value ROUND_OPEN list_contents * ROUND_CLOSE
+          invoc ::= value ROUND_OPEN list_contents_maybe * ROUND_CLOSE
 
                    ROUND_CLOSE shift  114
 
@@ -991,17 +995,17 @@ State 63:
                  BRACKET_CLOSE shift  118
 
 State 64:
-          statement ::= dotted_name ARROW dotted_name * ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= dotted_name ARROW dotted_name * ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON
 
-                    ROUND_OPEN shift  2
+                    ROUND_OPEN shift  3
 
 State 65:
-          statement ::= dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe * ROUND_CLOSE name_maybe SEMICOLON
+          statement ::= dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe * ROUND_CLOSE name_maybe SEMICOLON
 
                    ROUND_CLOSE shift  33
 
 State 66:
-          statement ::= dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe * SEMICOLON
+          statement ::= dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe * SEMICOLON
 
                      SEMICOLON shift  119
 
@@ -1171,7 +1175,7 @@ State 98:
                      {default} reduce 48
 
 State 99:
-      (5) statement ::= dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON *
+      (5) statement ::= dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON *
 
                      {default} reduce 5
 
@@ -1186,7 +1190,7 @@ State 101:
                      {default} reduce 23
 
 State 102:
-     (27) statement_args_maybe ::= list_contents *
+     (27) list_contents_maybe ::= list_contents *
 
                      {default} reduce 27
 
@@ -1246,7 +1250,7 @@ State 113:
                      {default} reduce 42
 
 State 114:
-     (36) invoc ::= value ROUND_OPEN list_contents ROUND_CLOSE *
+     (36) invoc ::= value ROUND_OPEN list_contents_maybe ROUND_CLOSE *
 
                      {default} reduce 36
 
@@ -1271,7 +1275,7 @@ State 118:
                      {default} reduce 35
 
 State 119:
-      (6) statement ::= dotted_name ARROW dotted_name ROUND_OPEN statement_args_maybe ROUND_CLOSE name_maybe SEMICOLON *
+      (6) statement ::= dotted_name ARROW dotted_name ROUND_OPEN list_contents_maybe ROUND_CLOSE name_maybe SEMICOLON *
 
                      {default} reduce 6
 
@@ -1363,7 +1367,7 @@ Symbols:
    33: else_maybe: <lambda> ELSE
    34: statements: NAME IF FOREACH BLOCK TOKEN_DO
    35: dotted_name: NAME
-   36: statement_args_maybe: <lambda> STRING NAME CURLY_OPEN ROUND_OPEN BRACKET_OPEN AT_SIGN CARET
+   36: list_contents_maybe: <lambda> STRING NAME CURLY_OPEN ROUND_OPEN BRACKET_OPEN AT_SIGN CARET
    37: list_contents: STRING NAME CURLY_OPEN ROUND_OPEN BRACKET_OPEN AT_SIGN CARET
    38: list: CURLY_OPEN
    39: map_contents: STRING NAME CURLY_OPEN ROUND_OPEN BRACKET_OPEN AT_SIGN CARET

+ 7 - 7
generated/NCDConfigParser_parse.y

@@ -95,7 +95,7 @@ static void free_value (struct value o) { if (o.have) NCDValue_Free(&o.v); }
 %type else_maybe { struct block }
 %type statements { struct block }
 %type dotted_name { char * }
-%type statement_args_maybe { struct value }
+%type list_contents_maybe { struct value }
 %type list_contents { struct value }
 %type list { struct value }
 %type map_contents { struct value }
@@ -115,7 +115,7 @@ static void free_value (struct value o) { if (o.have) NCDValue_Free(&o.v); }
 %destructor else_maybe { free_block($$); }
 %destructor statements { free_block($$); }
 %destructor dotted_name { free($$); }
-%destructor statement_args_maybe { free_value($$); }
+%destructor list_contents_maybe { free_value($$); }
 %destructor list_contents { free_value($$); }
 %destructor list { free_value($$); }
 %destructor map_contents { free_value($$); }
@@ -251,7 +251,7 @@ doneB:
     free_program(N);
 }
 
-statement(R) ::= dotted_name(A) ROUND_OPEN statement_args_maybe(B) ROUND_CLOSE name_maybe(C) SEMICOLON. {
+statement(R) ::= dotted_name(A) ROUND_OPEN list_contents_maybe(B) ROUND_CLOSE name_maybe(C) SEMICOLON. {
     if (!A || !B.have) {
         goto failC0;
     }
@@ -273,7 +273,7 @@ doneC:
     free(C);
 }
 
-statement(R) ::= dotted_name(M) ARROW dotted_name(A) ROUND_OPEN statement_args_maybe(B) ROUND_CLOSE name_maybe(C) SEMICOLON. {
+statement(R) ::= dotted_name(M) ARROW dotted_name(A) ROUND_OPEN list_contents_maybe(B) ROUND_CLOSE name_maybe(C) SEMICOLON. {
     if (!M || !A || !B.have) {
         goto failD0;
     }
@@ -670,12 +670,12 @@ doneKA:
     free_value(N);
 }
 
-statement_args_maybe(R) ::= . {
+list_contents_maybe(R) ::= . {
     R.have = 1;
     NCDValue_InitList(&R.v);
 }
 
-statement_args_maybe(R) ::= list_contents(A). {
+list_contents_maybe(R) ::= list_contents(A). {
     R = A;
 }
 
@@ -795,7 +795,7 @@ map(R) ::= BRACKET_OPEN map_contents(A) BRACKET_CLOSE. {
     R = A;
 }
 
-invoc(R) ::= value(F) ROUND_OPEN list_contents(A) ROUND_CLOSE. {
+invoc(R) ::= value(F) ROUND_OPEN list_contents_maybe(A) ROUND_CLOSE. {
     if (!F.have || !A.have) {
         goto failQ0;
     }

+ 7 - 7
ncd/NCDConfigParser_parse.y

@@ -95,7 +95,7 @@ static void free_value (struct value o) { if (o.have) NCDValue_Free(&o.v); }
 %type else_maybe { struct block }
 %type statements { struct block }
 %type dotted_name { char * }
-%type statement_args_maybe { struct value }
+%type list_contents_maybe { struct value }
 %type list_contents { struct value }
 %type list { struct value }
 %type map_contents { struct value }
@@ -115,7 +115,7 @@ static void free_value (struct value o) { if (o.have) NCDValue_Free(&o.v); }
 %destructor else_maybe { free_block($$); }
 %destructor statements { free_block($$); }
 %destructor dotted_name { free($$); }
-%destructor statement_args_maybe { free_value($$); }
+%destructor list_contents_maybe { free_value($$); }
 %destructor list_contents { free_value($$); }
 %destructor list { free_value($$); }
 %destructor map_contents { free_value($$); }
@@ -251,7 +251,7 @@ doneB:
     free_program(N);
 }
 
-statement(R) ::= dotted_name(A) ROUND_OPEN statement_args_maybe(B) ROUND_CLOSE name_maybe(C) SEMICOLON. {
+statement(R) ::= dotted_name(A) ROUND_OPEN list_contents_maybe(B) ROUND_CLOSE name_maybe(C) SEMICOLON. {
     if (!A || !B.have) {
         goto failC0;
     }
@@ -273,7 +273,7 @@ doneC:
     free(C);
 }
 
-statement(R) ::= dotted_name(M) ARROW dotted_name(A) ROUND_OPEN statement_args_maybe(B) ROUND_CLOSE name_maybe(C) SEMICOLON. {
+statement(R) ::= dotted_name(M) ARROW dotted_name(A) ROUND_OPEN list_contents_maybe(B) ROUND_CLOSE name_maybe(C) SEMICOLON. {
     if (!M || !A || !B.have) {
         goto failD0;
     }
@@ -670,12 +670,12 @@ doneKA:
     free_value(N);
 }
 
-statement_args_maybe(R) ::= . {
+list_contents_maybe(R) ::= . {
     R.have = 1;
     NCDValue_InitList(&R.v);
 }
 
-statement_args_maybe(R) ::= list_contents(A). {
+list_contents_maybe(R) ::= list_contents(A). {
     R = A;
 }
 
@@ -795,7 +795,7 @@ map(R) ::= BRACKET_OPEN map_contents(A) BRACKET_CLOSE. {
     R = A;
 }
 
-invoc(R) ::= value(F) ROUND_OPEN list_contents(A) ROUND_CLOSE. {
+invoc(R) ::= value(F) ROUND_OPEN list_contents_maybe(A) ROUND_CLOSE. {
     if (!F.have || !A.have) {
         goto failQ0;
     }