more simplifications in the bison sources,
authorLuigi Rizzo <rizzo@icir.org>
Sun, 30 Apr 2006 08:21:46 +0000 (08:21 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Sun, 30 Apr 2006 08:21:46 +0000 (08:21 +0000)
more annotation with XXX of dubious code.
(The code still passes tests)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@23534 65c4cc65-6c06-0410-ace0-fbb531ad65f3

pbx/ael/ael.tab.c
pbx/ael/ael.y

index 962c278..68f06b9 100644 (file)
@@ -412,18 +412,18 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state. */
-#define YYFINAL  17
+#define YYFINAL  18
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   584
+#define YYLAST   505
 
 /* YYNTOKENS -- Number of terminals. */
 #define YYNTOKENS  42
 /* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  52
+#define YYNNTS  55
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  151
+#define YYNRULES  149
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  354
+#define YYNSTATES  346
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -473,110 +473,105 @@ static const unsigned char yytranslate[] =
 static const unsigned short int yyprhs[] =
 {
        0,     0,     3,     5,     7,    10,    13,    15,    17,    19,
-      21,    27,    32,    38,    43,    50,    56,    63,    69,    78,
-      86,    94,   101,   106,   110,   112,   115,   118,   119,   125,
-     127,   131,   134,   136,   138,   141,   144,   146,   148,   150,
-     152,   154,   155,   161,   164,   166,   171,   175,   180,   188,
-     197,   199,   202,   205,   206,   212,   213,   219,   234,   245,
-     247,   250,   252,   255,   259,   261,   264,   268,   269,   276,
-     280,   281,   287,   291,   295,   298,   299,   300,   301,   314,
-     315,   322,   325,   329,   333,   336,   339,   340,   346,   349,
-     352,   355,   358,   363,   366,   371,   374,   379,   381,   383,
-     387,   391,   397,   403,   409,   415,   417,   421,   427,   431,
-     437,   441,   442,   448,   452,   453,   457,   461,   464,   466,
-     467,   471,   474,   476,   479,   484,   488,   493,   497,   500,
-     504,   506,   509,   511,   517,   522,   526,   531,   535,   538,
-     542,   545,   548,   563,   574,   578,   594,   606,   609,   611,
-     613,   618
+      21,    23,    25,    31,    36,    43,    49,    58,    66,    74,
+      81,    86,    90,    92,    95,    98,    99,   105,   107,   111,
+     114,   116,   118,   121,   124,   126,   128,   130,   132,   134,
+     135,   141,   144,   146,   151,   155,   160,   168,   177,   179,
+     182,   185,   186,   192,   193,   199,   214,   225,   227,   230,
+     232,   235,   239,   241,   244,   248,   249,   256,   260,   261,
+     267,   271,   275,   278,   279,   280,   281,   294,   295,   302,
+     305,   309,   313,   316,   319,   320,   326,   329,   332,   335,
+     339,   343,   347,   349,   352,   353,   355,   359,   363,   369,
+     375,   381,   387,   389,   393,   399,   403,   409,   413,   414,
+     420,   424,   425,   429,   433,   436,   438,   439,   441,   442,
+     446,   448,   451,   456,   460,   465,   469,   472,   476,   478,
+     481,   483,   489,   494,   498,   503,   507,   510,   514,   517,
+     520,   535,   546,   550,   566,   578,   581,   583,   585,   590
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
 static const yysigned_char yyrhs[] =
 {
       43,     0,    -1,    44,    -1,    45,    -1,    44,    45,    -1,
-      44,     1,    -1,    46,    -1,    47,    -1,    48,    -1,     8,
-      -1,     3,    41,     4,    53,     5,    -1,     3,    41,     4,
-       5,    -1,     3,    36,     4,    53,     5,    -1,     3,    36,
-       4,     5,    -1,    23,     3,    41,     4,    53,     5,    -1,
-      23,     3,    41,     4,     5,    -1,    23,     3,    36,     4,
-      53,     5,    -1,    23,     3,    36,     4,     5,    -1,    15,
-      41,     6,    52,     7,     4,    86,     5,    -1,    15,    41,
-       6,    52,     7,     4,     5,    -1,    15,    41,     6,     7,
-       4,    86,     5,    -1,    15,    41,     6,     7,     4,     5,
-      -1,    16,     4,    49,     5,    -1,    16,     4,     5,    -1,
-      50,    -1,    49,    50,    -1,    49,     1,    -1,    -1,    41,
-       9,    51,    41,     8,    -1,    41,    -1,    52,    10,    41,
-      -1,    52,     1,    -1,    54,    -1,     1,    -1,    53,    54,
-      -1,    53,     1,    -1,    57,    -1,    93,    -1,    88,    -1,
-      89,    -1,    56,    -1,    -1,    41,     9,    55,    41,     8,
+      44,     1,    -1,    47,    -1,    48,    -1,    49,    -1,     8,
+      -1,    41,    -1,    36,    -1,     3,    46,     4,    54,     5,
+      -1,     3,    46,     4,     5,    -1,    23,     3,    46,     4,
+      54,     5,    -1,    23,     3,    46,     4,     5,    -1,    15,
+      41,     6,    53,     7,     4,    89,     5,    -1,    15,    41,
+       6,    53,     7,     4,     5,    -1,    15,    41,     6,     7,
+       4,    89,     5,    -1,    15,    41,     6,     7,     4,     5,
+      -1,    16,     4,    50,     5,    -1,    16,     4,     5,    -1,
+      51,    -1,    50,    51,    -1,    50,     1,    -1,    -1,    41,
+       9,    52,    41,     8,    -1,    41,    -1,    53,    10,    41,
+      -1,    53,     1,    -1,    55,    -1,     1,    -1,    54,    55,
+      -1,    54,     1,    -1,    58,    -1,    96,    -1,    91,    -1,
+      92,    -1,    57,    -1,    -1,    41,     9,    56,    41,     8,
       -1,    41,     1,    -1,     8,    -1,    17,    24,    41,     8,
-      -1,    41,    24,    69,    -1,    30,    41,    24,    69,    -1,
-      31,     6,    65,     7,    41,    24,    69,    -1,    30,    31,
-       6,    65,     7,    41,    24,    69,    -1,    69,    -1,    58,
-      69,    -1,    58,     1,    -1,    -1,    19,     6,    60,    64,
-       7,    -1,    -1,    22,     6,    62,    64,     7,    -1,    20,
-       6,    65,    11,    65,    11,    65,    13,    65,    13,    65,
-      13,    65,     7,    -1,    20,     6,    41,    13,    65,    13,
-      65,    13,    65,     7,    -1,    41,    -1,    41,    41,    -1,
+      -1,    41,    24,    70,    -1,    30,    41,    24,    70,    -1,
+      31,     6,    66,     7,    41,    24,    70,    -1,    30,    31,
+       6,    66,     7,    41,    24,    70,    -1,    70,    -1,    59,
+      70,    -1,    59,     1,    -1,    -1,    19,     6,    61,    65,
+       7,    -1,    -1,    22,     6,    63,    65,     7,    -1,    20,
+       6,    66,    11,    66,    11,    66,    13,    66,    13,    66,
+      13,    66,     7,    -1,    20,     6,    41,    13,    66,    13,
+      66,    13,    66,     7,    -1,    41,    -1,    41,    41,    -1,
       41,    -1,    41,    41,    -1,    41,    41,    41,    -1,    41,
       -1,    41,    41,    -1,    41,    11,    41,    -1,    -1,    18,
-       6,    68,    41,     7,     4,    -1,     4,    58,     5,    -1,
-      -1,    41,     9,    70,    41,     8,    -1,    25,    76,     8,
-      -1,    26,    77,     8,    -1,    41,    11,    -1,    -1,    -1,
-      -1,    32,     6,    71,    41,     8,    72,    41,     8,    73,
-      41,     7,    69,    -1,    -1,    33,     6,    74,    41,     7,
-      69,    -1,    67,     5,    -1,    67,    84,     5,    -1,    12,
-      78,     8,    -1,    82,     8,    -1,    41,     8,    -1,    -1,
-      82,     9,    75,    41,     8,    -1,    28,     8,    -1,    27,
-       8,    -1,    29,     8,    -1,    61,    69,    -1,    61,    69,
-      21,    69,    -1,    59,    69,    -1,    59,    69,    21,    69,
-      -1,    63,    69,    -1,    63,    69,    21,    69,    -1,     8,
-      -1,    66,    -1,    66,    13,    66,    -1,    66,    10,    66,
-      -1,    66,    13,    66,    13,    66,    -1,    66,    10,    66,
-      10,    66,    -1,    36,    13,    66,    13,    66,    -1,    36,
-      10,    66,    10,    66,    -1,    66,    -1,    66,    10,    66,
-      -1,    66,    10,    41,    14,    41,    -1,    66,    14,    66,
-      -1,    66,    10,    41,    14,    36,    -1,    66,    14,    36,
-      -1,    -1,    41,     6,    79,    83,     7,    -1,    41,     6,
-       7,    -1,    -1,    41,    81,     6,    -1,    80,    83,     7,
-      -1,    80,     7,    -1,    64,    -1,    -1,    83,    10,    41,
-      -1,    83,    10,    -1,    85,    -1,    84,    85,    -1,    34,
-      41,    11,    58,    -1,    36,    11,    58,    -1,    35,    41,
-      11,    58,    -1,    34,    41,    11,    -1,    36,    11,    -1,
-      35,    41,    11,    -1,    87,    -1,    86,    87,    -1,    69,
-      -1,    37,    41,     4,    58,     5,    -1,    38,     4,    90,
-       5,    -1,    38,     4,     5,    -1,    39,     4,    90,     5,
-      -1,    39,     4,     5,    -1,    41,     8,    -1,    90,    41,
-       8,    -1,    90,     1,    -1,    92,     8,    -1,    92,    13,
-      65,    11,    65,    11,    65,    13,    65,    13,    65,    13,
-      65,     8,    -1,    92,    13,    41,    13,    65,    13,    65,
-      13,    65,     8,    -1,    91,    92,     8,    -1,    91,    92,
-      13,    65,    11,    65,    11,    65,    13,    65,    13,    65,
-      13,    65,     8,    -1,    91,    92,    13,    41,    13,    65,
-      13,    65,    13,    65,     8,    -1,    91,     1,    -1,    41,
-      -1,    36,    -1,    40,     4,    91,     5,    -1,    40,     4,
-       5,    -1
+       6,    69,    41,     7,     4,    -1,     4,    59,     5,    -1,
+      -1,    41,     9,    71,    41,     8,    -1,    25,    78,     8,
+      -1,    26,    79,     8,    -1,    41,    11,    -1,    -1,    -1,
+      -1,    32,     6,    72,    41,     8,    73,    41,     8,    74,
+      41,     7,    70,    -1,    -1,    33,     6,    75,    41,     7,
+      70,    -1,    68,     5,    -1,    68,    87,     5,    -1,    12,
+      80,     8,    -1,    84,     8,    -1,    41,     8,    -1,    -1,
+      84,     9,    76,    41,     8,    -1,    28,     8,    -1,    27,
+       8,    -1,    29,     8,    -1,    62,    70,    77,    -1,    60,
+      70,    77,    -1,    64,    70,    77,    -1,     8,    -1,    21,
+      70,    -1,    -1,    67,    -1,    67,    13,    67,    -1,    67,
+      10,    67,    -1,    67,    13,    67,    13,    67,    -1,    67,
+      10,    67,    10,    67,    -1,    36,    13,    67,    13,    67,
+      -1,    36,    10,    67,    10,    67,    -1,    67,    -1,    67,
+      10,    67,    -1,    67,    10,    41,    14,    41,    -1,    67,
+      14,    67,    -1,    67,    10,    41,    14,    36,    -1,    67,
+      14,    36,    -1,    -1,    41,     6,    81,    86,     7,    -1,
+      41,     6,     7,    -1,    -1,    41,    83,     6,    -1,    82,
+      86,     7,    -1,    82,     7,    -1,    41,    -1,    -1,    65,
+      -1,    -1,    86,    10,    85,    -1,    88,    -1,    87,    88,
+      -1,    34,    41,    11,    59,    -1,    36,    11,    59,    -1,
+      35,    41,    11,    59,    -1,    34,    41,    11,    -1,    36,
+      11,    -1,    35,    41,    11,    -1,    90,    -1,    89,    90,
+      -1,    70,    -1,    37,    41,     4,    59,     5,    -1,    38,
+       4,    93,     5,    -1,    38,     4,     5,    -1,    39,     4,
+      93,     5,    -1,    39,     4,     5,    -1,    41,     8,    -1,
+      93,    41,     8,    -1,    93,     1,    -1,    95,     8,    -1,
+      95,    13,    66,    11,    66,    11,    66,    13,    66,    13,
+      66,    13,    66,     8,    -1,    95,    13,    41,    13,    66,
+      13,    66,    13,    66,     8,    -1,    94,    95,     8,    -1,
+      94,    95,    13,    66,    11,    66,    11,    66,    13,    66,
+      13,    66,    13,    66,     8,    -1,    94,    95,    13,    41,
+      13,    66,    13,    66,    13,    66,     8,    -1,    94,     1,
+      -1,    41,    -1,    36,    -1,    40,     4,    94,     5,    -1,
+      40,     4,     5,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,   157,   157,   160,   161,   172,   175,   176,   177,   178,
-     181,   185,   188,   192,   195,   200,   204,   209,   215,   218,
-     221,   225,   230,   233,   237,   238,   239,   242,   242,   248,
-     251,   256,   259,   260,   261,   264,   267,   268,   269,   270,
-     271,   272,   272,   276,   277,   280,   285,   289,   294,   299,
-     308,   309,   312,   315,   315,   320,   320,   325,   341,   361,
-     362,   369,   370,   375,   383,   384,   388,   394,   394,   402,
-     405,   405,   409,   412,   415,   418,   419,   420,   418,   426,
-     426,   430,   434,   439,   443,   447,   450,   450,   483,   484,
-     485,   486,   491,   497,   502,   508,   513,   519,   522,   524,
-     529,   534,   541,   548,   555,   564,   569,   574,   581,   588,
-     595,   604,   604,   609,   614,   614,   624,   630,   633,   636,
-     639,   644,   651,   652,   657,   661,   665,   669,   672,   675,
-     680,   681,   686,   687,   693,   696,   700,   703,   707,   710,
-     715,   718,   721,   738,   751,   756,   774,   788,   791,   792,
-     795,   798
+       0,   165,   165,   168,   169,   180,   183,   184,   185,   186,
+     189,   190,   193,   197,   200,   205,   229,   232,   235,   239,
+     244,   247,   251,   252,   253,   256,   256,   262,   265,   269,
+     272,   273,   274,   277,   280,   281,   282,   283,   284,   285,
+     285,   289,   290,   293,   298,   302,   307,   312,   321,   322,
+     325,   328,   328,   333,   333,   338,   354,   374,   375,   382,
+     383,   388,   396,   397,   401,   407,   407,   415,   418,   418,
+     422,   425,   428,   431,   432,   433,   431,   439,   439,   443,
+     447,   452,   456,   460,   463,   463,   496,   497,   498,   499,
+     513,   527,   541,   544,   545,   550,   552,   557,   562,   569,
+     576,   583,   592,   597,   602,   609,   616,   623,   632,   632,
+     637,   642,   642,   652,   658,   661,   662,   665,   668,   671,
+     685,   686,   691,   695,   699,   703,   706,   709,   714,   715,
+     720,   721,   727,   730,   734,   737,   741,   744,   749,   752,
+     755,   772,   785,   790,   808,   823,   826,   827,   830,   833
 };
 #endif
 
@@ -592,15 +587,16 @@ static const char *const yytname[] =
   "KW_RETURN", "KW_BREAK", "KW_CONTINUE", "KW_REGEXTEN", "KW_HINT",
   "KW_FOR", "KW_WHILE", "KW_CASE", "KW_PATTERN", "KW_DEFAULT", "KW_CATCH",
   "KW_SWITCHES", "KW_ESWITCHES", "KW_INCLUDES", "word", "$accept", "file",
-  "objects", "object", "context", "macro", "globals", "global_statements",
-  "global_statement", "@1", "arglist", "elements", "element", "@2",
-  "ignorepat", "extension", "statements", "if_head", "@3", "random_head",
-  "@4", "iftime_head", "word_list", "word3_list", "goto_word",
-  "switch_head", "@5", "statement", "@6", "@7", "@8", "@9", "@10", "@11",
-  "target", "jumptarget", "macro_call", "@12", "application_call_head",
-  "@13", "application_call", "eval_arglist", "case_statements",
-  "case_statement", "macro_statements", "macro_statement", "switches",
-  "eswitches", "switchlist", "includeslist", "includedname", "includes", 0
+  "objects", "object", "word_or_default", "context", "macro", "globals",
+  "global_statements", "global_statement", "@1", "arglist", "elements",
+  "element", "@2", "ignorepat", "extension", "statements", "if_head", "@3",
+  "random_head", "@4", "iftime_head", "word_list", "word3_list",
+  "goto_word", "switch_head", "@5", "statement", "@6", "@7", "@8", "@9",
+  "@10", "@11", "opt_else", "target", "jumptarget", "macro_call", "@12",
+  "application_call_head", "@13", "application_call", "opt_word",
+  "eval_arglist", "case_statements", "case_statement", "macro_statements",
+  "macro_statement", "switches", "eswitches", "switchlist", "includeslist",
+  "includedname", "includes", 0
 };
 #endif
 
@@ -621,42 +617,40 @@ static const unsigned short int yytoknum[] =
 static const unsigned char yyr1[] =
 {
        0,    42,    43,    44,    44,    44,    45,    45,    45,    45,
-      46,    46,    46,    46,    46,    46,    46,    46,    47,    47,
-      47,    47,    48,    48,    49,    49,    49,    51,    50,    52,
-      52,    52,    53,    53,    53,    53,    54,    54,    54,    54,
-      54,    55,    54,    54,    54,    56,    57,    57,    57,    57,
-      58,    58,    58,    60,    59,    62,    61,    63,    63,    64,
-      64,    65,    65,    65,    66,    66,    66,    68,    67,    69,
-      70,    69,    69,    69,    69,    71,    72,    73,    69,    74,
-      69,    69,    69,    69,    69,    69,    75,    69,    69,    69,
-      69,    69,    69,    69,    69,    69,    69,    69,    76,    76,
-      76,    76,    76,    76,    76,    77,    77,    77,    77,    77,
-      77,    79,    78,    78,    81,    80,    82,    82,    83,    83,
-      83,    83,    84,    84,    85,    85,    85,    85,    85,    85,
-      86,    86,    87,    87,    88,    88,    89,    89,    90,    90,
-      90,    91,    91,    91,    91,    91,    91,    91,    92,    92,
-      93,    93
+      46,    46,    47,    47,    47,    47,    48,    48,    48,    48,
+      49,    49,    50,    50,    50,    52,    51,    53,    53,    53,
+      54,    54,    54,    54,    55,    55,    55,    55,    55,    56,
+      55,    55,    55,    57,    58,    58,    58,    58,    59,    59,
+      59,    61,    60,    63,    62,    64,    64,    65,    65,    66,
+      66,    66,    67,    67,    67,    69,    68,    70,    71,    70,
+      70,    70,    70,    72,    73,    74,    70,    75,    70,    70,
+      70,    70,    70,    70,    76,    70,    70,    70,    70,    70,
+      70,    70,    70,    77,    77,    78,    78,    78,    78,    78,
+      78,    78,    79,    79,    79,    79,    79,    79,    81,    80,
+      80,    83,    82,    84,    84,    85,    85,    86,    86,    86,
+      87,    87,    88,    88,    88,    88,    88,    88,    89,    89,
+      90,    90,    91,    91,    92,    92,    93,    93,    93,    94,
+      94,    94,    94,    94,    94,    94,    95,    95,    96,    96
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const unsigned char yyr2[] =
 {
        0,     2,     1,     1,     2,     2,     1,     1,     1,     1,
-       5,     4,     5,     4,     6,     5,     6,     5,     8,     7,
-       7,     6,     4,     3,     1,     2,     2,     0,     5,     1,
-       3,     2,     1,     1,     2,     2,     1,     1,     1,     1,
-       1,     0,     5,     2,     1,     4,     3,     4,     7,     8,
-       1,     2,     2,     0,     5,     0,     5,    14,    10,     1,
-       2,     1,     2,     3,     1,     2,     3,     0,     6,     3,
-       0,     5,     3,     3,     2,     0,     0,     0,    12,     0,
-       6,     2,     3,     3,     2,     2,     0,     5,     2,     2,
-       2,     2,     4,     2,     4,     2,     4,     1,     1,     3,
-       3,     5,     5,     5,     5,     1,     3,     5,     3,     5,
-       3,     0,     5,     3,     0,     3,     3,     2,     1,     0,
-       3,     2,     1,     2,     4,     3,     4,     3,     2,     3,
-       1,     2,     1,     5,     4,     3,     4,     3,     2,     3,
-       2,     2,    14,    10,     3,    15,    11,     2,     1,     1,
-       4,     3
+       1,     1,     5,     4,     6,     5,     8,     7,     7,     6,
+       4,     3,     1,     2,     2,     0,     5,     1,     3,     2,
+       1,     1,     2,     2,     1,     1,     1,     1,     1,     0,
+       5,     2,     1,     4,     3,     4,     7,     8,     1,     2,
+       2,     0,     5,     0,     5,    14,    10,     1,     2,     1,
+       2,     3,     1,     2,     3,     0,     6,     3,     0,     5,
+       3,     3,     2,     0,     0,     0,    12,     0,     6,     2,
+       3,     3,     2,     2,     0,     5,     2,     2,     2,     3,
+       3,     3,     1,     2,     0,     1,     3,     3,     5,     5,
+       5,     5,     1,     3,     5,     3,     5,     3,     0,     5,
+       3,     0,     3,     3,     2,     1,     0,     1,     0,     3,
+       1,     2,     4,     3,     4,     3,     2,     3,     1,     2,
+       1,     5,     4,     3,     4,     3,     2,     3,     2,     2,
+      14,    10,     3,    15,    11,     2,     1,     1,     4,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -665,279 +659,260 @@ static const unsigned char yyr2[] =
 static const unsigned char yydefact[] =
 {
        0,     0,     9,     0,     0,     0,     0,     0,     3,     6,
-       7,     8,     0,     0,     0,     0,     0,     1,     5,     4,
-       0,     0,     0,    23,     0,     0,    24,     0,     0,    33,
-      13,    44,     0,     0,     0,     0,     0,     0,     0,     0,
-      32,    40,    36,    38,    39,    37,    11,     0,     0,    29,
-       0,    27,    26,    22,    25,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    43,    41,     0,    35,    12,    34,
-      10,     0,    31,     0,     0,     0,    17,     0,    15,     0,
-       0,     0,     0,    61,     0,   135,     0,     0,   137,     0,
-     151,   149,   148,     0,     0,     0,     0,    97,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     114,     0,     0,     0,     0,    46,   119,     0,    21,     0,
-     132,     0,   130,     0,    30,     0,    16,    14,    45,     0,
-      47,    62,     0,   138,   140,   134,     0,   136,   147,   150,
-       0,   141,     0,     0,     0,    50,     0,     0,    67,    53,
-       0,    55,     0,    64,    98,     0,   105,     0,    89,    88,
-      90,    75,    79,    85,    70,    74,     0,    93,    91,    95,
-      81,     0,     0,     0,     0,   122,   117,    59,   118,     0,
-      84,    86,     0,    20,   131,    19,     0,    28,     0,    63,
-       0,   139,   144,     0,    61,     0,    42,    52,    69,    51,
-     111,    83,     0,     0,    61,     0,     0,     0,     0,     0,
-      65,     0,     0,    72,     0,     0,    73,     0,     0,     0,
-     115,     0,     0,     0,     0,     0,   128,    82,   123,    60,
-     116,   121,     0,     0,    18,     0,     0,    61,     0,     0,
-       0,   113,   119,     0,     0,     0,     0,     0,     0,     0,
-      66,   100,    99,    64,   106,   110,   108,     0,     0,     0,
-      94,    92,    96,   127,   129,     0,   120,     0,     0,     0,
-      48,     0,     0,     0,     0,     0,     0,    54,     0,     0,
-      56,     0,     0,     0,     0,     0,    76,     0,    71,     0,
-       0,    87,   133,    49,     0,     0,     0,     0,   112,    68,
-       0,     0,   104,   103,   102,   101,   109,   107,     0,    80,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    77,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   143,     0,    58,     0,     0,   146,     0,
-       0,     0,     0,     0,     0,     0,    78,     0,     0,     0,
-       0,   142,    57,   145
+       7,     8,    11,    10,     0,     0,     0,     0,     1,     5,
+       4,     0,     0,    21,     0,     0,    22,     0,    31,    13,
+      42,     0,     0,     0,     0,     0,     0,     0,     0,    30,
+      38,    34,    36,    37,    35,     0,    27,     0,    25,    24,
+      20,    23,     0,     0,     0,     0,     0,     0,     0,     0,
+      41,    39,     0,    33,    12,    32,     0,    29,     0,     0,
+       0,    15,     0,     0,     0,     0,    59,     0,   133,     0,
+       0,   135,     0,   149,   147,   146,     0,     0,     0,     0,
+      92,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   111,     0,     0,     0,     0,    44,   118,
+       0,    19,     0,   130,     0,   128,     0,    28,     0,    14,
+      43,     0,    45,    60,     0,   136,   138,   132,     0,   134,
+     145,   148,     0,   139,     0,     0,     0,    48,     0,     0,
+      65,    51,     0,    53,     0,    62,    95,     0,   102,     0,
+      87,    86,    88,    73,    77,    83,    68,    72,     0,    94,
+      94,    94,    79,     0,     0,     0,     0,   120,   114,    57,
+     117,     0,    82,    84,     0,    18,   129,    17,     0,    26,
+       0,    61,     0,   137,   142,     0,    59,     0,    40,    50,
+      67,    49,   108,    81,     0,     0,    59,     0,     0,     0,
+       0,     0,    63,     0,     0,    70,     0,     0,    71,     0,
+       0,     0,   112,     0,    90,    89,    91,     0,     0,   126,
+      80,   121,    58,   113,   116,     0,     0,    16,     0,     0,
+      59,     0,     0,     0,   110,   118,     0,     0,     0,     0,
+       0,     0,     0,    64,    97,    96,    62,   103,   107,   105,
+       0,     0,     0,    93,   125,   127,     0,   115,   119,     0,
+       0,     0,    46,     0,     0,     0,     0,     0,     0,    52,
+       0,     0,    54,     0,     0,     0,     0,     0,    74,     0,
+      69,     0,     0,    85,   131,    47,     0,     0,     0,     0,
+     109,    66,     0,     0,   101,   100,    99,    98,   106,   104,
+       0,    78,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    75,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   141,     0,    56,     0,     0,
+     144,     0,     0,     0,     0,     0,     0,     0,    76,     0,
+       0,     0,     0,   140,    55,   143
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
 static const short int yydefgoto[] =
 {
-      -1,     6,     7,     8,     9,    10,    11,    25,    26,    75,
-      50,    39,    40,    95,    41,    42,   144,   111,   203,   112,
-     206,   113,   178,    84,   154,   114,   202,   145,   219,   217,
-     308,   330,   218,   232,   155,   157,   147,   242,   116,   166,
-     117,   179,   174,   175,   121,   122,    43,    44,    87,    93,
-      94,    45
+      -1,     6,     7,     8,    14,     9,    10,    11,    25,    26,
+      70,    47,    38,    39,    88,    40,    41,   136,   104,   195,
+     105,   198,   106,   170,    77,   146,   107,   194,   137,   211,
+     209,   300,   322,   210,   225,   214,   147,   149,   139,   235,
+     109,   158,   110,   258,   171,   166,   167,   114,   115,    42,
+      43,    80,    86,    87,    44
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -215
+#define YYPACT_NINF -193
 static const short int yypact[] =
 {
-     212,   127,  -215,   -35,    55,    23,    85,   561,  -215,  -215,
-    -215,  -215,    64,   118,   112,    13,   128,  -215,  -215,  -215,
-     157,   208,     2,  -215,   123,    19,  -215,   130,   137,  -215,
-    -215,  -215,   143,    43,   169,   181,   182,   189,   126,   284,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,   337,   196,  -215,
-     141,  -215,  -215,  -215,  -215,   342,   357,   135,   188,   177,
-     170,    22,    36,    29,  -215,  -215,   527,  -215,  -215,  -215,
-    -215,   423,  -215,   206,   191,   195,  -215,   384,  -215,   399,
-     210,   170,   527,   200,   215,  -215,   242,    51,  -215,    57,
-    -215,  -215,  -215,    12,   158,   220,   527,  -215,   223,   245,
-     250,   259,   262,   148,   229,   263,   265,   266,   269,   275,
-     251,   527,   527,   527,   156,  -215,    26,   145,  -215,   243,
-    -215,   449,  -215,   475,  -215,   279,  -215,  -215,  -215,   281,
-    -215,   252,   253,  -215,  -215,  -215,   283,  -215,  -215,  -215,
-     204,  -215,   254,   291,   278,  -215,   296,   300,  -215,  -215,
-     276,  -215,    69,    40,    95,   310,   114,   313,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,   323,   311,   318,   325,
-    -215,   290,   303,   340,   172,  -215,  -215,   307,  -215,   230,
-    -215,  -215,   348,  -215,  -215,  -215,   501,  -215,   312,  -215,
-     331,  -215,  -215,   315,    58,   346,  -215,  -215,  -215,  -215,
-     353,  -215,   320,   322,    76,   355,   322,   229,   229,   328,
-    -215,   229,   229,  -215,   329,   178,  -215,   330,   338,   343,
-    -215,   527,   527,   527,   375,   379,   527,  -215,  -215,  -215,
-    -215,   350,   352,   527,  -215,   370,   527,   108,   388,   170,
-     170,  -215,   322,   395,   396,   170,   170,   398,   354,   393,
-    -215,   400,   404,    50,  -215,  -215,  -215,   401,   405,   403,
-    -215,  -215,  -215,   527,   527,     3,  -215,   410,   308,   527,
-    -215,   170,   170,   406,   397,   235,   409,  -215,   407,   415,
-    -215,   229,   229,   229,   229,   190,  -215,   527,  -215,    68,
-     111,  -215,  -215,  -215,   408,   421,   170,   170,  -215,  -215,
-     170,   170,  -215,  -215,  -215,  -215,  -215,  -215,   392,  -215,
-     170,   170,   431,   433,   434,   445,   426,   446,   450,   170,
-     170,   170,   170,  -215,   170,   170,   428,   452,   455,   453,
-     429,   464,   460,  -215,   170,  -215,   170,   477,  -215,   170,
-     472,   476,   527,   478,   170,   170,  -215,   170,   480,   485,
-     488,  -215,  -215,  -215
+     121,   117,  -193,   -38,    84,    17,    95,   343,  -193,  -193,
+    -193,  -193,  -193,  -193,    98,   122,     9,   117,  -193,  -193,
+    -193,   151,    53,  -193,   110,    14,  -193,   167,  -193,  -193,
+    -193,   102,    39,   182,   200,   214,   218,   184,   204,  -193,
+    -193,  -193,  -193,  -193,  -193,   219,  -193,   196,  -193,  -193,
+    -193,  -193,   280,   183,   221,   207,   187,    23,    44,    20,
+    -193,  -193,   461,  -193,  -193,  -193,   357,  -193,   228,   192,
+     195,  -193,   333,   229,   187,   461,   197,   234,  -193,   238,
+      16,  -193,    46,  -193,  -193,  -193,     5,   147,   206,   461,
+    -193,   211,   249,   250,   251,   252,   125,   220,   254,   256,
+     258,   253,   261,   104,   461,   461,   461,   129,  -193,    60,
+      50,  -193,   230,  -193,   383,  -193,   409,  -193,   262,  -193,
+    -193,   270,  -193,   239,   242,  -193,  -193,  -193,   276,  -193,
+    -193,  -193,   149,  -193,   246,   281,   274,  -193,   263,   282,
+    -193,  -193,   257,  -193,   173,     7,   201,   283,    63,   287,
+    -193,  -193,  -193,  -193,  -193,  -193,  -193,  -193,   298,   292,
+     292,   292,  -193,   273,   284,   306,   138,  -193,  -193,   286,
+    -193,   120,  -193,  -193,   324,  -193,  -193,  -193,   435,  -193,
+     294,  -193,   236,  -193,  -193,   299,    -6,   328,  -193,  -193,
+    -193,  -193,   335,  -193,   307,   308,    40,   336,   308,   220,
+     220,   311,  -193,   220,   220,  -193,   312,   166,  -193,   313,
+     314,   315,  -193,   461,  -193,  -193,  -193,   346,   349,   461,
+    -193,  -193,  -193,  -193,   326,   327,   461,  -193,   354,   461,
+      65,   359,   187,   187,  -193,   308,   373,   374,   187,   187,
+     385,   386,   380,  -193,   387,   391,   109,  -193,  -193,  -193,
+     392,   399,   410,  -193,   461,   461,     4,  -193,  -193,   411,
+     304,   461,  -193,   187,   187,   394,   388,   177,   418,  -193,
+     412,   415,  -193,   220,   220,   220,   220,   174,  -193,   461,
+    -193,    64,   113,  -193,  -193,  -193,   417,   421,   187,   187,
+    -193,  -193,   187,   187,  -193,  -193,  -193,  -193,  -193,  -193,
+     382,  -193,   187,   187,   420,   431,   432,   436,   440,   438,
+     439,   187,   187,   187,   187,  -193,   187,   187,   448,   445,
+     452,   453,   429,   463,   462,  -193,   187,  -193,   187,   467,
+    -193,   187,   464,   465,   461,   469,   187,   187,  -193,   187,
+     476,   478,   483,  -193,  -193,  -193
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const short int yypgoto[] =
 {
-    -215,  -215,  -215,   491,  -215,  -215,  -215,  -215,   474,  -215,
-    -215,   104,   -37,  -215,  -215,  -215,  -214,  -215,  -215,  -215,
-    -215,  -215,    60,   -67,  -101,  -215,  -215,   -66,  -215,  -215,
-    -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,  -215,
-    -215,   268,  -215,   341,   391,  -120,  -215,  -215,   456,  -215,
-     418,  -215
+    -193,  -193,  -193,   485,   479,  -193,  -193,  -193,  -193,   470,
+    -193,  -193,   446,    37,  -193,  -193,  -193,  -192,  -193,  -193,
+    -193,  -193,  -193,    18,   -63,   -96,  -193,  -193,   -62,  -193,
+    -193,  -193,  -193,  -193,  -193,    35,  -193,  -193,  -193,  -193,
+    -193,  -193,  -193,  -193,   264,  -193,   331,   384,  -112,  -193,
+    -193,   443,  -193,   419,  -193
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -127
+#define YYTABLE_NINF -125
 static const short int yytable[] =
 {
-     115,   184,    69,   156,   197,   120,    14,    96,  -125,    48,
-      69,    97,   265,   138,   129,    98,   130,   139,    23,   268,
-      52,    99,   100,   101,    53,   102,    16,    85,   103,   104,
-     105,   106,   107,   176,    90,   108,   109,  -125,  -125,  -125,
-      69,    88,    69,    49,   110,   167,   168,   169,    91,   289,
-     290,   209,   134,    92,    24,   120,   135,   120,   134,    15,
-      24,   209,   137,    86,   285,    91,   184,   177,    20,   197,
-      92,   239,    96,  -124,    58,   195,    97,    86,   199,   207,
-      98,   210,   208,   205,    59,    17,    99,   100,   101,   245,
-     102,   210,   136,   103,   104,   105,   106,   107,   136,   131,
-     108,   109,  -124,  -124,  -124,   211,   248,   249,   212,   110,
-     251,   252,   197,   254,   256,    96,  -126,   131,    22,    97,
-     120,   271,    21,    98,   214,    47,   238,    64,   215,    99,
-     100,   101,    51,   102,    55,    65,   103,   104,   105,   106,
-     107,    56,    72,   108,   109,  -126,  -126,  -126,    73,   131,
-      66,    74,   110,   180,   181,   260,   261,   262,    29,    77,
-      79,   170,    30,    12,    27,    31,   141,    57,    13,    28,
-     270,   142,   273,   274,    32,    60,    80,   227,   278,   279,
-     302,   303,   304,   305,   152,    61,    62,    33,    34,   153,
-     171,   172,   173,    63,    81,    35,    36,    37,    38,   199,
-      71,    82,   199,   293,   294,   295,   171,   172,   173,    29,
-     123,    83,   192,    46,   255,     1,    31,   193,   128,   153,
-       2,   309,   132,   199,   199,    32,   306,     3,     4,   312,
-     313,   307,   124,   314,   315,     5,   125,   230,    33,    34,
-     231,   131,   298,   317,   318,   231,    35,    36,    37,    38,
-     133,   148,   326,   327,   328,   329,   149,   331,   332,   163,
-     164,   143,   165,   244,   146,   150,   247,   340,   151,   341,
-     153,   158,   343,   159,   160,   161,   346,   348,   349,   197,
-     350,   162,    96,   198,   182,    67,    97,   187,   188,    68,
-      98,   191,    31,   189,   190,   194,    99,   100,   101,   196,
-     102,    32,   200,   103,   104,   105,   106,   107,   201,   197,
-     108,   109,    96,   292,    33,    34,    97,   204,   213,   110,
-      98,   216,    35,    36,    37,    38,    99,   100,   101,   220,
-     102,   224,   221,   103,   104,   105,   106,   107,    67,   222,
-     108,   109,    70,    29,   225,    31,   223,    76,   229,   110,
-      31,   226,   233,   235,    32,   236,   237,   240,    29,    32,
-     241,   243,    78,   177,   281,    31,   246,    33,    34,   250,
-     253,   257,    33,    34,    32,    35,    36,    37,    38,   258,
-      35,    36,    37,    38,   259,    67,   263,    33,    34,   126,
-     264,   266,    31,   267,   269,    35,    36,    37,    38,   272,
-      67,    32,   276,   277,   127,   280,   282,    31,   297,   286,
-     283,   288,   287,   299,    33,    34,    32,   284,   291,   296,
-     300,   310,    35,    36,    37,    38,   301,    96,   118,    33,
-      34,    97,   311,   316,   323,    98,   333,    35,    36,    37,
-      38,    99,   100,   101,   319,   102,   320,   321,   103,   104,
-     105,   106,   107,    96,   183,   108,   109,    97,   322,   324,
-     119,    98,   335,   325,   110,   334,   336,    99,   100,   101,
-     337,   102,   338,   339,   103,   104,   105,   106,   107,    96,
-     185,   108,   109,    97,   342,   344,   119,    98,   351,   345,
-     110,   347,   352,    99,   100,   101,   353,   102,    19,    54,
-     103,   104,   105,   106,   107,    96,   234,   108,   109,    97,
-     275,   140,   119,    98,   186,   228,   110,     0,    89,    99,
-     100,   101,     0,   102,     0,     0,   103,   104,   105,   106,
-     107,    96,     0,   108,   109,    97,     0,     0,   119,    98,
-       0,     0,   110,     0,     0,    99,   100,   101,     0,   102,
-       0,     0,   103,   104,   105,   106,   107,     0,     0,   108,
-     109,    -2,    18,     0,     1,     0,     0,     0,   110,     2,
-       0,     0,     0,     0,     0,     0,     3,     4,     0,     0,
-       0,     0,     0,     0,     5
+     108,   148,   176,    15,   113,   189,   130,   232,    89,  -123,
+     131,   121,    90,   122,    23,    49,    91,   126,   201,    50,
+      17,   127,    92,    93,    94,    83,    95,   256,    78,    96,
+      97,    98,    99,   100,   260,   123,   101,   102,  -123,  -123,
+    -123,    84,   159,   160,   161,   103,    85,   126,   202,    81,
+      24,   129,   113,   238,   113,    24,    84,   128,   172,   173,
+      45,    85,   281,   282,    79,   189,   176,   168,    89,  -122,
+      54,   187,    90,   206,   191,    65,    91,   207,   263,   197,
+      55,   123,    92,    93,    94,    79,    95,   128,    16,    96,
+      97,    98,    99,   100,    46,    18,   101,   102,  -122,  -122,
+    -122,   169,    21,   241,   242,   103,   123,   244,   245,    65,
+     247,   249,   155,   156,   189,   157,   113,    89,  -124,    48,
+     201,    90,   231,   277,     1,    91,    53,   223,    22,     2,
+     224,    92,    93,    94,   162,    95,     3,     4,    96,    97,
+      98,    99,   100,   220,     5,   101,   102,  -124,  -124,  -124,
+     202,   253,    28,    12,   103,   133,    29,   184,    13,    30,
+     134,   144,   185,   163,   164,   165,   145,   262,    31,   265,
+     266,    52,   163,   164,   165,   270,   271,   294,   295,   296,
+     297,    32,    33,   199,   290,    60,   200,   224,    56,    34,
+      35,    36,    37,    61,   191,   215,   216,    67,   191,   285,
+     286,   287,   248,    68,    57,    63,    69,   145,    62,    64,
+     298,   203,    30,   237,   204,   299,   240,   301,    58,   191,
+     191,    31,    59,    66,    73,   304,   305,    74,    76,   306,
+     307,    75,   116,   117,    32,    33,   118,   120,   123,   309,
+     310,   124,    34,    35,    36,    37,   125,   135,   318,   319,
+     320,   321,   138,   323,   324,   140,   141,   142,   143,   153,
+     229,   145,   150,   332,   151,   333,   152,   154,   335,   192,
+     179,   174,   338,   340,   341,   189,   342,   180,    89,   190,
+     181,    28,    90,   182,   183,    71,    91,   186,    30,   188,
+     193,   205,    92,    93,    94,   208,    95,    31,   196,    96,
+      97,    98,    99,   100,   212,   189,   101,   102,    89,   284,
+      32,    33,    90,   213,   217,   103,    91,   219,    34,    35,
+      36,    37,    92,    93,    94,   218,    95,   222,   226,    96,
+      97,    98,    99,   100,    63,   228,   101,   102,   119,   233,
+     230,    30,   234,    -2,    19,   103,     1,   239,   236,   169,
+      31,     2,   243,   246,   250,   251,   252,   254,     3,     4,
+     255,    89,   111,    32,    33,    90,     5,   257,   259,    91,
+     264,    34,    35,    36,    37,    92,    93,    94,   261,    95,
+     268,   269,    96,    97,    98,    99,   100,    89,   175,   101,
+     102,    90,   272,   274,   112,    91,   273,   275,   103,   289,
+     278,    92,    93,    94,   276,    95,   279,   288,    96,    97,
+      98,    99,   100,    89,   177,   101,   102,    90,   280,   283,
+     112,    91,   291,   308,   103,   292,   293,    92,    93,    94,
+     302,    95,   303,   311,    96,    97,    98,    99,   100,    89,
+     227,   101,   102,    90,   312,   313,   112,    91,   315,   314,
+     103,   316,   317,    92,    93,    94,   325,    95,   326,   327,
+      96,    97,    98,    99,   100,    89,   328,   101,   102,    90,
+     329,   330,   112,    91,   334,   331,   103,   336,   337,    92,
+      93,    94,   339,    95,   343,   344,    96,    97,    98,    99,
+     100,   345,    20,   101,   102,    51,    27,   221,    72,   267,
+     178,    82,   103,     0,     0,   132
 };
 
 static const short int yycheck[] =
 {
-      66,   121,    39,   104,     1,    71,    41,     4,     5,     7,
-      47,     8,   226,     1,    81,    12,    82,     5,     5,   233,
-       1,    18,    19,    20,     5,    22,     3,     5,    25,    26,
-      27,    28,    29,     7,     5,    32,    33,    34,    35,    36,
-      77,     5,    79,    41,    41,   111,   112,   113,    36,   263,
-     264,    11,     1,    41,    41,   121,     5,   123,     1,     4,
-      41,    11,     5,    41,    14,    36,   186,    41,     4,     1,
-      41,    13,     4,     5,    31,   142,     8,    41,   144,    10,
-      12,    41,    13,   150,    41,     0,    18,    19,    20,    13,
-      22,    41,    41,    25,    26,    27,    28,    29,    41,    41,
-      32,    33,    34,    35,    36,    10,   207,   208,    13,    41,
-     211,   212,     1,   214,   215,     4,     5,    41,     6,     8,
-     186,    13,     4,    12,    10,    21,   193,     1,    14,    18,
-      19,    20,     9,    22,     4,     9,    25,    26,    27,    28,
-      29,     4,     1,    32,    33,    34,    35,    36,     7,    41,
-      24,    10,    41,     8,     9,   221,   222,   223,     1,    55,
-      56,     5,     5,    36,    36,     8,     8,    24,    41,    41,
-     236,    13,   239,   240,    17,     6,    41,     5,   245,   246,
-     281,   282,   283,   284,    36,     4,     4,    30,    31,    41,
-      34,    35,    36,     4,     6,    38,    39,    40,    41,   265,
-       4,    24,   268,   269,   271,   272,    34,    35,    36,     1,
-       4,    41,     8,     5,    36,     3,     8,    13,     8,    41,
-       8,   287,     7,   289,   290,    17,    36,    15,    16,   296,
-     297,    41,    41,   300,   301,    23,    41,     7,    30,    31,
-      10,    41,     7,   310,   311,    10,    38,    39,    40,    41,
-       8,     6,   319,   320,   321,   322,     6,   324,   325,     8,
-       9,    41,    11,   203,    41,     6,   206,   334,     6,   336,
-      41,     8,   339,     8,     8,     6,   342,   344,   345,     1,
-     347,     6,     4,     5,    41,     1,     8,     8,     7,     5,
-      12,     8,     8,    41,    41,    41,    18,    19,    20,     8,
-      22,    17,     6,    25,    26,    27,    28,    29,     8,     1,
-      32,    33,     4,     5,    30,    31,     8,    41,     8,    41,
-      12,     8,    38,    39,    40,    41,    18,    19,    20,     6,
-      22,    41,    21,    25,    26,    27,    28,    29,     1,    21,
-      32,    33,     5,     1,    41,     8,    21,     5,    41,    41,
-       8,    11,     4,    41,    17,    24,    41,    11,     1,    17,
-       7,    41,     5,    41,    10,     8,    11,    30,    31,    41,
-      41,    41,    30,    31,    17,    38,    39,    40,    41,    41,
-      38,    39,    40,    41,    41,     1,    11,    30,    31,     5,
-      11,    41,     8,    41,    24,    38,    39,    40,    41,    11,
-       1,    17,     7,     7,     5,     7,    13,     8,    11,     8,
-      10,     8,     7,     4,    30,    31,    17,    13,     8,    13,
-      13,    13,    38,    39,    40,    41,    11,     4,     5,    30,
-      31,     8,    11,    41,     8,    12,     8,    38,    39,    40,
-      41,    18,    19,    20,    13,    22,    13,    13,    25,    26,
-      27,    28,    29,     4,     5,    32,    33,     8,    13,    13,
-      37,    12,     7,    13,    41,    13,    13,    18,    19,    20,
-      41,    22,     8,    13,    25,    26,    27,    28,    29,     4,
-       5,    32,    33,     8,     7,    13,    37,    12,     8,    13,
-      41,    13,     7,    18,    19,    20,     8,    22,     7,    25,
-      25,    26,    27,    28,    29,     4,     5,    32,    33,     8,
-     242,    93,    37,    12,   123,   174,    41,    -1,    62,    18,
-      19,    20,    -1,    22,    -1,    -1,    25,    26,    27,    28,
-      29,     4,    -1,    32,    33,     8,    -1,    -1,    37,    12,
-      -1,    -1,    41,    -1,    -1,    18,    19,    20,    -1,    22,
-      -1,    -1,    25,    26,    27,    28,    29,    -1,    -1,    32,
-      33,     0,     1,    -1,     3,    -1,    -1,    -1,    41,     8,
-      -1,    -1,    -1,    -1,    -1,    -1,    15,    16,    -1,    -1,
-      -1,    -1,    -1,    -1,    23
+      62,    97,   114,    41,    66,     1,     1,    13,     4,     5,
+       5,    74,     8,    75,     5,     1,    12,     1,    11,     5,
+       3,     5,    18,    19,    20,     5,    22,   219,     5,    25,
+      26,    27,    28,    29,   226,    41,    32,    33,    34,    35,
+      36,    36,   104,   105,   106,    41,    41,     1,    41,     5,
+      41,     5,   114,    13,   116,    41,    36,    41,     8,     9,
+       7,    41,   254,   255,    41,     1,   178,     7,     4,     5,
+      31,   134,     8,    10,   136,    38,    12,    14,    13,   142,
+      41,    41,    18,    19,    20,    41,    22,    41,     4,    25,
+      26,    27,    28,    29,    41,     0,    32,    33,    34,    35,
+      36,    41,     4,   199,   200,    41,    41,   203,   204,    72,
+     206,   207,     8,     9,     1,    11,   178,     4,     5,     9,
+      11,     8,   185,    14,     3,    12,    24,     7,     6,     8,
+      10,    18,    19,    20,     5,    22,    15,    16,    25,    26,
+      27,    28,    29,     5,    23,    32,    33,    34,    35,    36,
+      41,   213,     1,    36,    41,     8,     5,     8,    41,     8,
+      13,    36,    13,    34,    35,    36,    41,   229,    17,   232,
+     233,     4,    34,    35,    36,   238,   239,   273,   274,   275,
+     276,    30,    31,    10,     7,     1,    13,    10,     6,    38,
+      39,    40,    41,     9,   256,   160,   161,     1,   260,   261,
+     263,   264,    36,     7,     4,     1,    10,    41,    24,     5,
+      36,    10,     8,   195,    13,    41,   198,   279,     4,   281,
+     282,    17,     4,     4,    41,   288,   289,     6,    41,   292,
+     293,    24,     4,    41,    30,    31,    41,     8,    41,   302,
+     303,     7,    38,    39,    40,    41,     8,    41,   311,   312,
+     313,   314,    41,   316,   317,     6,     6,     6,     6,     6,
+      24,    41,     8,   326,     8,   328,     8,     6,   331,     6,
+       8,    41,   334,   336,   337,     1,   339,     7,     4,     5,
+      41,     1,     8,    41,     8,     5,    12,    41,     8,     8,
+       8,     8,    18,    19,    20,     8,    22,    17,    41,    25,
+      26,    27,    28,    29,     6,     1,    32,    33,     4,     5,
+      30,    31,     8,    21,    41,    41,    12,    11,    38,    39,
+      40,    41,    18,    19,    20,    41,    22,    41,     4,    25,
+      26,    27,    28,    29,     1,    41,    32,    33,     5,    11,
+      41,     8,     7,     0,     1,    41,     3,    11,    41,    41,
+      17,     8,    41,    41,    41,    41,    41,    11,    15,    16,
+      11,     4,     5,    30,    31,     8,    23,    41,    41,    12,
+      11,    38,    39,    40,    41,    18,    19,    20,    24,    22,
+       7,     7,    25,    26,    27,    28,    29,     4,     5,    32,
+      33,     8,     7,    13,    37,    12,    10,    10,    41,    11,
+       8,    18,    19,    20,    13,    22,     7,    13,    25,    26,
+      27,    28,    29,     4,     5,    32,    33,     8,     8,     8,
+      37,    12,     4,    41,    41,    13,    11,    18,    19,    20,
+      13,    22,    11,    13,    25,    26,    27,    28,    29,     4,
+       5,    32,    33,     8,    13,    13,    37,    12,     8,    13,
+      41,    13,    13,    18,    19,    20,     8,    22,    13,     7,
+      25,    26,    27,    28,    29,     4,    13,    32,    33,     8,
+      41,     8,    37,    12,     7,    13,    41,    13,    13,    18,
+      19,    20,    13,    22,     8,     7,    25,    26,    27,    28,
+      29,     8,     7,    32,    33,    25,    17,   166,    52,   235,
+     116,    58,    41,    -1,    -1,    86
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const unsigned char yystos[] =
 {
-       0,     3,     8,    15,    16,    23,    43,    44,    45,    46,
-      47,    48,    36,    41,    41,     4,     3,     0,     1,    45,
-       4,     4,     6,     5,    41,    49,    50,    36,    41,     1,
-       5,     8,    17,    30,    31,    38,    39,    40,    41,    53,
-      54,    56,    57,    88,    89,    93,     5,    53,     7,    41,
-      52,     9,     1,     5,    50,     4,     4,    24,    31,    41,
-       6,     4,     4,     4,     1,     9,    24,     1,     5,    54,
-       5,     4,     1,     7,    10,    51,     5,    53,     5,    53,
-      41,     6,    24,    41,    65,     5,    41,    90,     5,    90,
-       5,    36,    41,    91,    92,    55,     4,     8,    12,    18,
-      19,    20,    22,    25,    26,    27,    28,    29,    32,    33,
-      41,    59,    61,    63,    67,    69,    80,    82,     5,    37,
-      69,    86,    87,     4,    41,    41,     5,     5,     8,    65,
-      69,    41,     7,     8,     1,     5,    41,     5,     1,     5,
-      92,     8,    13,    41,    58,    69,    41,    78,     6,     6,
-       6,     6,    36,    41,    66,    76,    66,    77,     8,     8,
-       8,     6,     6,     8,     9,    11,    81,    69,    69,    69,
-       5,    34,    35,    36,    84,    85,     7,    41,    64,    83,
-       8,     9,    41,     5,    87,     5,    86,     8,     7,    41,
-      41,     8,     8,    13,    41,    65,     8,     1,     5,    69,
-       6,     8,    68,    60,    41,    65,    62,    10,    13,    11,
-      41,    10,    13,     8,    10,    14,     8,    71,    74,    70,
-       6,    21,    21,    21,    41,    41,    11,     5,    85,    41,
-       7,    10,    75,     4,     5,    41,    24,    41,    65,    13,
-      11,     7,    79,    41,    64,    13,    11,    64,    66,    66,
-      41,    66,    66,    41,    66,    36,    66,    41,    41,    41,
-      69,    69,    69,    11,    11,    58,    41,    41,    58,    24,
-      69,    13,    11,    65,    65,    83,     7,     7,    65,    65,
-       7,    10,    13,    10,    13,    14,     8,     7,     8,    58,
-      58,     8,     5,    69,    65,    65,    13,    11,     7,     4,
-      13,    11,    66,    66,    66,    66,    36,    41,    72,    69,
-      13,    11,    65,    65,    65,    65,    41,    65,    65,    13,
-      13,    13,    13,     8,    13,    13,    65,    65,    65,    65,
-      73,    65,    65,     8,    13,     7,    13,    41,     8,    13,
-      65,    65,     7,    65,    13,    13,    69,    13,    65,    65,
-      65,     8,     7,     8
+       0,     3,     8,    15,    16,    23,    43,    44,    45,    47,
+      48,    49,    36,    41,    46,    41,     4,     3,     0,     1,
+      45,     4,     6,     5,    41,    50,    51,    46,     1,     5,
+       8,    17,    30,    31,    38,    39,    40,    41,    54,    55,
+      57,    58,    91,    92,    96,     7,    41,    53,     9,     1,
+       5,    51,     4,    24,    31,    41,     6,     4,     4,     4,
+       1,     9,    24,     1,     5,    55,     4,     1,     7,    10,
+      52,     5,    54,    41,     6,    24,    41,    66,     5,    41,
+      93,     5,    93,     5,    36,    41,    94,    95,    56,     4,
+       8,    12,    18,    19,    20,    22,    25,    26,    27,    28,
+      29,    32,    33,    41,    60,    62,    64,    68,    70,    82,
+      84,     5,    37,    70,    89,    90,     4,    41,    41,     5,
+       8,    66,    70,    41,     7,     8,     1,     5,    41,     5,
+       1,     5,    95,     8,    13,    41,    59,    70,    41,    80,
+       6,     6,     6,     6,    36,    41,    67,    78,    67,    79,
+       8,     8,     8,     6,     6,     8,     9,    11,    83,    70,
+      70,    70,     5,    34,    35,    36,    87,    88,     7,    41,
+      65,    86,     8,     9,    41,     5,    90,     5,    89,     8,
+       7,    41,    41,     8,     8,    13,    41,    66,     8,     1,
+       5,    70,     6,     8,    69,    61,    41,    66,    63,    10,
+      13,    11,    41,    10,    13,     8,    10,    14,     8,    72,
+      75,    71,     6,    21,    77,    77,    77,    41,    41,    11,
+       5,    88,    41,     7,    10,    76,     4,     5,    41,    24,
+      41,    66,    13,    11,     7,    81,    41,    65,    13,    11,
+      65,    67,    67,    41,    67,    67,    41,    67,    36,    67,
+      41,    41,    41,    70,    11,    11,    59,    41,    85,    41,
+      59,    24,    70,    13,    11,    66,    66,    86,     7,     7,
+      66,    66,     7,    10,    13,    10,    13,    14,     8,     7,
+       8,    59,    59,     8,     5,    70,    66,    66,    13,    11,
+       7,     4,    13,    11,    67,    67,    67,    67,    36,    41,
+      73,    70,    13,    11,    66,    66,    66,    66,    41,    66,
+      66,    13,    13,    13,    13,     8,    13,    13,    66,    66,
+      66,    66,    74,    66,    66,     8,    13,     7,    13,    41,
+       8,    13,    66,    66,     7,    66,    13,    13,    70,    13,
+      66,    66,    66,     8,     7,     8
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1313,293 +1288,311 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp)
   switch (yytype)
     {
       case 41: /* "word" */
-#line 152 "ael.y"
+#line 160 "ael.y"
         { free((yyvaluep->str));};
-#line 1319 "ael.tab.c"
+#line 1294 "ael.tab.c"
         break;
       case 44: /* "objects" */
-#line 141 "ael.y"
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1327 "ael.tab.c"
+#line 1302 "ael.tab.c"
         break;
       case 45: /* "object" */
-#line 141 "ael.y"
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1335 "ael.tab.c"
+#line 1310 "ael.tab.c"
+        break;
+      case 46: /* "word_or_default" */
+#line 160 "ael.y"
+        { free((yyvaluep->str));};
+#line 1315 "ael.tab.c"
         break;
-      case 46: /* "context" */
-#line 141 "ael.y"
+      case 47: /* "context" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1343 "ael.tab.c"
+#line 1323 "ael.tab.c"
         break;
-      case 47: /* "macro" */
-#line 141 "ael.y"
+      case 48: /* "macro" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1351 "ael.tab.c"
+#line 1331 "ael.tab.c"
         break;
-      case 48: /* "globals" */
-#line 141 "ael.y"
+      case 49: /* "globals" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1359 "ael.tab.c"
+#line 1339 "ael.tab.c"
         break;
-      case 49: /* "global_statements" */
-#line 141 "ael.y"
+      case 50: /* "global_statements" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1367 "ael.tab.c"
+#line 1347 "ael.tab.c"
         break;
-      case 50: /* "global_statement" */
-#line 141 "ael.y"
+      case 51: /* "global_statement" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1375 "ael.tab.c"
+#line 1355 "ael.tab.c"
         break;
-      case 52: /* "arglist" */
-#line 141 "ael.y"
+      case 53: /* "arglist" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1383 "ael.tab.c"
+#line 1363 "ael.tab.c"
         break;
-      case 53: /* "elements" */
-#line 141 "ael.y"
+      case 54: /* "elements" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1391 "ael.tab.c"
+#line 1371 "ael.tab.c"
         break;
-      case 54: /* "element" */
-#line 141 "ael.y"
+      case 55: /* "element" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1399 "ael.tab.c"
+#line 1379 "ael.tab.c"
         break;
-      case 56: /* "ignorepat" */
-#line 141 "ael.y"
+      case 57: /* "ignorepat" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1407 "ael.tab.c"
+#line 1387 "ael.tab.c"
         break;
-      case 57: /* "extension" */
-#line 141 "ael.y"
+      case 58: /* "extension" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1415 "ael.tab.c"
+#line 1395 "ael.tab.c"
         break;
-      case 58: /* "statements" */
-#line 141 "ael.y"
+      case 59: /* "statements" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1423 "ael.tab.c"
+#line 1403 "ael.tab.c"
         break;
-      case 59: /* "if_head" */
-#line 141 "ael.y"
+      case 60: /* "if_head" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1431 "ael.tab.c"
+#line 1411 "ael.tab.c"
         break;
-      case 61: /* "random_head" */
-#line 141 "ael.y"
+      case 62: /* "random_head" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1439 "ael.tab.c"
+#line 1419 "ael.tab.c"
         break;
-      case 63: /* "iftime_head" */
-#line 141 "ael.y"
+      case 64: /* "iftime_head" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1447 "ael.tab.c"
+#line 1427 "ael.tab.c"
         break;
-      case 64: /* "word_list" */
-#line 152 "ael.y"
+      case 65: /* "word_list" */
+#line 160 "ael.y"
         { free((yyvaluep->str));};
-#line 1452 "ael.tab.c"
+#line 1432 "ael.tab.c"
         break;
-      case 65: /* "word3_list" */
-#line 152 "ael.y"
+      case 66: /* "word3_list" */
+#line 160 "ael.y"
         { free((yyvaluep->str));};
-#line 1457 "ael.tab.c"
+#line 1437 "ael.tab.c"
         break;
-      case 66: /* "goto_word" */
-#line 152 "ael.y"
+      case 67: /* "goto_word" */
+#line 160 "ael.y"
         { free((yyvaluep->str));};
-#line 1462 "ael.tab.c"
+#line 1442 "ael.tab.c"
         break;
-      case 67: /* "switch_head" */
-#line 141 "ael.y"
+      case 68: /* "switch_head" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1470 "ael.tab.c"
+#line 1450 "ael.tab.c"
         break;
-      case 69: /* "statement" */
-#line 141 "ael.y"
+      case 70: /* "statement" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1478 "ael.tab.c"
+#line 1458 "ael.tab.c"
         break;
-      case 76: /* "target" */
-#line 141 "ael.y"
+      case 77: /* "opt_else" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1486 "ael.tab.c"
+#line 1466 "ael.tab.c"
         break;
-      case 77: /* "jumptarget" */
-#line 141 "ael.y"
+      case 78: /* "target" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1494 "ael.tab.c"
+#line 1474 "ael.tab.c"
         break;
-      case 78: /* "macro_call" */
-#line 141 "ael.y"
+      case 79: /* "jumptarget" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1502 "ael.tab.c"
+#line 1482 "ael.tab.c"
         break;
-      case 80: /* "application_call_head" */
-#line 141 "ael.y"
+      case 80: /* "macro_call" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1510 "ael.tab.c"
+#line 1490 "ael.tab.c"
         break;
-      case 82: /* "application_call" */
-#line 141 "ael.y"
+      case 82: /* "application_call_head" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1518 "ael.tab.c"
+#line 1498 "ael.tab.c"
         break;
-      case 83: /* "eval_arglist" */
-#line 141 "ael.y"
+      case 84: /* "application_call" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1526 "ael.tab.c"
+#line 1506 "ael.tab.c"
         break;
-      case 84: /* "case_statements" */
-#line 141 "ael.y"
+      case 85: /* "opt_word" */
+#line 160 "ael.y"
+        { free((yyvaluep->str));};
+#line 1511 "ael.tab.c"
+        break;
+      case 86: /* "eval_arglist" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1534 "ael.tab.c"
+#line 1519 "ael.tab.c"
         break;
-      case 85: /* "case_statement" */
-#line 141 "ael.y"
+      case 87: /* "case_statements" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1542 "ael.tab.c"
+#line 1527 "ael.tab.c"
         break;
-      case 86: /* "macro_statements" */
-#line 141 "ael.y"
+      case 88: /* "case_statement" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1550 "ael.tab.c"
+#line 1535 "ael.tab.c"
         break;
-      case 87: /* "macro_statement" */
-#line 141 "ael.y"
+      case 89: /* "macro_statements" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1558 "ael.tab.c"
+#line 1543 "ael.tab.c"
         break;
-      case 88: /* "switches" */
-#line 141 "ael.y"
+      case 90: /* "macro_statement" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1566 "ael.tab.c"
+#line 1551 "ael.tab.c"
         break;
-      case 89: /* "eswitches" */
-#line 141 "ael.y"
+      case 91: /* "switches" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1574 "ael.tab.c"
+#line 1559 "ael.tab.c"
         break;
-      case 90: /* "switchlist" */
-#line 141 "ael.y"
+      case 92: /* "eswitches" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1582 "ael.tab.c"
+#line 1567 "ael.tab.c"
         break;
-      case 91: /* "includeslist" */
-#line 141 "ael.y"
+      case 93: /* "switchlist" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1590 "ael.tab.c"
+#line 1575 "ael.tab.c"
         break;
-      case 92: /* "includedname" */
-#line 152 "ael.y"
+      case 94: /* "includeslist" */
+#line 148 "ael.y"
+        {
+               destroy_pval((yyvaluep->pval));
+               prev_word=0;
+       };
+#line 1583 "ael.tab.c"
+        break;
+      case 95: /* "includedname" */
+#line 160 "ael.y"
         { free((yyvaluep->str));};
-#line 1595 "ael.tab.c"
+#line 1588 "ael.tab.c"
         break;
-      case 93: /* "includes" */
-#line 141 "ael.y"
+      case 96: /* "includes" */
+#line 148 "ael.y"
         {
                destroy_pval((yyvaluep->pval));
                prev_word=0;
        };
-#line 1603 "ael.tab.c"
+#line 1596 "ael.tab.c"
         break;
 
       default:
@@ -1916,17 +1909,17 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 157 "ael.y"
+#line 165 "ael.y"
     { (yyval.pval) = parseio->pval = (yyvsp[0].pval); ;}
     break;
 
   case 3:
-#line 160 "ael.y"
+#line 168 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 4:
-#line 162 "ael.y"
+#line 170 "ael.y"
     {
                        if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {
                                (yyval.pval)=(yyvsp[-1].pval);
@@ -1940,62 +1933,57 @@ yyreduce:
     break;
 
   case 5:
-#line 172 "ael.y"
+#line 180 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
   case 6:
-#line 175 "ael.y"
+#line 183 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 7:
-#line 176 "ael.y"
+#line 184 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 8:
-#line 177 "ael.y"
+#line 185 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
   case 9:
-#line 178 "ael.y"
+#line 186 "ael.y"
     {(yyval.pval)=0;/* allow older docs to be read */;}
     break;
 
   case 10:
-#line 181 "ael.y"
-    {
-               (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
-               (yyval.pval)->u1.str = (yyvsp[-3].str);
-               (yyval.pval)->u2.statements = (yyvsp[-1].pval); ;}
+#line 189 "ael.y"
+    { (yyval.str) = (yyvsp[0].str); ;}
     break;
 
   case 11:
-#line 185 "ael.y"
-    {
-               (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-3]), &(yylsp[0]));
-               (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
+#line 190 "ael.y"
+    { (yyval.str) = strdup("default"); ;}
     break;
 
   case 12:
-#line 188 "ael.y"
+#line 193 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
-               (yyval.pval)->u1.str = strdup("default");
+               (yyval.pval)->u1.str = (yyvsp[-3].str);
                (yyval.pval)->u2.statements = (yyvsp[-1].pval); ;}
     break;
 
   case 13:
-#line 192 "ael.y"
+#line 197 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-3]), &(yylsp[0]));
-               (yyval.pval)->u1.str = strdup("default"); ;}
+               (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
     break;
 
   case 14:
-#line 195 "ael.y"
+#line 200 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-5]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-3].str);
@@ -2004,7 +1992,7 @@ yyreduce:
     break;
 
   case 15:
-#line 200 "ael.y"
+#line 205 "ael.y"
     {
                (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2012,200 +2000,182 @@ yyreduce:
     break;
 
   case 16:
-#line 204 "ael.y"
-    {
-               (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-5]), &(yylsp[0]));
-               (yyval.pval)->u1.str = strdup("default");
-               (yyval.pval)->u2.statements = (yyvsp[-1].pval);
-               (yyval.pval)->u3.abstract = 1; ;}
-    break;
-
-  case 17:
-#line 209 "ael.y"
-    {
-               (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[-4]), &(yylsp[0]));
-               (yyval.pval)->u1.str = strdup("default");
-               (yyval.pval)->u3.abstract = 1; ;}
-    break;
-
-  case 18:
-#line 215 "ael.y"
+#line 229 "ael.y"
     {
                (yyval.pval) = npval2(PV_MACRO, &(yylsp[-7]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-6].str); (yyval.pval)->u2.arglist = (yyvsp[-4].pval); (yyval.pval)->u3.macro_statements = (yyvsp[-1].pval); ;}
     break;
 
-  case 19:
-#line 218 "ael.y"
+  case 17:
+#line 232 "ael.y"
     {
                (yyval.pval) = npval2(PV_MACRO, &(yylsp[-6]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-5].str); (yyval.pval)->u2.arglist = (yyvsp[-3].pval); ;}
     break;
 
-  case 20:
-#line 221 "ael.y"
+  case 18:
+#line 235 "ael.y"
     {
                (yyval.pval) = npval2(PV_MACRO, &(yylsp[-6]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-5].str);
                (yyval.pval)->u3.macro_statements = (yyvsp[-1].pval); ;}
     break;
 
-  case 21:
-#line 225 "ael.y"
+  case 19:
+#line 239 "ael.y"
     {
                (yyval.pval) = npval2(PV_MACRO, &(yylsp[-5]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-4].str); ;}
     break;
 
-  case 22:
-#line 230 "ael.y"
+  case 20:
+#line 244 "ael.y"
     {
                (yyval.pval) = npval2(PV_GLOBALS, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.statements = (yyvsp[-1].pval);;}
     break;
 
-  case 23:
-#line 233 "ael.y"
+  case 21:
+#line 247 "ael.y"
     { /* empty globals is OK */
                (yyval.pval) = npval2(PV_GLOBALS, &(yylsp[-2]), &(yylsp[0])); ;}
     break;
 
-  case 24:
-#line 237 "ael.y"
+  case 22:
+#line 251 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 25:
-#line 238 "ael.y"
+  case 23:
+#line 252 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));;}
     break;
 
-  case 26:
-#line 239 "ael.y"
+  case 24:
+#line 253 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
-  case 27:
-#line 242 "ael.y"
+  case 25:
+#line 256 "ael.y"
     { reset_semicount(parseio->scanner); ;}
     break;
 
-  case 28:
-#line 242 "ael.y"
+  case 26:
+#line 256 "ael.y"
     {
                (yyval.pval) = npval2(PV_VARDEC, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
                (yyval.pval)->u2.val = (yyvsp[-1].str); ;}
     break;
 
-  case 29:
-#line 248 "ael.y"
+  case 27:
+#line 262 "ael.y"
     {
                (yyval.pval)= npval2(PV_WORD, &(yylsp[0]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[0].str); ;}
     break;
 
-  case 30:
-#line 251 "ael.y"
+  case 28:
+#line 265 "ael.y"
     {
                pval *z = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[0]));
                z->u1.str = (yyvsp[0].str);
-               (yyval.pval)=(yyvsp[-2].pval);
-               linku1((yyval.pval),z); ;}
+               (yyval.pval) = linku1((yyvsp[-2].pval),z); ;}
     break;
 
-  case 31:
-#line 256 "ael.y"
+  case 29:
+#line 269 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
-  case 32:
-#line 259 "ael.y"
+  case 30:
+#line 272 "ael.y"
     { (yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 33:
-#line 260 "ael.y"
+  case 31:
+#line 273 "ael.y"
     {(yyval.pval)=0;;}
     break;
 
-  case 34:
-#line 261 "ael.y"
+  case 32:
+#line 274 "ael.y"
     { if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));}
                                else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);}
                                else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;}
     break;
 
