diff --git a/util/sconfig/sconfig.tab.c_shipped b/util/sconfig/sconfig.tab.c_shipped
index 52bb79c..43fd14f 100644
--- a/util/sconfig/sconfig.tab.c_shipped
+++ b/util/sconfig/sconfig.tab.c_shipped
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.5.3.  */
+/* A Bison parser, made by GNU Bison 3.6.3.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
@@ -34,6 +34,10 @@
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
 
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+   especially those whose name start with YY_ or yy_.  They are
+   private implementation details that can be changed or removed.  */
+
 /* All symbols defined below should begin with yy or YY, to avoid
    infringing on user name space.  This should be done even for local
    variables, as they might otherwise be expanded by user macros.
@@ -41,14 +45,11 @@
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
-/* Undocumented macros, especially those whose name start with YY_,
-   are private implementation details.  Do not rely on them.  */
-
 /* Identify Bison output.  */
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.5.3"
+#define YYBISON_VERSION "3.6.3"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -102,14 +103,6 @@
 #  endif
 # endif
 
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
 /* Use api.header.include to #include this header
    instead of duplicating it here.  */
 #ifndef YY_YY_SRC_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
@@ -122,54 +115,59 @@
 extern int yydebug;
 #endif
 
-/* Token type.  */
+/* Token kinds.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
   enum yytokentype
   {
-    CHIP = 258,
-    DEVICE = 259,
-    REGISTER = 260,
-    ALIAS = 261,
-    REFERENCE = 262,
-    ASSOCIATION = 263,
-    BOOL = 264,
-    STATUS = 265,
-    MANDATORY = 266,
-    BUS = 267,
-    RESOURCE = 268,
-    END = 269,
-    EQUALS = 270,
-    HEX = 271,
-    STRING = 272,
-    PCI = 273,
-    PNP = 274,
-    I2C = 275,
-    APIC = 276,
-    CPU_CLUSTER = 277,
-    CPU = 278,
-    DOMAIN = 279,
-    IRQ = 280,
-    DRQ = 281,
-    SLOT_DESC = 282,
-    IO = 283,
-    NUMBER = 284,
-    SUBSYSTEMID = 285,
-    INHERIT = 286,
-    IOAPIC_IRQ = 287,
-    IOAPIC = 288,
-    PCIINT = 289,
-    GENERIC = 290,
-    SPI = 291,
-    USB = 292,
-    MMIO = 293,
-    LPC = 294,
-    ESPI = 295,
-    FW_CONFIG_TABLE = 296,
-    FW_CONFIG_FIELD = 297,
-    FW_CONFIG_OPTION = 298,
-    FW_CONFIG_PROBE = 299
+    YYEMPTY = -2,
+    YYEOF = 0,                     /* "end of file"  */
+    YYerror = 256,                 /* error  */
+    YYUNDEF = 257,                 /* "invalid token"  */
+    CHIP = 258,                    /* CHIP  */
+    DEVICE = 259,                  /* DEVICE  */
+    REGISTER = 260,                /* REGISTER  */
+    ALIAS = 261,                   /* ALIAS  */
+    REFERENCE = 262,               /* REFERENCE  */
+    ASSOCIATION = 263,             /* ASSOCIATION  */
+    BOOL = 264,                    /* BOOL  */
+    STATUS = 265,                  /* STATUS  */
+    MANDATORY = 266,               /* MANDATORY  */
+    BUS = 267,                     /* BUS  */
+    RESOURCE = 268,                /* RESOURCE  */
+    END = 269,                     /* END  */
+    EQUALS = 270,                  /* EQUALS  */
+    HEX = 271,                     /* HEX  */
+    STRING = 272,                  /* STRING  */
+    PCI = 273,                     /* PCI  */
+    PNP = 274,                     /* PNP  */
+    I2C = 275,                     /* I2C  */
+    APIC = 276,                    /* APIC  */
+    CPU_CLUSTER = 277,             /* CPU_CLUSTER  */
+    CPU = 278,                     /* CPU  */
+    DOMAIN = 279,                  /* DOMAIN  */
+    IRQ = 280,                     /* IRQ  */
+    DRQ = 281,                     /* DRQ  */
+    SLOT_DESC = 282,               /* SLOT_DESC  */
+    IO = 283,                      /* IO  */
+    NUMBER = 284,                  /* NUMBER  */
+    SUBSYSTEMID = 285,             /* SUBSYSTEMID  */
+    INHERIT = 286,                 /* INHERIT  */
+    IOAPIC_IRQ = 287,              /* IOAPIC_IRQ  */
+    IOAPIC = 288,                  /* IOAPIC  */
+    PCIINT = 289,                  /* PCIINT  */
+    GENERIC = 290,                 /* GENERIC  */
+    SPI = 291,                     /* SPI  */
+    USB = 292,                     /* USB  */
+    MMIO = 293,                    /* MMIO  */
+    LPC = 294,                     /* LPC  */
+    ESPI = 295,                    /* ESPI  */
+    FW_CONFIG_TABLE = 296,         /* FW_CONFIG_TABLE  */
+    FW_CONFIG_FIELD = 297,         /* FW_CONFIG_FIELD  */
+    FW_CONFIG_OPTION = 298,        /* FW_CONFIG_OPTION  */
+    FW_CONFIG_PROBE = 299          /* FW_CONFIG_PROBE  */
   };
+  typedef enum yytokentype yytoken_kind_t;
 #endif
 
 /* Value type.  */