-  case 35:
-#line 264 "ael.y"
+  case 33:
+#line 277 "ael.y"
     { (yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
-  case 36:
-#line 267 "ael.y"
+  case 34:
+#line 280 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 37:
-#line 268 "ael.y"
+  case 35:
+#line 281 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 38:
-#line 269 "ael.y"
+  case 36:
+#line 282 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 39:
-#line 270 "ael.y"
+  case 37:
+#line 283 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 40:
-#line 271 "ael.y"
+  case 38:
+#line 284 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 41:
-#line 272 "ael.y"
+  case 39:
+#line 285 "ael.y"
     { reset_semicount(parseio->scanner); ;}
     break;
 
-  case 42:
-#line 272 "ael.y"
+  case 40:
+#line 285 "ael.y"
     {
                (yyval.pval) = npval2(PV_VARDEC, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
                (yyval.pval)->u2.val = (yyvsp[-1].str); ;}
     break;
 
-  case 43:
-#line 276 "ael.y"
+  case 41:
+#line 289 "ael.y"
     {free((yyvsp[-1].str)); (yyval.pval)=0;;}
     break;
 
-  case 44:
-#line 277 "ael.y"
+  case 42:
+#line 290 "ael.y"
     {(yyval.pval)=0;/* allow older docs to be read */;}
     break;
 
-  case 45:
-#line 280 "ael.y"
+  case 43:
+#line 293 "ael.y"
     {
                (yyval.pval) = npval2(PV_IGNOREPAT, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 46:
-#line 285 "ael.y"
+  case 44:
+#line 298 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
                (yyval.pval)->u2.statements = (yyvsp[0].pval); ;}
     break;
 
-  case 47:
-#line 289 "ael.y"
+  case 45:
+#line 302 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2213,8 +2183,8 @@ yyreduce:
                (yyval.pval)->u4.regexten=1;;}
     break;
 
-  case 48:
-#line 294 "ael.y"
+  case 46:
+#line 307 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[-6]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2222,8 +2192,8 @@ yyreduce:
                (yyval.pval)->u3.hints = (yyvsp[-4].str);;}
     break;
 
-  case 49:
-#line 299 "ael.y"
+  case 47:
+#line 312 "ael.y"
     {
                (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[-7]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2232,49 +2202,49 @@ yyreduce:
                (yyval.pval)->u3.hints = (yyvsp[-4].str);;}
     break;
 
-  case 50:
-#line 308 "ael.y"
+  case 48:
+#line 321 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 51:
-#line 309 "ael.y"
+  case 49:
+#line 322 "ael.y"
     {if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));}
                                                 else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);}
                                                 else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;}
     break;
 