@@ -195,6 +193,84 @@
 int yyparse (void);
 
 #endif /* !YY_YY_SRC_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED  */
+/* Symbol kind.  */
+enum yysymbol_kind_t
+{
+  YYSYMBOL_YYEMPTY = -2,
+  YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
+  YYSYMBOL_YYerror = 1,                    /* error  */
+  YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
+  YYSYMBOL_CHIP = 3,                       /* CHIP  */
+  YYSYMBOL_DEVICE = 4,                     /* DEVICE  */
+  YYSYMBOL_REGISTER = 5,                   /* REGISTER  */
+  YYSYMBOL_ALIAS = 6,                      /* ALIAS  */
+  YYSYMBOL_REFERENCE = 7,                  /* REFERENCE  */
+  YYSYMBOL_ASSOCIATION = 8,                /* ASSOCIATION  */
+  YYSYMBOL_BOOL = 9,                       /* BOOL  */
+  YYSYMBOL_STATUS = 10,                    /* STATUS  */
+  YYSYMBOL_MANDATORY = 11,                 /* MANDATORY  */
+  YYSYMBOL_BUS = 12,                       /* BUS  */
+  YYSYMBOL_RESOURCE = 13,                  /* RESOURCE  */
+  YYSYMBOL_END = 14,                       /* END  */
+  YYSYMBOL_EQUALS = 15,                    /* EQUALS  */
+  YYSYMBOL_HEX = 16,                       /* HEX  */
+  YYSYMBOL_STRING = 17,                    /* STRING  */
+  YYSYMBOL_PCI = 18,                       /* PCI  */
+  YYSYMBOL_PNP = 19,                       /* PNP  */
+  YYSYMBOL_I2C = 20,                       /* I2C  */
+  YYSYMBOL_APIC = 21,                      /* APIC  */
+  YYSYMBOL_CPU_CLUSTER = 22,               /* CPU_CLUSTER  */
+  YYSYMBOL_CPU = 23,                       /* CPU  */
+  YYSYMBOL_DOMAIN = 24,                    /* DOMAIN  */
+  YYSYMBOL_IRQ = 25,                       /* IRQ  */
+  YYSYMBOL_DRQ = 26,                       /* DRQ  */
+  YYSYMBOL_SLOT_DESC = 27,                 /* SLOT_DESC  */
+  YYSYMBOL_IO = 28,                        /* IO  */
+  YYSYMBOL_NUMBER = 29,                    /* NUMBER  */
+  YYSYMBOL_SUBSYSTEMID = 30,               /* SUBSYSTEMID  */
+  YYSYMBOL_INHERIT = 31,                   /* INHERIT  */
+  YYSYMBOL_IOAPIC_IRQ = 32,                /* IOAPIC_IRQ  */
+  YYSYMBOL_IOAPIC = 33,                    /* IOAPIC  */
+  YYSYMBOL_PCIINT = 34,                    /* PCIINT  */
+  YYSYMBOL_GENERIC = 35,                   /* GENERIC  */
+  YYSYMBOL_SPI = 36,                       /* SPI  */
+  YYSYMBOL_USB = 37,                       /* USB  */
+  YYSYMBOL_MMIO = 38,                      /* MMIO  */
+  YYSYMBOL_LPC = 39,                       /* LPC  */
+  YYSYMBOL_ESPI = 40,                      /* ESPI  */
+  YYSYMBOL_FW_CONFIG_TABLE = 41,           /* FW_CONFIG_TABLE  */
+  YYSYMBOL_FW_CONFIG_FIELD = 42,           /* FW_CONFIG_FIELD  */
+  YYSYMBOL_FW_CONFIG_OPTION = 43,          /* FW_CONFIG_OPTION  */
+  YYSYMBOL_FW_CONFIG_PROBE = 44,           /* FW_CONFIG_PROBE  */
+  YYSYMBOL_YYACCEPT = 45,                  /* $accept  */
+  YYSYMBOL_devtree = 46,                   /* devtree  */
+  YYSYMBOL_chipchildren = 47,              /* chipchildren  */
+  YYSYMBOL_devicechildren = 48,            /* devicechildren  */
+  YYSYMBOL_chip = 49,                      /* chip  */
+  YYSYMBOL_50_1 = 50,                      /* @1  */
+  YYSYMBOL_device = 51,                    /* device  */
+  YYSYMBOL_52_2 = 52,                      /* @2  */
+  YYSYMBOL_53_3 = 53,                      /* @3  */
+  YYSYMBOL_alias = 54,                     /* alias  */
+  YYSYMBOL_status = 55,                    /* status  */
+  YYSYMBOL_resource = 56,                  /* resource  */
+  YYSYMBOL_reference = 57,                 /* reference  */
+  YYSYMBOL_registers = 58,                 /* registers  */
+  YYSYMBOL_subsystemid = 59,               /* subsystemid  */
+  YYSYMBOL_ioapic_irq = 60,                /* ioapic_irq  */
+  YYSYMBOL_smbios_slot_desc = 61,          /* smbios_slot_desc  */
+  YYSYMBOL_fw_config_table = 62,           /* fw_config_table  */
+  YYSYMBOL_fw_config_table_children = 63,  /* fw_config_table_children  */
+  YYSYMBOL_fw_config_field_children = 64,  /* fw_config_field_children  */
+  YYSYMBOL_fw_config_field = 65,           /* fw_config_field  */
+  YYSYMBOL_66_4 = 66,                      /* $@4  */
+  YYSYMBOL_67_5 = 67,                      /* $@5  */
+  YYSYMBOL_68_6 = 68,                      /* $@6  */
+  YYSYMBOL_fw_config_option = 69,          /* fw_config_option  */
+  YYSYMBOL_fw_config_probe = 70            /* fw_config_probe  */
+};
+typedef enum yysymbol_kind_t yysymbol_kind_t;
+
 
 
 