-  case 52:
-#line 312 "ael.y"
+  case 50:
+#line 325 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
-  case 53:
-#line 315 "ael.y"
+  case 51:
+#line 328 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
-  case 54:
-#line 315 "ael.y"
+  case 52:
+#line 328 "ael.y"
     {
                (yyval.pval)= npval2(PV_IF, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str); ;}
     break;
 
-  case 55:
-#line 320 "ael.y"
+  case 53:
+#line 333 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
-  case 56:
-#line 320 "ael.y"
+  case 54:
+#line 333 "ael.y"
     {
                (yyval.pval) = npval2(PV_RANDOM, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str=(yyvsp[-1].str);;}
     break;
 
-  case 57:
-#line 326 "ael.y"
+  case 55:
+#line 339 "ael.y"
     {
                (yyval.pval) = npval2(PV_IFTIME, &(yylsp[-13]), &(yylsp[-9])); /* XXX really @5 or more ? */
                (yyval.pval)->u1.list = npval2(PV_WORD, &(yylsp[-11]), &(yylsp[-11]));
@@ -2292,8 +2262,8 @@ yyreduce:
        ;}
     break;
 
-  case 58:
-#line 341 "ael.y"
+  case 56:
+#line 354 "ael.y"
     {
                (yyval.pval) = npval2(PV_IFTIME, &(yylsp[-9]), &(yylsp[-5])); /* XXX @5 or greater ? */
                (yyval.pval)->u1.list = npval2(PV_WORD, &(yylsp[-7]), &(yylsp[-7]));
@@ -2308,13 +2278,13 @@ yyreduce:
        ;}
     break;
 
-  case 59:
-#line 361 "ael.y"
+  case 57:
+#line 374 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
-  case 60:
-#line 362 "ael.y"
+  case 58:
+#line 375 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-1].str));
@@ -2322,13 +2292,13 @@ yyreduce:
                prev_word = (yyval.str);;}
     break;
 