@@ -294,6 +370,7 @@
 
 #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
 
+
 /* Stored state numbers (used for stacks). */
 typedef yytype_int8 yy_state_t;
 
@@ -312,6 +389,7 @@
 # endif
 #endif
 
+
 #ifndef YY_ATTRIBUTE_PURE
 # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
 #  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
@@ -369,7 +447,7 @@
 
 #define YY_ASSERT(E) ((void) (0 && (E)))
 
-#if ! defined yyoverflow || YYERROR_VERBOSE
+#if !defined yyoverflow
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
 
@@ -434,8 +512,7 @@
 #   endif
 #  endif
 # endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
+#endif /* !defined yyoverflow */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
@@ -500,25 +577,26 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   64
+#define YYLAST   97
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  45
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  25
+#define YYNNTS  26
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  48
+#define YYNRULES  50
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  83
+#define YYNSTATES  89
 
-#define YYUNDEFTOK  2
 #define YYMAXUTOK   299
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
    as returned by yylex, with out-of-bounds checking.  */
-#define YYTRANSLATE(YYX)                                                \
-  (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+#define YYTRANSLATE(YYX)                                \
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
+   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
+   : YYSYMBOL_YYUNDEF)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
    as returned by yylex.  */
@@ -562,34 +640,48 @@
 {
        0,    24,    24,    24,    24,    26,    26,    26,    26,    26,
       28,    28,    28,    28,    28,    28,    28,    28,    28,    30,
-      30,    39,    39,    47,    49,    53,    53,    55,    58,    61,
-      64,    67,    70,    73,    76,    79,    83,    86,    86,    89,
-      89,    92,    92,    98,    98,   104,   104,   110,   114
+      30,    39,    39,    47,    47,    55,    57,    61,    61,    63,
+      66,    69,    72,    75,    78,    81,    84,    87,    91,    94,
+      94,    97,    97,   100,   100,   106,   106,   112,   112,   118,
+     122
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || 0
+/** Accessing symbol of state STATE.  */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if YYDEBUG || 0
+/* The user-facing name of the symbol whose (internal) number is
+   YYSYMBOL.  No bounds checking.  */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
-  "$end", "error", "$undefined", "CHIP", "DEVICE", "REGISTER", "ALIAS",
-  "REFERENCE", "ASSOCIATION", "BOOL", "STATUS", "MANDATORY", "BUS",
-  "RESOURCE", "END", "EQUALS", "HEX", "STRING", "PCI", "PNP", "I2C",
-  "APIC", "CPU_CLUSTER", "CPU", "DOMAIN", "IRQ", "DRQ", "SLOT_DESC", "IO",
-  "NUMBER", "SUBSYSTEMID", "INHERIT", "IOAPIC_IRQ", "IOAPIC", "PCIINT",
-  "GENERIC", "SPI", "USB", "MMIO", "LPC", "ESPI", "FW_CONFIG_TABLE",
-  "FW_CONFIG_FIELD", "FW_CONFIG_OPTION", "FW_CONFIG_PROBE", "$accept",
-  "devtree", "chipchildren", "devicechildren", "chip", "@1", "device",
-  "@2", "alias", "status", "resource", "reference", "registers",
-  "subsystemid", "ioapic_irq", "smbios_slot_desc", "fw_config_table",
-  "fw_config_table_children", "fw_config_field_children",
-  "fw_config_field", "$@3", "$@4", "$@5", "fw_config_option",
-  "fw_config_probe", YY_NULLPTR
+  "\"end of file\"", "error", "\"invalid token\"", "CHIP", "DEVICE",
+  "REGISTER", "ALIAS", "REFERENCE", "ASSOCIATION", "BOOL", "STATUS",
+  "MANDATORY", "BUS", "RESOURCE", "END", "EQUALS", "HEX", "STRING", "PCI",
+  "PNP", "I2C", "APIC", "CPU_CLUSTER", "CPU", "DOMAIN", "IRQ", "DRQ",
+  "SLOT_DESC", "IO", "NUMBER", "SUBSYSTEMID", "INHERIT", "IOAPIC_IRQ",
+  "IOAPIC", "PCIINT", "GENERIC", "SPI", "USB", "MMIO", "LPC", "ESPI",
+  "FW_CONFIG_TABLE", "FW_CONFIG_FIELD", "FW_CONFIG_OPTION",
+  "FW_CONFIG_PROBE", "$accept", "devtree", "chipchildren",
+  "devicechildren", "chip", "@1", "device", "@2", "@3", "alias", "status",
+  "resource", "reference", "registers", "subsystemid", "ioapic_irq",
+  "smbios_slot_desc", "fw_config_table", "fw_config_table_children",
+  "fw_config_field_children", "fw_config_field", "$@4", "$@5", "$@6",
+  "fw_config_option", "fw_config_probe", YY_NULLPTR
 };
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+  return yytname[yysymbol];
+}
 #endif
 
-# ifdef YYPRINT
+#ifdef YYPRINT
 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
    (internal) symbol number NUM (which must be that of a token).  */
 static const yytype_int16 yytoknum[] =
@@ -600,9 +692,9 @@
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299
 };
-# endif
+#endif
 
-#define YYPACT_NINF (-21)
+#define YYPACT_NINF (-12)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -616,15 +708,15 @@
      STATE-NUM.  */
 static const yytype_int8 yypact[] =
 {
-     -21,     3,   -21,    -4,   -21,   -21,   -21,   -21,    -2,   -21,
-     -21,     4,   -21,    11,   -20,    14,     6,    13,   -21,   -21,
-     -21,   -21,   -21,    -1,   -21,     2,    17,    26,   -21,   -21,
-     -10,    29,    21,    22,   -21,    -7,   -21,    25,   -21,    30,
-      10,   -21,   -21,    -6,   -21,    19,   -21,   -21,   -21,   -21,
-     -21,   -21,   -21,    -3,    20,   -21,    33,    23,    24,    34,
-     -21,   -21,   -21,   -21,   -21,   -21,   -21,   -21,    28,    37,
-      27,    12,    38,    31,    40,    32,    35,   -21,   -21,    41,
-     -21,   -21,   -21
+     -12,     9,   -12,    18,   -12,   -12,   -12,   -12,     2,   -12,
+     -12,    25,   -12,    16,    14,    10,    30,    31,   -12,   -12,
+     -12,   -12,   -12,    17,   -12,    32,    22,     3,    44,   -12,
+     -12,   -11,    29,    20,    36,    37,   -12,    -7,   -12,    38,
+     -12,   -12,   -12,   -12,    39,    29,   -12,   -12,    -6,   -12,
+      28,   -12,   -12,   -12,   -12,   -12,    -3,   -12,    33,   -12,
+      41,    34,    35,    42,   -12,   -12,   -12,   -12,   -12,   -12,
+     -12,   -12,     1,    45,    48,    40,    27,    49,   -12,    43,
+      50,    46,    47,   -12,   -12,    51,   -12,   -12,   -12
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -632,31 +724,31 @@
      means the default is an error.  */
 static const yytype_int8 yydefact[] =
 {
-       2,     0,     1,     0,    38,     3,     4,    19,     0,     9,
-      36,     0,    37,     0,    45,     0,     0,     0,    20,     6,
-       5,     8,     7,    43,    40,     0,     0,     0,    41,    40,
-       0,    23,     0,     0,    40,     0,    46,     0,    39,     0,
-       0,    29,    28,     0,    44,     0,    24,    25,    26,    21,
-      42,    47,    18,     0,     0,    22,     0,     0,     0,     0,
-      11,    10,    12,    16,    13,    14,    15,    17,     0,     0,
-       0,     0,     0,     0,    35,    30,     0,    48,    27,    34,
-      31,    32,    33
+       2,     0,     1,     0,    40,     3,     4,    19,     0,     9,
+      38,     0,    39,     0,    47,     0,     0,     0,    20,     6,
+       5,     8,     7,    45,    42,     0,     0,     0,     0,    43,
+      42,     0,     0,    25,     0,     0,    42,     0,    48,     0,
+      41,    27,    28,    23,     0,     0,    31,    30,     0,    46,
+       0,    18,    26,    21,    44,    49,     0,    18,     0,    24,
+       0,     0,     0,     0,    11,    10,    12,    16,    13,    14,
+      15,    17,     0,     0,     0,     0,     0,     0,    22,     0,
+      37,    32,     0,    50,    29,    36,    33,    34,    35
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -21,   -21,   -21,   -21,    -8,   -21,     8,   -21,   -21,   -21,
-     -21,   -21,     9,   -21,   -21,   -21,   -21,   -21,   -12,   -21,
-     -21,   -21,   -21,   -21,   -21
+     -12,   -12,   -12,    13,    12,   -12,    58,   -12,   -12,   -12,
+      52,   -12,   -12,    60,   -12,   -12,   -12,   -12,   -12,     4,
+     -12,   -12,   -12,   -12,   -12,   -12
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,     1,    13,    53,     5,     9,    20,    52,    40,    49,
-      62,    21,    22,    64,    65,    66,     6,     8,    30,    12,
-      34,    29,    24,    38,    67
+      -1,     1,    13,    56,    64,     9,    65,    57,    51,    45,
+      43,    66,    21,    67,    68,    69,    70,     6,     8,    31,
+      12,    36,    30,    24,    40,    71
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -664,39 +756,45 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int8 yytable[] =
 {
-       3,    15,    16,     2,    36,    19,     3,    44,    50,    23,
-      54,    55,    10,     7,     3,    15,    16,    35,    17,    47,
-      48,    14,    43,    26,    56,    18,    25,    57,    28,    58,
-      27,    31,    32,    37,    33,    39,    37,    37,    41,    42,
-      11,    59,    45,    73,     4,    60,    76,    46,    51,    68,
-      69,    72,    70,    71,    74,    77,    75,    79,    82,     0,
-      78,    61,    63,    80,    81
+       3,    15,    16,    38,     3,    15,    16,    49,    54,     2,
+      58,    59,     3,     5,    58,    78,    10,    25,    34,     3,
+      15,    16,    26,    17,    60,    19,    44,    61,    60,    62,
+      18,    61,    39,    62,    37,     7,    39,    39,    41,    42,
+      48,    63,    14,    23,    11,    63,    29,    27,    28,    32,
+       4,    33,    35,    46,    47,    50,    52,    55,    74,    77,
+      79,    82,    73,    75,    76,    80,    83,    85,    88,    81,
+      72,    20,    84,    22,     0,     0,    87,    86,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    53
 };
 
 static const yytype_int8 yycheck[] =
 {
-       3,     4,     5,     0,    14,    13,     3,    14,    14,    29,
-      13,    14,    14,    17,     3,     4,     5,    29,     7,     9,
-      10,    17,    34,    17,    27,    14,    12,    30,    29,    32,
-      17,    29,    15,    43,     8,     6,    43,    43,    17,    17,
-      42,    44,    17,    15,    41,    53,    34,    17,    29,    29,
-      17,    17,    29,    29,    17,    17,    29,    17,    17,    -1,
-      29,    53,    53,    31,    29
+       3,     4,     5,    14,     3,     4,     5,    14,    14,     0,
+      13,    14,     3,     1,    13,    14,    14,     7,    15,     3,
+       4,     5,    12,     7,    27,    13,     6,    30,    27,    32,
+      14,    30,    43,    32,    30,    17,    43,    43,     9,    10,
+      36,    44,    17,    29,    42,    44,    29,    17,    17,    17,
+      41,    29,     8,    17,    17,    17,    17,    29,    17,    17,
+      15,    34,    29,    29,    29,    17,    17,    17,    17,    29,
+      57,    13,    29,    13,    -1,    -1,    29,    31,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    45
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_int8 yystos[] =
 {
-       0,    46,     0,     3,    41,    49,    61,    17,    62,    50,
-      14,    42,    64,    47,    17,     4,     5,     7,    14,    49,
-      51,    56,    57,    29,    67,    12,    17,    17,    29,    66,
-      63,    29,    15,     8,    65,    63,    14,    43,    68,     6,
-      53,    17,    17,    63,    14,    17,    17,     9,    10,    54,
-      14,    29,    52,    48,    13,    14,    27,    30,    32,    44,
-      49,    51,    55,    57,    58,    59,    60,    69,    29,    17,
-      29,    29,    17,    15,    17,    29,    34,    17,    29,    17,
-      31,    29,    17
+       0,    46,     0,     3,    41,    49,    62,    17,    63,    50,
+      14,    42,    65,    47,    17,     4,     5,     7,    14,    49,
+      51,    57,    58,    29,    68,     7,    12,    17,    17,    29,
+      67,    64,    17,    29,    15,     8,    66,    64,    14,    43,
+      69,     9,    10,    55,     6,    54,    17,    17,    64,    14,
+      17,    53,    17,    55,    14,    29,    48,    52,    13,    14,
+      27,    30,    32,    44,    49,    51,    56,    58,    59,    60,
+      61,    70,    48,    29,    17,    29,    29,    17,    14,    15,
+      17,    29,    34,    17,    29,    17,    31,    29,    17
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -704,9 +802,10 @@
 {
        0,    45,    46,    46,    46,    47,    47,    47,    47,    47,
       48,    48,    48,    48,    48,    48,    48,    48,    48,    50,
-      49,    52,    51,    53,    53,    54,    54,    55,    56,    57,
-      58,    58,    59,    60,    60,    60,    61,    62,    62,    63,
-      63,    65,    64,    66,    64,    67,    64,    68,    69
+      49,    52,    51,    53,    51,    54,    54,    55,    55,    56,
+      57,    58,    59,    59,    60,    61,    61,    61,    62,    63,
+      63,    64,    64,    66,    65,    67,    65,    68,    65,    69,
+      70
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -714,16 +813,17 @@
 {
        0,     2,     0,     2,     2,     2,     2,     2,     2,     0,
        2,     2,     2,     2,     2,     2,     2,     2,     0,     0,
-       5,     0,     8,     0,     2,     1,     1,     4,     4,     4,
-       3,     4,     4,     5,     4,     3,     3,     2,     0,     2,
-       0,     0,     7,     0,     6,     0,     5,     3,     3
+       5,     0,     8,     0,     7,     0,     2,     1,     1,     4,
+       4,     4,     3,     4,     4,     5,     4,     3,     3,     2,
+       0,     2,     0,     0,     7,     0,     6,     0,     5,     3,
+       3
 };
 
 
+enum { YYENOMEM = -2 };
+
 #define yyerrok         (yyerrstatus = 0)
 #define yyclearin       (yychar = YYEMPTY)
-#define YYEMPTY         (-2)
-#define YYEOF           0
 
 #define YYACCEPT        goto yyacceptlab
 #define YYABORT         goto yyabortlab
@@ -749,10 +849,9 @@
       }                                                           \
   while (0)
 
-/* Error token number */
-#define YYTERROR        1
-#define YYERRCODE       256
-
+/* Backward compatibility with an undocumented macro.
+   Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
 
 
 /* Enable debugging if requested.  */
@@ -770,18 +869,18 @@
 } while (0)
 
 /* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
+# ifndef YY_LOCATION_PRINT
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
 
 
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
 do {                                                                      \
   if (yydebug)                                                            \
     {                                                                     \
       YYFPRINTF (stderr, "%s ", Title);                                   \
       yy_symbol_print (stderr,                                            \
-                  Type, Value); \
+                  Kind, Value); \
       YYFPRINTF (stderr, "\n");                                           \
     }                                                                     \
 } while (0)
@@ -792,18 +891,19 @@
 `-----------------------------------*/
 
 static void
-yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_value_print (FILE *yyo,
+                       yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
   FILE *yyoutput = yyo;
   YYUSE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
+  if (yykind < YYNTOKENS)
+    YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
 # endif
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yytype);
+  YYUSE (yykind);
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
@@ -813,12 +913,13 @@
 `---------------------------*/
 
 static void
-yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_print (FILE *yyo,
+                 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
   YYFPRINTF (yyo, "%s %s (",
-             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
+             yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
 
-  yy_symbol_value_print (yyo, yytype, yyvaluep);
+  yy_symbol_value_print (yyo, yykind, yyvaluep);
   YYFPRINTF (yyo, ")");
 }
 
@@ -851,7 +952,8 @@
 `------------------------------------------------*/
 
 static void
-yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule)
+yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
+                 int yyrule)
 {
   int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
@@ -863,9 +965,8 @@
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr,
-                       yystos[+yyssp[yyi + 1 - yynrhs]],
-                       &yyvsp[(yyi + 1) - (yynrhs)]
-                                              );
+                       YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
+                       &yyvsp[(yyi + 1) - (yynrhs)]);
       YYFPRINTF (stderr, "\n");
     }
 }