-  case 61:
-#line 369 "ael.y"
+  case 59:
+#line 382 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
-  case 62:
-#line 370 "ael.y"
+  case 60:
+#line 383 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-1].str));
@@ -2336,8 +2306,8 @@ yyreduce:
                prev_word = (yyval.str);;}
     break;
 
-  case 63:
-#line 375 "ael.y"
+  case 61:
+#line 388 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s%s", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-2].str));
@@ -2346,97 +2316,97 @@ yyreduce:
                prev_word=(yyval.str);;}
     break;
 
-  case 64:
-#line 383 "ael.y"
+  case 62:
+#line 396 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
-  case 65:
-#line 384 "ael.y"
+  case 63:
+#line 397 "ael.y"
     {
                asprintf(&((yyval.str)), "%s%s", (yyvsp[-1].str), (yyvsp[0].str));
                free((yyvsp[-1].str));
                free((yyvsp[0].str));;}
     break;
 
-  case 66:
-#line 388 "ael.y"
+  case 64:
+#line 401 "ael.y"
     {
                asprintf(&((yyval.str)), "%s:%s", (yyvsp[-2].str), (yyvsp[0].str));
                free((yyvsp[-2].str));
                free((yyvsp[0].str));;}
     break;
 
-  case 67:
-#line 394 "ael.y"
+  case 65:
+#line 407 "ael.y"
     { reset_parencount(parseio->scanner); ;}
     break;
 