@@ -880,8 +981,8 @@
    multiple parsers can coexist.  */
 int yydebug;
 #else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
@@ -904,258 +1005,29 @@
 #endif
 
 
-#if YYERROR_VERBOSE
 
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
-#  else
-/* Return the length of YYSTR.  */
-static YYPTRDIFF_T
-yystrlen (const char *yystr)
-{
-  YYPTRDIFF_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
 
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
 
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYPTRDIFF_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYPTRDIFF_T yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-        switch (*++yyp)
-          {
-          case '\'':
-          case ',':
-            goto do_not_strip_quotes;
-
-          case '\\':
-            if (*++yyp != '\\')
-              goto do_not_strip_quotes;
-            else
-              goto append;
-
-          append:
-          default:
-            if (yyres)
-              yyres[yyn] = *yyp;
-            yyn++;
-            break;
-
-          case '"':
-            if (yyres)
-              yyres[yyn] = '\0';
-            return yyn;
-          }
-    do_not_strip_quotes: ;
-    }
-
-  if (yyres)
-    return yystpcpy (yyres, yystr) - yyres;
-  else
-    return yystrlen (yystr);
-}
-# endif
-
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
-   about the unexpected token YYTOKEN for the state stack whose top is
-   YYSSP.
-
-   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
-   not large enough to hold the message.  In that case, also set
-   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
-   required number of bytes is too large to store.  */
-static int
-yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
-                yy_state_t *yyssp, int yytoken)
-{
-  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-  /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
-  /* Arguments of yyformat: reported tokens (one for the "unexpected",
-     one per "expected"). */
-  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Actual size of YYARG. */
-  int yycount = 0;
-  /* Cumulated lengths of YYARG.  */
-  YYPTRDIFF_T yysize = 0;
-
-  /* There are many possibilities here to consider:
-     - If this state is a consistent state with a default action, then
-       the only way this function was invoked is if the default action
-       is an error action.  In that case, don't check for expected
-       tokens because there are none.
-     - The only way there can be no lookahead present (in yychar) is if
-       this state is a consistent state with a default action.  Thus,
-       detecting the absence of a lookahead is sufficient to determine
-       that there is no unexpected or expected token to report.  In that
-       case, just report a simple "syntax error".
-     - Don't assume there isn't a lookahead just because this state is a
-       consistent state with a default action.  There might have been a
-       previous inconsistent state, consistent state with a non-default
-       action, or user semantic action that manipulated yychar.
-     - Of course, the expected token list depends on states to have
-       correct lookahead information, and it depends on the parser not
-       to perform extra reductions after fetching a lookahead from the
-       scanner and before detecting a syntax error.  Thus, state merging
-       (from LALR or IELR) and default reductions corrupt the expected
-       token list.  However, the list is correct for canonical LR with
-       one exception: it will still contain any token that will not be
-       accepted due to an error action in a later state.
-  */
-  if (yytoken != YYEMPTY)
-    {
-      int yyn = yypact[+*yyssp];
-      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
-      yysize = yysize0;
-      yyarg[yycount++] = yytname[yytoken];
-      if (!yypact_value_is_default (yyn))
-        {
-          /* Start YYX at -YYN if negative to avoid negative indexes in
-             YYCHECK.  In other words, skip the first -YYN actions for
-             this state because they are default actions.  */
-          int yyxbegin = yyn < 0 ? -yyn : 0;
-          /* Stay within bounds of both yycheck and yytname.  */
-          int yychecklim = YYLAST - yyn + 1;
-          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-          int yyx;
-
-          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
-                && !yytable_value_is_error (yytable[yyx + yyn]))
-              {
-                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-                  {
-                    yycount = 1;
-                    yysize = yysize0;
-                    break;
-                  }
-                yyarg[yycount++] = yytname[yyx];
-                {
-                  YYPTRDIFF_T yysize1
-                    = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
-                    yysize = yysize1;
-                  else
-                    return 2;
-                }
-              }
-        }
-    }
-
-  switch (yycount)
-    {
-# define YYCASE_(N, S)                      \
-      case N:                               \
-        yyformat = S;                       \
-      break
-    default: /* Avoid compiler warnings. */
-      YYCASE_(0, YY_("syntax error"));
-      YYCASE_(1, YY_("syntax error, unexpected %s"));
-      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
-      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
-      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
-      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
-    }
-
-  {
-    /* Don't count the "%s"s in the final size, but reserve room for
-       the terminator.  */
-    YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1;
-    if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
-      yysize = yysize1;
-    else
-      return 2;
-  }
-
-  if (*yymsg_alloc < yysize)
-    {
-      *yymsg_alloc = 2 * yysize;
-      if (! (yysize <= *yymsg_alloc
-             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
-        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
-      return 1;
-    }
-
-  /* Avoid sprintf, as that infringes on the user's name space.
-     Don't have undefined behavior even if the translation
-     produced a string with the wrong number of "%s"s.  */
-  {
-    char *yyp = *yymsg;
-    int yyi = 0;
-    while ((*yyp = *yyformat) != '\0')
-      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
-        {
-          yyp += yytnamerr (yyp, yyarg[yyi++]);
-          yyformat += 2;
-        }
-      else
-        {
-          ++yyp;
-          ++yyformat;
-        }
-  }
-  return 0;
-}
-#endif /* YYERROR_VERBOSE */
 
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
 static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+yydestruct (const char *yymsg,
+            yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
 {
   YYUSE (yyvaluep);
   if (!yymsg)
     yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
 
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yytype);
+  YYUSE (yykind);
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-
-
 /* The lookahead symbol.  */
 int yychar;
 
@@ -1165,6 +1037,8 @@
 int yynerrs;
 
 
+
+
 /*----------.
 | yyparse.  |
 `----------*/
@@ -1183,6 +1057,9 @@
        Refer to the stacks through separate pointers, to allow yyoverflow
        to reallocate them elsewhere.  */
 
+    /* Their size.  */
+    YYPTRDIFF_T yystacksize;
+
     /* The state stack.  */
     yy_state_t yyssa[YYINITDEPTH];
     yy_state_t *yyss;
@@ -1193,22 +1070,16 @@
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYPTRDIFF_T yystacksize;
-
   int yyn;
+  /* The return value of yyparse.  */
   int yyresult;
   /* Lookahead token as an internal (translated) token number.  */
-  int yytoken = 0;
+  yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE yyval;
 
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 
@@ -1216,15 +1087,17 @@
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
+  yynerrs = 0;
+  yystate = 0;
+  yyerrstatus = 0;
+
+  yystacksize = YYINITDEPTH;
   yyssp = yyss = yyssa;
   yyvsp = yyvs = yyvsa;
-  yystacksize = YYINITDEPTH;
+
 
   YYDPRINTF ((stderr, "Starting parse\n"));
 
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
   yychar = YYEMPTY; /* Cause a token to be read.  */
   goto yysetstate;
 
@@ -1247,6 +1120,7 @@
   YY_IGNORE_USELESS_CAST_BEGIN
   *yyssp = YY_CAST (yy_state_t, yystate);
   YY_IGNORE_USELESS_CAST_END
+  YY_STACK_PRINT (yyss, yyssp);
 
   if (yyss + yystacksize - 1 <= yyssp)
 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
@@ -1292,7 +1166,7 @@
           goto yyexhaustedlab;
         YYSTACK_RELOCATE (yyss_alloc, yyss);
         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-# undef YYSTACK_RELOCATE
+#  undef YYSTACK_RELOCATE
         if (yyss1 != yyssa)
           YYSTACK_FREE (yyss1);
       }
@@ -1331,18 +1205,29 @@
 
   /* Not known => get a lookahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
   if (yychar == YYEMPTY)
     {
-      YYDPRINTF ((stderr, "Reading a token: "));
+      YYDPRINTF ((stderr, "Reading a token\n"));
       yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
     {
-      yychar = yytoken = YYEOF;
+      yychar = YYEOF;
+      yytoken = YYSYMBOL_YYEOF;
       YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
+  else if (yychar == YYerror)
+    {
+      /* The scanner already issued an error message, process directly
+         to error recovery.  But do not keep the error token as
+         lookahead, it is too special and may lead us to an endless
+         loop in error recovery. */
+      yychar = YYUNDEF;
+      yytoken = YYSYMBOL_YYerror;
+      goto yyerrlab1;
+    }
   else
     {
       yytoken = YYTRANSLATE (yychar);
@@ -1431,7 +1316,7 @@
 
   case 21:
                                                        {
-	(yyval.dev) = new_device(cur_parent, cur_chip_instance, (yyvsp[-3].number), (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].number));
+	(yyval.dev) = new_device_raw(cur_parent, cur_chip_instance, (yyvsp[-3].number), (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].number));
 	cur_parent = (yyval.dev)->last_bus;
 }
     break;
@@ -1443,80 +1328,83 @@
     break;
 
   case 23:
+                                       {
+	(yyval.dev) = new_device_reference(cur_parent, cur_chip_instance, (yyvsp[-1].string), (yyvsp[0].number));
+	cur_parent = (yyval.dev)->last_bus;
+}
+    break;
+
+  case 24:
+                           {
+	cur_parent = (yyvsp[-2].dev)->parent;
+}
+    break;
+
+  case 25:
                    {
 	(yyval.string) = NULL;
 }
     break;
 
-  case 24:
+  case 26:
                  {
 	(yyval.string) = (yyvsp[0].string);
 }
     break;
 
-  case 27:
+  case 29:
         { add_resource(cur_parent, (yyvsp[-3].number), strtol((yyvsp[-2].string), NULL, 0), strtol((yyvsp[0].string), NULL, 0)); }
     break;
 
-  case 28:
+  case 30:
         { add_reference(cur_chip_instance, (yyvsp[0].string), (yyvsp[-2].string)); }
     break;
 
-  case 29:
+  case 31:
         { add_register(cur_chip_instance, (yyvsp[-2].string), (yyvsp[0].string)); }
     break;
 
-  case 30:
+  case 32:
         { add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-1].string), NULL, 16), strtol((yyvsp[0].string), NULL, 16), 0); }
     break;
 