-  case 68:
-#line 394 "ael.y"
+  case 66:
+#line 407 "ael.y"
     {
                (yyval.pval) = npval2(PV_SWITCH, &(yylsp[-5]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
     break;
 
-  case 69:
-#line 402 "ael.y"
+  case 67:
+#line 415 "ael.y"
     {
                (yyval.pval) = npval2(PV_STATEMENTBLOCK, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval); ;}
     break;
 
-  case 70:
-#line 405 "ael.y"
+  case 68:
+#line 418 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 71:
-#line 405 "ael.y"
+  case 69:
+#line 418 "ael.y"
     {
                (yyval.pval) = npval2(PV_VARDEC, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
                (yyval.pval)->u2.val = (yyvsp[-1].str); ;}
     break;
 
-  case 72:
-#line 409 "ael.y"
+  case 70:
+#line 422 "ael.y"
     {
                (yyval.pval) = npval2(PV_GOTO, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval);;}
     break;
 
-  case 73:
-#line 412 "ael.y"
+  case 71:
+#line 425 "ael.y"
     {
                (yyval.pval) = npval2(PV_GOTO, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval);;}
     break;
 
-  case 74:
-#line 415 "ael.y"
+  case 72:
+#line 428 "ael.y"
     {
                (yyval.pval) = npval2(PV_LABEL, &(yylsp[-1]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str); ;}
     break;
 
-  case 75:
-#line 418 "ael.y"
+  case 73:
+#line 431 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 76:
-#line 419 "ael.y"
+  case 74:
+#line 432 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 77:
-#line 420 "ael.y"
+  case 75:
+#line 433 "ael.y"
     {reset_parencount(parseio->scanner);;}
     break;
 
-  case 78:
-#line 420 "ael.y"
+  case 76:
+#line 433 "ael.y"
     {
                (yyval.pval) = npval2(PV_FOR, &(yylsp[-11]), &(yylsp[0]));
                (yyval.pval)->u1.for_init = (yyvsp[-8].str);
@@ -2445,29 +2415,29 @@ yyreduce:
                (yyval.pval)->u4.for_statements = (yyvsp[0].pval);;}
     break;
 
-  case 79:
-#line 426 "ael.y"
+  case 77:
+#line 439 "ael.y"
     {reset_parencount(parseio->scanner);;}
     break;
 
-  case 80:
-#line 426 "ael.y"
+  case 78:
+#line 439 "ael.y"
     {
                (yyval.pval) = npval2(PV_WHILE, &(yylsp[-5]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
                (yyval.pval)->u2.statements = (yyvsp[0].pval); ;}
     break;
 
-  case 81:
-#line 430 "ael.y"
+  case 79:
+#line 443 "ael.y"
     {
                (yyval.pval)=(yyvsp[-1].pval);
                (yyval.pval)->endline = (yylsp[0]).last_line;
                (yyval.pval)->endcol = (yylsp[0]).last_column;;}
     break;
 
-  case 82:
-#line 434 "ael.y"
+  case 80:
+#line 447 "ael.y"
     {
                (yyval.pval)=(yyvsp[-2].pval);
                (yyval.pval)->u2.statements = (yyvsp[-1].pval);
@@ -2475,36 +2445,36 @@ yyreduce:
                (yyval.pval)->endcol = (yylsp[0]).last_column;;}
     break;
 
-  case 83:
-#line 439 "ael.y"
+  case 81:
+#line 452 "ael.y"
     {
                (yyval.pval) = (yyvsp[-1].pval);
                (yyval.pval)->endline = (yylsp[-1]).last_line;
                (yyval.pval)->endcol = (yylsp[-1]).last_column;;}
     break;
 
-  case 84:
-#line 443 "ael.y"
+  case 82:
+#line 456 "ael.y"
     {
                (yyval.pval) = (yyvsp[-1].pval);
                (yyval.pval)->endline = (yylsp[0]).last_line;
                (yyval.pval)->endcol = (yylsp[0]).last_column;;}
     break;
 
-  case 85:
-#line 447 "ael.y"
+  case 83:
+#line 460 "ael.y"
     {
                (yyval.pval)= npval2(PV_APPLICATION_CALL, &(yylsp[-1]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 86:
-#line 450 "ael.y"
+  case 84:
+#line 463 "ael.y"
     {reset_semicount(parseio->scanner);;}
     break;
 
-  case 87:
-#line 450 "ael.y"
+  case 85:
+#line 463 "ael.y"
     {
                char *bufx;
                int tot=0;
@@ -2540,91 +2510,74 @@ yyreduce:
        ;}
     break;
 
-  case 88:
-#line 483 "ael.y"
+  case 86:
+#line 496 "ael.y"
     { (yyval.pval) = npval2(PV_BREAK, &(yylsp[-1]), &(yylsp[0])); ;}
     break;
 
-  case 89:
-#line 484 "ael.y"
+  case 87:
+#line 497 "ael.y"
     { (yyval.pval) = npval2(PV_RETURN, &(yylsp[-1]), &(yylsp[0])); ;}
     break;
 
-  case 90:
-#line 485 "ael.y"
+  case 88:
+#line 498 "ael.y"
     { (yyval.pval) = npval2(PV_CONTINUE, &(yylsp[-1]), &(yylsp[0])); ;}
     break;
 
-  case 91:
-#line 486 "ael.y"
-    {
-               (yyval.pval)=(yyvsp[-1].pval);
-               (yyval.pval)->u2.statements = (yyvsp[0].pval);
-               (yyval.pval)->endline = (yylsp[0]).last_line;
-               (yyval.pval)->endcol = (yylsp[0]).last_column;;}
-    break;
-
-  case 92:
-#line 491 "ael.y"
+  case 89:
+#line 499 "ael.y"
     {
-               (yyval.pval)=(yyvsp[-3].pval);
-               (yyval.pval)->u2.statements = (yyvsp[-2].pval);
-               (yyval.pval)->endline = (yylsp[-2]).last_line;
-               (yyval.pval)->endcol = (yylsp[-2]).last_column;
-               (yyval.pval)->u3.else_statements = (yyvsp[0].pval);;}
+               (yyval.pval)=(yyvsp[-2].pval);
+               (yyval.pval)->u2.statements = (yyvsp[-1].pval);
+               (yyval.pval)->endline = (yylsp[-1]).last_line;
+               (yyval.pval)->u3.else_statements = (yyvsp[0].pval);
+               (yyval.pval)->endcol = (yylsp[-1]).last_column;;}
     break;
 
-  case 93:
-#line 497 "ael.y"
+  case 90:
+#line 513 "ael.y"
     {
-               (yyval.pval)=(yyvsp[-1].pval);
-               (yyval.pval)->u2.statements = (yyvsp[0].pval);
-               (yyval.pval)->endline = (yylsp[0]).last_line;
-               (yyval.pval)->endcol = (yylsp[0]).last_column;;}
+               (yyval.pval)=(yyvsp[-2].pval);
+               (yyval.pval)->u2.statements = (yyvsp[-1].pval);
+               (yyval.pval)->endline = (yylsp[-1]).last_line;
+               (yyval.pval)->u3.else_statements = (yyvsp[0].pval);
+               (yyval.pval)->endcol = (yylsp[-1]).last_column;;}
     break;
 
-  case 94:
-#line 502 "ael.y"
+  case 91:
+#line 527 "ael.y"
     {
-               (yyval.pval)=(yyvsp[-3].pval);
-               (yyval.pval)->u2.statements = (yyvsp[-2].pval);
-               (yyval.pval)->endline = (yylsp[-2]).last_line;
-               (yyval.pval)->endcol = (yylsp[-2]).last_column;
-               (yyval.pval)->u3.else_statements = (yyvsp[0].pval);;}
+               (yyval.pval)=(yyvsp[-2].pval);
+               (yyval.pval)->u2.statements = (yyvsp[-1].pval);
+               (yyval.pval)->endline = (yylsp[-1]).last_line;
+               (yyval.pval)->u3.else_statements = (yyvsp[0].pval);
+               (yyval.pval)->endcol = (yylsp[-1]).last_column;;}
     break;
 
-  case 95:
-#line 508 "ael.y"
-    {
-               (yyval.pval)=(yyvsp[-1].pval);
-               (yyval.pval)->u2.statements = (yyvsp[0].pval);
-               (yyval.pval)->endline = (yylsp[0]).last_line;
-               (yyval.pval)->endcol = (yylsp[0]).last_column;;}
+  case 92:
+#line 541 "ael.y"
+    { (yyval.pval)=0; ;}
     break;
 
-  case 96:
-#line 513 "ael.y"
-    {
-               (yyval.pval)=(yyvsp[-3].pval);
-               (yyval.pval)->u2.statements = (yyvsp[-2].pval);
-               (yyval.pval)->endline = (yylsp[-2]).last_line;
-               (yyval.pval)->endcol = (yylsp[-2]).last_column;
-               (yyval.pval)->u3.else_statements = (yyvsp[0].pval);;}
+  case 93:
+#line 544 "ael.y"
+    { (yyval.pval) = (yyvsp[0].pval); ;}
     break;
 
-  case 97:
-#line 519 "ael.y"
-    { (yyval.pval)=0; ;}
+  case 94:
+#line 545 "ael.y"
+    { (yyval.pval) = NULL ; ;}
     break;
 
-  case 98:
-#line 522 "ael.y"
+  case 95:
+#line 550 "ael.y"
     { (yyval.pval) = npval2(PV_WORD, &(yylsp[0]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 99:
-#line 524 "ael.y"
+  case 96:
+#line 552 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[-2]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2632,8 +2585,8 @@ yyreduce:
                (yyval.pval)->next->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 100:
-#line 529 "ael.y"
+  case 97:
+#line 557 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[-2]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2641,8 +2594,8 @@ yyreduce:
                (yyval.pval)->next->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 101:
-#line 534 "ael.y"
+  case 98:
+#line 562 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
@@ -2652,8 +2605,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[0].str); ;}
     break;
 
-  case 102:
-#line 541 "ael.y"
+  case 99:
+#line 569 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = (yyvsp[-4].str);
@@ -2663,8 +2616,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[0].str); ;}
     break;
 
-  case 103:
-#line 548 "ael.y"
+  case 100:
+#line 576 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = strdup("default");
@@ -2674,8 +2627,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[0].str); ;}
     break;
 
-  case 104:
-#line 555 "ael.y"
+  case 101:
+#line 583 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = strdup("default");
@@ -2685,8 +2638,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[0].str); ;}
     break;
 
-  case 105:
-#line 564 "ael.y"
+  case 102:
+#line 592 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[0]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[0].str);
@@ -2694,8 +2647,8 @@ yyreduce:
                (yyval.pval)->next->u1.str = strdup("1");;}
     break;
 
-  case 106:
-#line 569 "ael.y"
+  case 103:
+#line 597 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[-2]));
                (yyval.pval)->u1.str = (yyvsp[-2].str);
@@ -2703,8 +2656,8 @@ yyreduce:
                (yyval.pval)->next->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 107:
-#line 574 "ael.y"
+  case 104:
+#line 602 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = (yyvsp[0].str);
@@ -2714,8 +2667,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[-2].str); ;}
     break;
 