-  case 31:
+  case 33:
         { add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-2].string), NULL, 16), strtol((yyvsp[-1].string), NULL, 16), 1); }
     break;
 
-  case 32:
+  case 34:
         { add_ioapic_info(cur_parent, strtol((yyvsp[-2].string), NULL, 16), (yyvsp[-1].string), strtol((yyvsp[0].string), NULL, 16)); }
     break;
 
-  case 33:
+  case 35:
         { add_slot_desc(cur_parent, (yyvsp[-3].string), (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string)); }
     break;
 
-  case 34:
+  case 36:
         { add_slot_desc(cur_parent, (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string), NULL); }
     break;
 
-  case 35:
+  case 37:
         { add_slot_desc(cur_parent, (yyvsp[-1].string), (yyvsp[0].string), NULL, NULL); }
     break;
 
-  case 36:
+  case 38:
                                                               { }
     break;
 
-  case 41:
+  case 43:
                                                                                           {
 	cur_field = new_fw_config_field((yyvsp[-2].string), strtoul((yyvsp[-1].string), NULL, 0), strtoul((yyvsp[0].string), NULL, 0));
 }
     break;
 
-  case 42:
-                                     { }
-    break;
-
-  case 43:
-                                                            {
-	cur_field = new_fw_config_field((yyvsp[-1].string), strtoul((yyvsp[0].string), NULL, 0), strtoul((yyvsp[0].string), NULL, 0));
-}
-    break;
-
   case 44:
                                      { }
     break;
 
   case 45:
-                                        {
-	cur_field = get_fw_config_field((yyvsp[0].string));
+                                                            {
+	cur_field = new_fw_config_field((yyvsp[-1].string), strtoul((yyvsp[0].string), NULL, 0), strtoul((yyvsp[0].string), NULL, 0));
 }
     break;
 
@@ -1525,10 +1413,20 @@
     break;
 
   case 47:
-        { add_fw_config_option(cur_field, (yyvsp[-1].string), strtoul((yyvsp[0].string), NULL, 0)); }
+                                        {
+	cur_field = get_fw_config_field((yyvsp[0].string));
+}
     break;
 
   case 48:
+                                     { }
+    break;
+
+  case 49:
+        { add_fw_config_option(cur_field, (yyvsp[-1].string), strtoul((yyvsp[0].string), NULL, 0)); }
+    break;
+
+  case 50:
         { add_fw_config_probe(cur_parent, (yyvsp[-1].string), (yyvsp[0].string)); }
     break;
 
@@ -1547,11 +1445,10 @@
      case of YYERROR or YYBACKUP, subsequent parser actions might lead
      to an incorrect destructor call or verbose syntax error message
      before the lookahead is translated.  */
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+  YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
   yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
 
   *++yyvsp = yyval;
 
@@ -1575,50 +1472,14 @@
 yyerrlab:
   /* Make sure we have latest lookahead translation.  See comments at
      user semantic actions for why this is necessary.  */
-  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
+  yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
       ++yynerrs;
-#if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
-                                        yyssp, yytoken)
-      {
-        char const *yymsgp = YY_("syntax error");
-        int yysyntax_error_status;
-        yysyntax_error_status = YYSYNTAX_ERROR;
-        if (yysyntax_error_status == 0)
-          yymsgp = yymsg;
-        else if (yysyntax_error_status == 1)
-          {
-            if (yymsg != yymsgbuf)
-              YYSTACK_FREE (yymsg);
-            yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
-            if (!yymsg)
-              {
-                yymsg = yymsgbuf;
-                yymsg_alloc = sizeof yymsgbuf;
-                yysyntax_error_status = 2;
-              }
-            else
-              {
-                yysyntax_error_status = YYSYNTAX_ERROR;
-                yymsgp = yymsg;
-              }
-          }
-        yyerror (yymsgp);
-        if (yysyntax_error_status == 2)
-          goto yyexhaustedlab;
-      }
-# undef YYSYNTAX_ERROR
-#endif
     }
 
-
-
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
@@ -1667,13 +1528,14 @@
 yyerrlab1:
   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
+  /* Pop stack until we find a state that shifts the error token.  */
   for (;;)
     {
       yyn = yypact[yystate];
       if (!yypact_value_is_default (yyn))
         {
-          yyn += YYTERROR;
-          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+          yyn += YYSYMBOL_YYerror;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
             {
               yyn = yytable[yyn];
               if (0 < yyn)
@@ -1687,7 +1549,7 @@
 
 
       yydestruct ("Error: popping",
-                  yystos[yystate], yyvsp);
+                  YY_ACCESSING_SYMBOL (yystate), yyvsp);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
@@ -1699,7 +1561,7 @@
 
 
   /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
@@ -1721,7 +1583,7 @@
   goto yyreturn;
 
 
-#if !defined yyoverflow || YYERROR_VERBOSE
+#if !defined yyoverflow
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -1751,17 +1613,15 @@
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-                  yystos[+*yyssp], yyvsp);
+                  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
   if (yyss != yyssa)
     YYSTACK_FREE (yyss);
 #endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
+
   return yyresult;
 }
 
+