-  case 108:
-#line 581 "ael.y"
+  case 105:
+#line 609 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[-2]));
                (yyval.pval)->u1.str = (yyvsp[0].str);
@@ -2725,8 +2678,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = strdup("1"); ;}
     break;
 
-  case 109:
-#line 588 "ael.y"
+  case 106:
+#line 616 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-4]), &(yylsp[-4]));
                (yyval.pval)->u1.str = strdup("default");
@@ -2736,8 +2689,8 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = (yyvsp[-2].str); ;}
     break;
 
-  case 110:
-#line 595 "ael.y"
+  case 107:
+#line 623 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-2]), &(yylsp[-2]));
                (yyval.pval)->u1.str = strdup("default");
@@ -2747,13 +2700,13 @@ yyreduce:
                (yyval.pval)->next->next->u1.str = strdup("1"); ;}
     break;
 
-  case 111:
-#line 604 "ael.y"
+  case 108:
+#line 632 "ael.y"
     {reset_argcount(parseio->scanner);;}
     break;
 
-  case 112:
-#line 604 "ael.y"
+  case 109:
+#line 632 "ael.y"
     {
                /* XXX original code had @2 but i think we need @5 */
                (yyval.pval) = npval2(PV_MACRO_CALL, &(yylsp[-4]), &(yylsp[0]));
@@ -2761,20 +2714,20 @@ yyreduce:
                (yyval.pval)->u2.arglist = (yyvsp[-1].pval);;}
     break;
 
-  case 113:
-#line 609 "ael.y"
+  case 110:
+#line 637 "ael.y"
     {
                (yyval.pval)= npval2(PV_MACRO_CALL, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
     break;
 
-  case 114:
-#line 614 "ael.y"
+  case 111:
+#line 642 "ael.y"
     {reset_argcount(parseio->scanner);;}
     break;
 
-  case 115:
-#line 614 "ael.y"
+  case 112:
+#line 642 "ael.y"
     {
                if (strcasecmp((yyvsp[-2].str),"goto") == 0) {
                        (yyval.pval)= npval2(PV_GOTO, &(yylsp[-2]), &(yylsp[0]));
@@ -2785,8 +2738,8 @@ yyreduce:
                (yyval.pval)->u1.str = (yyvsp[-2].str); ;}
     break;
 
-  case 116:
-#line 624 "ael.y"
+  case 113:
+#line 652 "ael.y"
     {(yyval.pval) = (yyvsp[-2].pval);
                if( (yyval.pval)->type == PV_GOTO )
                        (yyval.pval)->u1.list = (yyvsp[-1].pval);
@@ -2795,27 +2748,37 @@ yyreduce:
                (yyval.pval)->endline = (yylsp[0]).last_line; (yyval.pval)->endcol = (yylsp[0]).last_column;;}
     break;
 
-  case 117:
-#line 630 "ael.y"
+  case 114:
+#line 658 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);(yyval.pval)->endline = (yylsp[0]).last_line; (yyval.pval)->endcol = (yylsp[0]).last_column;;}
     break;
 
-  case 118:
-#line 633 "ael.y"
+  case 115:
+#line 661 "ael.y"
+    { (yyval.str) = (yyvsp[0].str) ;}
+    break;
+
+  case 116:
+#line 662 "ael.y"
+    { (yyval.str) = strdup(""); ;}
+    break;
+
+  case 117:
+#line 665 "ael.y"
     { 
                (yyval.pval)= npval2(PV_WORD, &(yylsp[0]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 119:
-#line 636 "ael.y"
+  case 118:
+#line 668 "ael.y"
     {
                (yyval.pval)= npval(PV_WORD,0/*@1.first_line*/,0/*@1.last_line*/,0/* @1.first_column*/, 0/*@1.last_column*/);
                (yyval.pval)->u1.str = strdup(""); ;}
     break;
 
-  case 120:
-#line 639 "ael.y"
+  case 119:
+#line 671 "ael.y"
     {
                pval *z = npval2(PV_WORD, &(yylsp[0]), &(yylsp[0]));
                (yyval.pval) = (yyvsp[-2].pval);
@@ -2823,132 +2786,123 @@ yyreduce:
                z->u1.str = (yyvsp[0].str);;}
     break;
 
-  case 121:
-#line 644 "ael.y"
-    {
-               pval *z = npval2(PV_WORD, &(yylsp[0]), &(yylsp[0]));
-               (yyval.pval) = (yyvsp[-1].pval);
-               linku1((yyvsp[-1].pval),z);
-               z->u1.str = strdup("");;}
-    break;
-
-  case 122:
-#line 651 "ael.y"
+  case 120:
+#line 685 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 123:
-#line 652 "ael.y"
+  case 121:
+#line 686 "ael.y"
     { if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));}
                                                 else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);}
                                                 else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;}
     break;
 
-  case 124:
-#line 657 "ael.y"
+  case 122:
+#line 691 "ael.y"
     {
                (yyval.pval) = npval2(PV_CASE, &(yylsp[-3]), &(yylsp[-1])); /* XXX 3 or 4 ? */
                (yyval.pval)->u1.str = (yyvsp[-2].str);
                (yyval.pval)->u2.statements = (yyvsp[0].pval);;}
     break;
 
-  case 125:
-#line 661 "ael.y"
+  case 123:
+#line 695 "ael.y"
     {
                (yyval.pval) = npval2(PV_DEFAULT, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = NULL;
                (yyval.pval)->u2.statements = (yyvsp[0].pval);;}
     break;
 
-  case 126:
-#line 665 "ael.y"
+  case 124:
+#line 699 "ael.y"
     {
                (yyval.pval) = npval2(PV_PATTERN, &(yylsp[-3]), &(yylsp[0])); /* XXX@3 or @4 ? */
                (yyval.pval)->u1.str = (yyvsp[-2].str);
                (yyval.pval)->u2.statements = (yyvsp[0].pval);;}
     break;
 
-  case 127:
-#line 669 "ael.y"
+  case 125:
+#line 703 "ael.y"
     {
                (yyval.pval) = npval2(PV_CASE, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 128:
-#line 672 "ael.y"
+  case 126:
+#line 706 "ael.y"
     {
                (yyval.pval) = npval2(PV_DEFAULT, &(yylsp[-1]), &(yylsp[0]));
                (yyval.pval)->u1.str = NULL;;}
     break;
 
-  case 129:
-#line 675 "ael.y"
+  case 127:
+#line 709 "ael.y"
     {
                (yyval.pval) = npval2(PV_PATTERN, &(yylsp[-2]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 130:
-#line 680 "ael.y"
+  case 128:
+#line 714 "ael.y"
     {(yyval.pval) = (yyvsp[0].pval);;}
     break;
 
-  case 131:
-#line 681 "ael.y"
+  case 129:
+#line 715 "ael.y"
     { if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));}
                                                 else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);}
                                                 else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;}
     break;
 
-  case 132:
-#line 686 "ael.y"
+  case 130:
+#line 720 "ael.y"
     {(yyval.pval)=(yyvsp[0].pval);;}
     break;
 
-  case 133:
-#line 687 "ael.y"
+  case 131:
+#line 721 "ael.y"
     {
                (yyval.pval) = npval2(PV_CATCH, &(yylsp[-4]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-3].str);
                (yyval.pval)->u2.statements = (yyvsp[-1].pval);;}
     break;
 
-  case 134:
-#line 693 "ael.y"
+  case 132:
+#line 727 "ael.y"
     {
                (yyval.pval) = npval2(PV_SWITCHES, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval); ;}
     break;
 
-  case 135:
-#line 696 "ael.y"
+  case 133:
+#line 730 "ael.y"
     {
                (yyval.pval) = npval2(PV_SWITCHES, &(yylsp[-2]), &(yylsp[0])); ;}
     break;
 
-  case 136:
-#line 700 "ael.y"
+  case 134:
+#line 734 "ael.y"
     {
                (yyval.pval) = npval2(PV_ESWITCHES, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval); ;}
     break;
 
-  case 137:
-#line 703 "ael.y"
+  case 135:
+#line 737 "ael.y"
     { /* empty switch list OK */
                (yyval.pval) = npval2(PV_ESWITCHES, &(yylsp[-2]), &(yylsp[0])); ;}
     break;
 
-  case 138:
-#line 707 "ael.y"
+  case 136:
+#line 741 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 139:
-#line 710 "ael.y"
+  case 137:
+#line 744 "ael.y"
     {
                pval *z = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0]));
                z->u1.str = (yyvsp[-1].str);
@@ -2956,20 +2910,20 @@ yyreduce:
                linku1((yyval.pval),z); ;}
     break;
 
-  case 140:
-#line 715 "ael.y"
+  case 138:
+#line 749 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
-  case 141:
-#line 718 "ael.y"
+  case 139:
+#line 752 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0]));
                (yyval.pval)->u1.str = (yyvsp[-1].str);;}
     break;
 
-  case 142:
-#line 722 "ael.y"
+  case 140:
+#line 756 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-13]), &(yylsp[-12]));
                (yyval.pval)->u1.str = (yyvsp[-13].str);
@@ -2988,8 +2942,8 @@ yyreduce:
        ;}
     break;
 
-  case 143:
-#line 738 "ael.y"
+  case 141:
+#line 772 "ael.y"
     {
                (yyval.pval) = npval2(PV_WORD, &(yylsp[-9]), &(yylsp[-8]));
                (yyval.pval)->u1.str = (yyvsp[-9].str);
@@ -3005,17 +2959,17 @@ yyreduce:
        ;}
     break;
 
-  case 144:
-#line 751 "ael.y"
+  case 142:
+#line 785 "ael.y"
     {
-               pval *z = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0])); /* XXX don't we need @1-@4 ?*/
+               pval *z = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0])); /* XXX don't we need @1-@3 ?*/
                (yyval.pval)=(yyvsp[-2].pval);
                z->u1.str = (yyvsp[-1].str);
                linku1((yyval.pval),z); ;}
     break;
 
-  case 145:
-#line 757 "ael.y"
+  case 143:
+#line 791 "ael.y"
     {
                pval *z = npval2(PV_WORD, &(yylsp[-13]), &(yylsp[-12]));
                (yyval.pval)=(yyvsp[-14].pval); z->u1.str = (yyvsp[-13].str);
@@ -3035,14 +2989,15 @@ yyreduce:
        ;}
     break;
 
-  case 146:
-#line 774 "ael.y"
+  case 144:
+#line 808 "ael.y"
     {
                pval *z = npval2(PV_WORD, &(yylsp[-9]), &(yylsp[-8]));
                (yyval.pval)=(yyvsp[-10].pval);
-               z->u1.str = (yyvsp[-9].str); linku1((yyval.pval),z);
-               z->u2.arglist = npval2(PV_WORD, &(yylsp[-7]), &(yylsp[-7]));
+               linku1((yyval.pval),z);
                (yyval.pval)->u2.arglist->u1.str = (yyvsp[-7].str);
+               z->u1.str = (yyvsp[-9].str);
+               z->u2.arglist = npval2(PV_WORD, &(yylsp[-7]), &(yylsp[-7]));    /* XXX is this correct ? */
                z->u2.arglist->next = npval2(PV_WORD, &(yylsp[-5]), &(yylsp[-5]));
                z->u2.arglist->next->u1.str = (yyvsp[-5].str);
                z->u2.arglist->next->next = npval2(PV_WORD, &(yylsp[-3]), &(yylsp[-3]));
@@ -3053,30 +3008,30 @@ yyreduce:
        ;}
     break;
 
-  case 147:
-#line 788 "ael.y"
+  case 145:
+#line 823 "ael.y"
     {(yyval.pval)=(yyvsp[-1].pval);;}
     break;
 
-  case 148:
-#line 791 "ael.y"
+  case 146:
+#line 826 "ael.y"
     { (yyval.str) = (yyvsp[0].str);;}
     break;
 
-  case 149:
-#line 792 "ael.y"
+  case 147:
+#line 827 "ael.y"
     {(yyval.str)=strdup("default");;}
     break;
 
-  case 150:
-#line 795 "ael.y"
+  case 148:
+#line 830 "ael.y"
     {
                (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[-3]), &(yylsp[0]));
                (yyval.pval)->u1.list = (yyvsp[-1].pval);;}
     break;
 
-  case 151:
-#line 798 "ael.y"
+  case 149:
+#line 833 "ael.y"
     {
                (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[-2]), &(yylsp[0]));;}
     break;
@@ -3086,7 +3041,7 @@ yyreduce:
     }
 
 /* Line 1126 of yacc.c.  */
-#line 3090 "ael.tab.c"
+#line 3045 "ael.tab.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -3361,7 +3316,7 @@ yyreturn:
 }
 
 
-#line 803 "ael.y"
+#line 838 "ael.y"
 
 
 static char *token_equivs1[] =
index ead9501..0e3fe31 100644 (file)
@@ -73,6 +73,8 @@ static pval *npval2(pvaltype type, YYLTYPE *first, YYLTYPE *last);
 %token KW_FOR KW_WHILE KW_CASE KW_PATTERN KW_DEFAULT KW_CATCH KW_SWITCHES KW_ESWITCHES
 %token KW_INCLUDES
 
+%right BAR COMMA
+
 %token <str> word
 
 %type <pval>includes
@@ -109,6 +111,11 @@ static pval *npval2(pvaltype type, YYLTYPE *first, YYLTYPE *last);
 %type <pval>object
 %type <pval>objects
 %type <pval>file
+/* XXX lr changes */
+%type <pval>opt_else
+
+%type <str>opt_word
+%type <str>word_or_default
 
 %type <str>goto_word
 %type <str>word_list
@@ -148,8 +155,9 @@ static pval *npval2(pvaltype type, YYLTYPE *first, YYLTYPE *last);
                if_head random_head iftime_head statements extension
                ignorepat element elements arglist global_statement
                global_statements globals macro context object objects
+               opt_else
 
-%destructor { free($$);}  word word_list goto_word word3_list includedname
+%destructor { free($$);}  word word_list goto_word word3_list includedname opt_word word_or_default
 
 
 %%
@@ -178,38 +186,44 @@ object : context {$$=$1;}
        | SEMI  {$$=0;/* allow older docs to be read */}
        ;
 
-context : KW_CONTEXT word LC elements RC {
+word_or_default : word { $$ = $1; }
+       | KW_DEFAULT { $$ = strdup("default"); }
+       ;
+
+context : KW_CONTEXT word_or_default LC elements RC {
                $$ = npval2(PV_CONTEXT, &@1, &@5);
                $$->u1.str = $2;
                $$->u2.statements = $4; }
-       | KW_CONTEXT word LC RC /* empty context OK */ {
+       | KW_CONTEXT word_or_default LC RC /* empty context OK */ {
                $$ = npval2(PV_CONTEXT, &@1, &@4);
                $$->u1.str = $2; }
-       | KW_CONTEXT KW_DEFAULT LC elements RC {
-               $$ = npval2(PV_CONTEXT, &@1, &@5);
-               $$->u1.str = strdup("default");
-               $$->u2.statements = $4; }
-       | KW_CONTEXT KW_DEFAULT LC RC /* empty context OK */ {
-               $$ = npval2(PV_CONTEXT, &@1, &@4);
-               $$->u1.str = strdup("default"); }
-       | KW_ABSTRACT KW_CONTEXT word LC elements RC {
+       | KW_ABSTRACT KW_CONTEXT word_or_default LC elements RC {
                $$ = npval2(PV_CONTEXT, &@1, &@6);
                $$->u1.str = $3;
                $$->u2.statements = $5;
                $$->u3.abstract = 1; }
-       | KW_ABSTRACT KW_CONTEXT word LC RC /* empty context OK */ {
+       | KW_ABSTRACT KW_CONTEXT word_or_default LC RC /* empty context OK */ {
                $$ = npval2(PV_CONTEXT, &@1, &@5);
                $$->u1.str = $3;
                $$->u3.abstract = 1; }
+/*
+       | KW_CONTEXT KW_DEFAULT LC elements RC {
+               $$ = npval2(PV_CONTEXT, &@1, &@5);
+               $$->u1.str = strdup("default");
+               $$->u2.statements = $4; }
+       | KW_CONTEXT KW_DEFAULT LC RC {
+               $$ = npval2(PV_CONTEXT, &@1, &@4);
+               $$->u1.str = strdup("default"); }
        | KW_ABSTRACT KW_CONTEXT KW_DEFAULT LC elements RC  {
                $$ = npval2(PV_CONTEXT, &@1, &@6);
                $$->u1.str = strdup("default");
                $$->u2.statements = $5;
                $$->u3.abstract = 1; }
-       | KW_ABSTRACT KW_CONTEXT KW_DEFAULT LC RC /* empty context OK */ {
+       | KW_ABSTRACT KW_CONTEXT KW_DEFAULT LC RC {
                $$ = npval2(PV_CONTEXT, &@1, &@5);
                $$->u1.str = strdup("default");
                $$->u3.abstract = 1; }
+*/
        ;
 
 macro : KW_MACRO word LP arglist RP LC macro_statements RC {
@@ -251,8 +265,7 @@ arglist : word {
        | arglist COMMA word {
                pval *z = npval2(PV_WORD, &@1, &@3);
                z->u1.str = $3;
-               $$=$1;
-               linku1($$,z); }
+               $$ = linku1($1,z); }
        | arglist error {$$=$1;}
        ;
 
@@ -483,42 +496,57 @@ statement : LC statements RC {
        | KW_BREAK SEMI { $$ = npval2(PV_BREAK, &@1, &@2); }
        | KW_RETURN SEMI { $$ = npval2(PV_RETURN, &@1, &@2); }
        | KW_CONTINUE SEMI { $$ = npval2(PV_CONTINUE, &@1, &@2); }
-       | random_head statement {
+       | random_head statement opt_else {
                $$=$1;
                $$->u2.statements = $2;
                $$->endline = @2.last_line;
+               $$->u3.else_statements = $3;
                $$->endcol = @2.last_column;}
+/*
        | random_head statement KW_ELSE statement {
                $$=$1;
                $$->u2.statements = $2;
                $$->endline = @2.last_line;
                $$->endcol = @2.last_column;
                $$->u3.else_statements = $4;}
-       | if_head statement {
+*/
+       | if_head statement opt_else {
                $$=$1;
                $$->u2.statements = $2;
                $$->endline = @2.last_line;
+               $$->u3.else_statements = $3;
                $$->endcol = @2.last_column;}
+/*
        | if_head statement KW_ELSE statement {
                $$=$1;
                $$->u2.statements = $2;
                $$->endline = @2.last_line;
                $$->endcol = @2.last_column;
-               $$->u3.else_statements = $4;}
-       | iftime_head statement {
+       $$->u3.else_statements = $4;}
+*/
+       | iftime_head statement opt_else {
                $$=$1;
                $$->u2.statements = $2;
                $$->endline = @2.last_line;
+               $$->u3.else_statements = $3;
                $$->endcol = @2.last_column;}
+/*
        | iftime_head statement KW_ELSE statement {
                $$=$1;
                $$->u2.statements = $2;
                $$->endline = @2.last_line;
                $$->endcol = @2.last_column;
                $$->u3.else_statements = $4;}
+*/
        | SEMI { $$=0; }
        ;
 
+opt_else : KW_ELSE statement { $$ = $2; }
+       | { $$ = NULL ; }
+
+/* XXX unused */
+bar_or_comma: BAR | COMMA ;
+
 target : goto_word { $$ = npval2(PV_WORD, &@1, &@1);
                $$->u1.str = $1;}
        | goto_word BAR goto_word {
@@ -630,22 +658,28 @@ application_call : application_call_head eval_arglist RP {$$ = $1;
        | application_call_head RP {$$=$1;$$->endline = @2.last_line; $$->endcol = @2.last_column;}
        ;
 
+opt_word : word { $$ = $1 }
+       | { $$ = strdup(""); }
+       ;
+
 eval_arglist :  word_list { 
                $$= npval2(PV_WORD, &@1, &@1);
                $$->u1.str = $1;}
        | /*nothing! */   {
                $$= npval(PV_WORD,0/*@1.first_line*/,0/*@1.last_line*/,0/* @1.first_column*/, 0/*@1.last_column*/);
                $$->u1.str = strdup(""); }
-       | eval_arglist COMMA  word {
+       | eval_arglist COMMA  opt_word {
                pval *z = npval2(PV_WORD, &@3, &@3);
                $$ = $1;
                linku1($1,z);
                z->u1.str = $3;}
+/*
        | eval_arglist COMMA {
                pval *z = npval2(PV_WORD, &@2, &@2);
                $$ = $1;
                linku1($1,z);
                z->u1.str = strdup("");}
+*/
        ;
 
 case_statements: case_statement {$$=$1;}
@@ -749,7 +783,7 @@ includeslist : includedname SEMI {
                prev_word=0;
        }
        | includeslist includedname SEMI {
-               pval *z = npval2(PV_WORD, &@2, &@3); /* XXX don't we need @1-@4 ?*/
+               pval *z = npval2(PV_WORD, &@2, &@3); /* XXX don't we need @1-@3 ?*/
                $$=$1;
                z->u1.str = $2;
                linku1($$,z); }
@@ -774,9 +808,10 @@ includeslist : includedname SEMI {
        | includeslist includedname BAR word BAR word3_list BAR word3_list BAR word3_list SEMI {
                pval *z = npval2(PV_WORD, &@2, &@3);
                $$=$1;
-               z->u1.str = $2; linku1($$,z);
-               z->u2.arglist = npval2(PV_WORD, &@4, &@4);
+               linku1($$,z);
                $$->u2.arglist->u1.str = $4;
+               z->u1.str = $2;
+               z->u2.arglist = npval2(PV_WORD, &@4, &@4);      /* XXX is this correct ? */
                z->u2.arglist->next = npval2(PV_WORD, &@6, &@6);
                z->u2.arglist->next->u1.str = $6;
                z->u2.arglist->next->next = npval2(PV_WORD, &@8, &@8);