Home | History | Annotate | Line # | Download | only in compiler
aslrules.y revision 1.1.1.2
      1 NoEcho('
      2 /******************************************************************************
      3  *
      4  * Module Name: aslrules.y - Bison/Yacc production rules
      5  *
      6  *****************************************************************************/
      7 
      8 /*
      9  * Copyright (C) 2000 - 2015, Intel Corp.
     10  * All rights reserved.
     11  *
     12  * Redistribution and use in source and binary forms, with or without
     13  * modification, are permitted provided that the following conditions
     14  * are met:
     15  * 1. Redistributions of source code must retain the above copyright
     16  *    notice, this list of conditions, and the following disclaimer,
     17  *    without modification.
     18  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     19  *    substantially similar to the "NO WARRANTY" disclaimer below
     20  *    ("Disclaimer") and any redistribution must be conditioned upon
     21  *    including a substantially similar Disclaimer requirement for further
     22  *    binary redistribution.
     23  * 3. Neither the names of the above-listed copyright holders nor the names
     24  *    of any contributors may be used to endorse or promote products derived
     25  *    from this software without specific prior written permission.
     26  *
     27  * Alternatively, this software may be distributed under the terms of the
     28  * GNU General Public License ("GPL") version 2 as published by the Free
     29  * Software Foundation.
     30  *
     31  * NO WARRANTY
     32  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     33  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     34  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     35  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     36  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     37  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     38  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     39  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     40  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     41  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     42  * POSSIBILITY OF SUCH DAMAGES.
     43  */
     44 
     45 ')
     46 
     47 /*******************************************************************************
     48  *
     49  * Production rules start here
     50  *
     51  ******************************************************************************/
     52 
     53 /*
     54  * ASL Names
     55  *
     56  * Root rule. Allow multiple #line directives before the definition block
     57  * to handle output from preprocessors
     58  */
     59 ASLCode
     60     : DefinitionBlockTerm
     61     | error                         {YYABORT; $$ = NULL;}
     62     ;
     63 
     64 /*
     65  * Blocks, Data, and Opcodes
     66  */
     67 
     68 /*
     69  * Note concerning support for "module-level code".
     70  *
     71  * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
     72  * methods (the so-called module-level code.) This support was explicitly
     73  * removed in ACPI 2.0, but this type of code continues to be created by
     74  * BIOS vendors. In order to support the disassembly and recompilation of
     75  * such code (and the porting of ASL code to iASL), iASL supports this
     76  * code in violation of the current ACPI specification.
     77  *
     78  * The grammar change to support module-level code is to revert the
     79  * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
     80  * original use of {TermList} instead (see below.) This allows the use
     81  * of Type1 and Type2 opcodes at module level.
     82  */
     83 DefinitionBlockTerm
     84     : PARSEOP_DEFINITIONBLOCK '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITIONBLOCK);}
     85         String ','
     86         String ','
     87         ByteConst ','
     88         String ','
     89         String ','
     90         DWordConst
     91         ')'                         {TrSetEndLineNumber ($<n>3);}
     92             '{' TermList '}'        {$$ = TrLinkChildren ($<n>3,7,$4,$6,$8,$10,$12,$14,$18);}
     93     ;
     94 
     95     /*
     96      * ASL Extensions: C-style math/logical operators and expressions.
     97      * The implementation transforms these operators into the standard
     98      * AML opcodes and syntax.
     99      *
    100      * Supported operators and precedence rules (high-to-low)
    101      *
    102      * NOTE: The operator precedence and associativity rules are
    103      * implemented by the tokens in asltokens.y
    104      *
    105      * (left-to-right):
    106      *  1)      ( ) expr++ expr--
    107      *
    108      * (right-to-left):
    109      *  2)      ! ~
    110      *
    111      * (left-to-right):
    112      *  3)      *   /   %
    113      *  4)      +   -
    114      *  5)      >>  <<
    115      *  6)      <   >   <=  >=
    116      *  7)      ==  !=
    117      *  8)      &
    118      *  9)      ^
    119      *  10)     |
    120      *  11)     &&
    121      *  12)     ||
    122      *
    123      * (right-to-left):
    124      *  13)     = += -= *= /= %= <<= >>= &= ^= |=
    125      */
    126 Expression
    127 
    128     /* Unary operators */
    129 
    130     : PARSEOP_EXP_LOGICAL_NOT           {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
    131         TermArg                         {$$ = TrLinkChildren ($<n>2,1,$3);}
    132     | PARSEOP_EXP_NOT                   {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
    133         TermArg                         {$$ = TrLinkChildren ($<n>2,2,$3,TrCreateNullTarget ());}
    134 
    135     | SuperName PARSEOP_EXP_INCREMENT   {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
    136                                         {$$ = TrLinkChildren ($<n>3,1,$1);}
    137     | SuperName PARSEOP_EXP_DECREMENT   {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
    138                                         {$$ = TrLinkChildren ($<n>3,1,$1);}
    139 
    140     /* Binary operators: math and logical */
    141 
    142     | TermArg PARSEOP_EXP_ADD           {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
    143         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
    144     | TermArg PARSEOP_EXP_DIVIDE        {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
    145         TermArg                         {$$ = TrLinkChildren ($<n>3,4,$1,$4,TrCreateNullTarget (),
    146                                             TrCreateNullTarget ());}
    147     | TermArg PARSEOP_EXP_MODULO        {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
    148         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
    149     | TermArg PARSEOP_EXP_MULTIPLY      {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
    150         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
    151     | TermArg PARSEOP_EXP_SHIFT_LEFT    {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
    152         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
    153     | TermArg PARSEOP_EXP_SHIFT_RIGHT   {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
    154         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
    155     | TermArg PARSEOP_EXP_SUBTRACT      {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
    156         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
    157 
    158     | TermArg PARSEOP_EXP_AND           {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
    159         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
    160     | TermArg PARSEOP_EXP_OR            {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
    161         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
    162     | TermArg PARSEOP_EXP_XOR           {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
    163         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
    164 
    165     | TermArg PARSEOP_EXP_GREATER       {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
    166         TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
    167     | TermArg PARSEOP_EXP_GREATER_EQUAL {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATEREQUAL);}
    168         TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
    169     | TermArg PARSEOP_EXP_LESS          {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
    170         TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
    171     | TermArg PARSEOP_EXP_LESS_EQUAL    {$<n>$ = TrCreateLeafNode (PARSEOP_LLESSEQUAL);}
    172         TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
    173 
    174     | TermArg PARSEOP_EXP_EQUAL         {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
    175         TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
    176     | TermArg PARSEOP_EXP_NOT_EQUAL     {$<n>$ = TrCreateLeafNode (PARSEOP_LNOTEQUAL);}
    177         TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
    178 
    179     | TermArg PARSEOP_EXP_LOGICAL_AND   {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
    180         TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
    181     | TermArg PARSEOP_EXP_LOGICAL_OR    {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
    182         TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
    183 
    184       /* Parentheses */
    185 
    186     | '(' TermArg ')'                   { $$ = $2;}
    187     ;
    188 
    189 EqualsTerm
    190 
    191     /* All assignment-type operations */
    192 
    193     : SuperName PARSEOP_EXP_EQUALS
    194         TermArg                         {$$ = TrCreateAssignmentNode ($1, $3);}
    195 
    196     | TermArg PARSEOP_EXP_ADD_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
    197         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
    198                                             TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
    199 
    200     | TermArg PARSEOP_EXP_DIV_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
    201         TermArg                         {$$ = TrLinkChildren ($<n>3,4,$1,$4,TrCreateNullTarget (),
    202                                             TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
    203 
    204     | TermArg PARSEOP_EXP_MOD_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
    205         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
    206                                             TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
    207 
    208     | TermArg PARSEOP_EXP_MUL_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
    209         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
    210                                             TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
    211 
    212     | TermArg PARSEOP_EXP_SHL_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
    213         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
    214                                             TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
    215 
    216     | TermArg PARSEOP_EXP_SHR_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
    217         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
    218                                             TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
    219 
    220     | TermArg PARSEOP_EXP_SUB_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
    221         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
    222                                             TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
    223 
    224     | TermArg PARSEOP_EXP_AND_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
    225         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
    226                                             TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
    227 
    228     | TermArg PARSEOP_EXP_OR_EQ         {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
    229         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
    230                                             TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
    231 
    232     | TermArg PARSEOP_EXP_XOR_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
    233         TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
    234                                             TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
    235     ;
    236 
    237 
    238 /* ACPI 3.0 -- allow semicolons between terms */
    239 
    240 TermList
    241     :                               {$$ = NULL;}
    242     | TermList Term                 {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
    243     | TermList Term ';'             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
    244     | TermList ';' Term             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
    245     | TermList ';' Term ';'         {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
    246     ;
    247 
    248 Term
    249     : Object                        {}
    250     | Type1Opcode                   {}
    251     | Type2Opcode                   {}
    252     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    253     | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    254     | Type2BufferOpcode             {}
    255     | Type2BufferOrStringOpcode     {}
    256     | error                         {$$ = AslDoError(); yyclearin;}
    257     ;
    258 
    259 CompilerDirective
    260     : IncludeTerm                   {}
    261     | ExternalTerm                  {}
    262     ;
    263 
    264 ObjectList
    265     :                               {$$ = NULL;}
    266     | ObjectList Object             {$$ = TrLinkPeerNode ($1,$2);}
    267     | error                         {$$ = AslDoError(); yyclearin;}
    268     ;
    269 
    270 Object
    271     : CompilerDirective             {}
    272     | NamedObject                   {}
    273     | NameSpaceModifier             {}
    274     ;
    275 
    276 DataObject
    277     : BufferData                    {}
    278     | PackageData                   {}
    279     | IntegerData                   {}
    280     | StringData                    {}
    281     ;
    282 
    283 BufferData
    284     : Type5Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    285     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    286     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    287     | BufferTerm                    {}
    288     ;
    289 
    290 PackageData
    291     : PackageTerm                   {}
    292     ;
    293 
    294 IntegerData
    295     : Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    296     | Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    297     | Integer                       {}
    298     | ConstTerm                     {}
    299     ;
    300 
    301 StringData
    302     : Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    303     | String                        {}
    304     ;
    305 
    306 NamedObject
    307     : BankFieldTerm                 {}
    308     | CreateBitFieldTerm            {}
    309     | CreateByteFieldTerm           {}
    310     | CreateDWordFieldTerm          {}
    311     | CreateFieldTerm               {}
    312     | CreateQWordFieldTerm          {}
    313     | CreateWordFieldTerm           {}
    314     | DataRegionTerm                {}
    315     | DeviceTerm                    {}
    316     | EventTerm                     {}
    317     | FieldTerm                     {}
    318     | FunctionTerm                  {}
    319     | IndexFieldTerm                {}
    320     | MethodTerm                    {}
    321     | MutexTerm                     {}
    322     | OpRegionTerm                  {}
    323     | PowerResTerm                  {}
    324     | ProcessorTerm                 {}
    325     | ThermalZoneTerm               {}
    326     ;
    327 
    328 NameSpaceModifier
    329     : AliasTerm                     {}
    330     | NameTerm                      {}
    331     | ScopeTerm                     {}
    332     ;
    333 
    334 MethodInvocationTerm
    335     : NameString '('                {TrUpdateNode (PARSEOP_METHODCALL, $1);}
    336         ArgList ')'                 {$$ = TrLinkChildNode ($1,$4);}
    337     ;
    338 
    339 ArgList
    340     :                               {$$ = NULL;}
    341     | TermArg
    342     | ArgList ','                   /* Allows a trailing comma at list end */
    343     | ArgList ','
    344         TermArg                     {$$ = TrLinkPeerNode ($1,$3);}
    345     ;
    346 
    347 /*
    348 Removed from TermArg due to reduce/reduce conflicts
    349     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    350     | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    351     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    352     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    353 
    354 */
    355 
    356 TermArg
    357     : Type2Opcode                   {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    358     | DataObject                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    359     | NameString                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    360     | ArgTerm                       {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    361     | LocalTerm                     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    362     ;
    363 
    364 Target
    365     :                               {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
    366     | ','                           {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
    367     | ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
    368     ;
    369 
    370 RequiredTarget
    371     : ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
    372     ;
    373 
    374 SimpleTarget
    375     : NameString                    {}
    376     | LocalTerm                     {}
    377     | ArgTerm                       {}
    378     ;
    379 
    380 /* Rules for specifying the type of one method argument or return value */
    381 
    382 ParameterTypePackage
    383     :                               {$$ = NULL;}
    384     | ObjectTypeKeyword             {$$ = $1;}
    385     | ParameterTypePackage ','
    386         ObjectTypeKeyword           {$$ = TrLinkPeerNodes (2,$1,$3);}
    387     ;
    388 
    389 ParameterTypePackageList
    390     :                               {$$ = NULL;}
    391     | ObjectTypeKeyword             {$$ = $1;}
    392     | '{' ParameterTypePackage '}'  {$$ = $2;}
    393     ;
    394 
    395 OptionalParameterTypePackage
    396     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
    397     | ',' ParameterTypePackageList  {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
    398     ;
    399 
    400 /* Rules for specifying the types for method arguments */
    401 
    402 ParameterTypesPackage
    403     : ParameterTypePackageList      {$$ = $1;}
    404     | ParameterTypesPackage ','
    405         ParameterTypePackageList    {$$ = TrLinkPeerNodes (2,$1,$3);}
    406     ;
    407 
    408 ParameterTypesPackageList
    409     :                               {$$ = NULL;}
    410     | ObjectTypeKeyword             {$$ = $1;}
    411     | '{' ParameterTypesPackage '}' {$$ = $2;}
    412     ;
    413 
    414 OptionalParameterTypesPackage
    415     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
    416     | ',' ParameterTypesPackageList {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
    417     ;
    418 
    419 
    420 /* Opcode types */
    421 
    422 Type1Opcode
    423     : BreakTerm                     {}
    424     | BreakPointTerm                {}
    425     | ContinueTerm                  {}
    426     | FatalTerm                     {}
    427     | IfElseTerm                    {}
    428     | LoadTerm                      {}
    429     | NoOpTerm                      {}
    430     | NotifyTerm                    {}
    431     | ReleaseTerm                   {}
    432     | ResetTerm                     {}
    433     | ReturnTerm                    {}
    434     | SignalTerm                    {}
    435     | SleepTerm                     {}
    436     | StallTerm                     {}
    437     | SwitchTerm                    {}
    438     | UnloadTerm                    {}
    439     | WhileTerm                     {}
    440     ;
    441 
    442 Type2Opcode
    443     : AcquireTerm                   {}
    444     | CondRefOfTerm                 {}
    445     | CopyObjectTerm                {}
    446     | DerefOfTerm                   {}
    447     | ObjectTypeTerm                {}
    448     | RefOfTerm                     {}
    449     | SizeOfTerm                    {}
    450     | StoreTerm                     {}
    451     | EqualsTerm                    {}
    452     | TimerTerm                     {}
    453     | WaitTerm                      {}
    454     | MethodInvocationTerm          {}
    455     ;
    456 
    457 /*
    458  * Type 3/4/5 opcodes
    459  */
    460 
    461 Type2IntegerOpcode                  /* "Type3" opcodes */
    462     : Expression                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    463     | AddTerm                       {}
    464     | AndTerm                       {}
    465     | DecTerm                       {}
    466     | DivideTerm                    {}
    467     | FindSetLeftBitTerm            {}
    468     | FindSetRightBitTerm           {}
    469     | FromBCDTerm                   {}
    470     | IncTerm                       {}
    471     | IndexTerm                     {}
    472     | LAndTerm                      {}
    473     | LEqualTerm                    {}
    474     | LGreaterTerm                  {}
    475     | LGreaterEqualTerm             {}
    476     | LLessTerm                     {}
    477     | LLessEqualTerm                {}
    478     | LNotTerm                      {}
    479     | LNotEqualTerm                 {}
    480     | LoadTableTerm                 {}
    481     | LOrTerm                       {}
    482     | MatchTerm                     {}
    483     | ModTerm                       {}
    484     | MultiplyTerm                  {}
    485     | NAndTerm                      {}
    486     | NOrTerm                       {}
    487     | NotTerm                       {}
    488     | OrTerm                        {}
    489     | ShiftLeftTerm                 {}
    490     | ShiftRightTerm                {}
    491     | SubtractTerm                  {}
    492     | ToBCDTerm                     {}
    493     | ToIntegerTerm                 {}
    494     | XOrTerm                       {}
    495     ;
    496 
    497 Type2StringOpcode                   /* "Type4" Opcodes */
    498     : ToDecimalStringTerm           {}
    499     | ToHexStringTerm               {}
    500     | ToStringTerm                  {}
    501     ;
    502 
    503 Type2BufferOpcode                   /* "Type5" Opcodes */
    504     : ToBufferTerm                  {}
    505     | ConcatResTerm                 {}
    506     ;
    507 
    508 Type2BufferOrStringOpcode
    509     : ConcatTerm                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    510     | PrintfTerm                    {}
    511     | FprintfTerm                   {}
    512     | MidTerm                       {}
    513     ;
    514 
    515 /*
    516  * A type 3 opcode evaluates to an Integer and cannot have a destination operand
    517  */
    518 
    519 Type3Opcode
    520     : EISAIDTerm                    {}
    521     ;
    522 
    523 /* Obsolete
    524 Type4Opcode
    525     : ConcatTerm                    {}
    526     | ToDecimalStringTerm           {}
    527     | ToHexStringTerm               {}
    528     | MidTerm                       {}
    529     | ToStringTerm                  {}
    530     ;
    531 */
    532 
    533 
    534 Type5Opcode
    535     : ResourceTemplateTerm          {}
    536     | UnicodeTerm                   {}
    537     | ToPLDTerm                     {}
    538     | ToUUIDTerm                    {}
    539     ;
    540 
    541 Type6Opcode
    542     : RefOfTerm                     {}
    543     | DerefOfTerm                   {}
    544     | IndexTerm                     {}
    545     | MethodInvocationTerm          {}
    546     ;
    547 
    548 IncludeTerm
    549     : PARSEOP_INCLUDE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE);}
    550         String  ')'                 {TrLinkChildren ($<n>3,1,$4);FlOpenIncludeFile ($4);}
    551         TermList
    552         IncludeEndTerm              {$$ = TrLinkPeerNodes (3,$<n>3,$7,$8);}
    553     ;
    554 
    555 IncludeEndTerm
    556     : PARSEOP_INCLUDE_END           {$$ = TrCreateLeafNode (PARSEOP_INCLUDE_END);}
    557     ;
    558 
    559 ExternalTerm
    560     : PARSEOP_EXTERNAL '('
    561         NameString
    562         OptionalObjectTypeKeyword
    563         OptionalParameterTypePackage
    564         OptionalParameterTypesPackage
    565         ')'                         {$$ = TrCreateNode (PARSEOP_EXTERNAL,4,$3,$4,$5,$6);}
    566     | PARSEOP_EXTERNAL '('
    567         error ')'                   {$$ = AslDoError(); yyclearin;}
    568     ;
    569 
    570 
    571 /******* Named Objects *******************************************************/
    572 
    573 
    574 BankFieldTerm
    575     : PARSEOP_BANKFIELD '('         {$<n>$ = TrCreateLeafNode (PARSEOP_BANKFIELD);}
    576         NameString
    577         NameStringItem
    578         TermArgItem
    579         ',' AccessTypeKeyword
    580         ',' LockRuleKeyword
    581         ',' UpdateRuleKeyword
    582         ')' '{'
    583             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,7,$4,$5,$6,$8,$10,$12,$15);}
    584     | PARSEOP_BANKFIELD '('
    585         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
    586     ;
    587 
    588 FieldUnitList
    589     :                               {$$ = NULL;}
    590     | FieldUnit
    591     | FieldUnitList ','             /* Allows a trailing comma at list end */
    592     | FieldUnitList ','
    593         FieldUnit                   {$$ = TrLinkPeerNode ($1,$3);}
    594     ;
    595 
    596 FieldUnit
    597     : FieldUnitEntry                {}
    598     | OffsetTerm                    {}
    599     | AccessAsTerm                  {}
    600     | ConnectionTerm                {}
    601     ;
    602 
    603 FieldUnitEntry
    604     : ',' AmlPackageLengthTerm      {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);}
    605     | NameSeg ','
    606         AmlPackageLengthTerm        {$$ = TrLinkChildNode ($1,$3);}
    607     ;
    608 
    609 OffsetTerm
    610     : PARSEOP_OFFSET '('
    611         AmlPackageLengthTerm
    612         ')'                         {$$ = TrCreateNode (PARSEOP_OFFSET,1,$3);}
    613     | PARSEOP_OFFSET '('
    614         error ')'                   {$$ = AslDoError(); yyclearin;}
    615     ;
    616 
    617 AccessAsTerm
    618     : PARSEOP_ACCESSAS '('
    619         AccessTypeKeyword
    620         OptionalAccessAttribTerm
    621         ')'                         {$$ = TrCreateNode (PARSEOP_ACCESSAS,2,$3,$4);}
    622     | PARSEOP_ACCESSAS '('
    623         error ')'                   {$$ = AslDoError(); yyclearin;}
    624     ;
    625 
    626 ConnectionTerm
    627     : PARSEOP_CONNECTION '('
    628         NameString
    629         ')'                         {$$ = TrCreateNode (PARSEOP_CONNECTION,1,$3);}
    630     | PARSEOP_CONNECTION '('        {$<n>$ = TrCreateLeafNode (PARSEOP_CONNECTION);}
    631         ResourceMacroTerm
    632         ')'                         {$$ = TrLinkChildren ($<n>3, 1,
    633                                             TrLinkChildren (TrCreateLeafNode (PARSEOP_RESOURCETEMPLATE), 3,
    634                                                 TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
    635                                                 TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
    636                                                 $4));}
    637     | PARSEOP_CONNECTION '('
    638         error ')'                   {$$ = AslDoError(); yyclearin;}
    639     ;
    640 
    641 CreateBitFieldTerm
    642     : PARSEOP_CREATEBITFIELD '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBITFIELD);}
    643         TermArg
    644         TermArgItem
    645         NameStringItem
    646         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    647     | PARSEOP_CREATEBITFIELD '('
    648         error ')'                   {$$ = AslDoError(); yyclearin;}
    649     ;
    650 
    651 CreateByteFieldTerm
    652     : PARSEOP_CREATEBYTEFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBYTEFIELD);}
    653         TermArg
    654         TermArgItem
    655         NameStringItem
    656         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    657     | PARSEOP_CREATEBYTEFIELD '('
    658         error ')'                   {$$ = AslDoError(); yyclearin;}
    659     ;
    660 
    661 CreateDWordFieldTerm
    662     : PARSEOP_CREATEDWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEDWORDFIELD);}
    663         TermArg
    664         TermArgItem
    665         NameStringItem
    666         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    667     | PARSEOP_CREATEDWORDFIELD '('
    668         error ')'                   {$$ = AslDoError(); yyclearin;}
    669     ;
    670 
    671 CreateFieldTerm
    672     : PARSEOP_CREATEFIELD '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEFIELD);}
    673         TermArg
    674         TermArgItem
    675         TermArgItem
    676         NameStringItem
    677         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,TrSetNodeFlags ($7, NODE_IS_NAME_DECLARATION));}
    678     | PARSEOP_CREATEFIELD '('
    679         error ')'                   {$$ = AslDoError(); yyclearin;}
    680     ;
    681 
    682 CreateQWordFieldTerm
    683     : PARSEOP_CREATEQWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEQWORDFIELD);}
    684         TermArg
    685         TermArgItem
    686         NameStringItem
    687         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    688     | PARSEOP_CREATEQWORDFIELD '('
    689         error ')'                   {$$ = AslDoError(); yyclearin;}
    690     ;
    691 
    692 CreateWordFieldTerm
    693     : PARSEOP_CREATEWORDFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEWORDFIELD);}
    694         TermArg
    695         TermArgItem
    696         NameStringItem
    697         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    698     | PARSEOP_CREATEWORDFIELD '('
    699         error ')'                   {$$ = AslDoError(); yyclearin;}
    700     ;
    701 
    702 DataRegionTerm
    703     : PARSEOP_DATATABLEREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DATATABLEREGION);}
    704         NameString
    705         TermArgItem
    706         TermArgItem
    707         TermArgItem
    708         ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$6,$7);}
    709     | PARSEOP_DATATABLEREGION '('
    710         error ')'                   {$$ = AslDoError(); yyclearin;}
    711     ;
    712 
    713 DeviceTerm
    714     : PARSEOP_DEVICE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
    715         NameString
    716         ')' '{'
    717             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
    718     | PARSEOP_DEVICE '('
    719         error ')'                   {$$ = AslDoError(); yyclearin;}
    720     ;
    721 
    722 EventTerm
    723     : PARSEOP_EVENT '('             {$<n>$ = TrCreateLeafNode (PARSEOP_EVENT);}
    724         NameString
    725         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION));}
    726     | PARSEOP_EVENT '('
    727         error ')'                   {$$ = AslDoError(); yyclearin;}
    728     ;
    729 
    730 FieldTerm
    731     : PARSEOP_FIELD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FIELD);}
    732         NameString
    733         ',' AccessTypeKeyword
    734         ',' LockRuleKeyword
    735         ',' UpdateRuleKeyword
    736         ')' '{'
    737             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$10,$13);}
    738     | PARSEOP_FIELD '('
    739         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
    740     ;
    741 
    742 FunctionTerm
    743     : PARSEOP_FUNCTION '('          {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
    744         NameString
    745         OptionalParameterTypePackage
    746         OptionalParameterTypesPackage
    747         ')' '{'
    748             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
    749                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
    750                                         TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
    751                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$9);}
    752     | PARSEOP_FUNCTION '('
    753         error ')'                   {$$ = AslDoError(); yyclearin;}
    754     ;
    755 
    756 IndexFieldTerm
    757     : PARSEOP_INDEXFIELD '('        {$<n>$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
    758         NameString
    759         NameStringItem
    760         ',' AccessTypeKeyword
    761         ',' LockRuleKeyword
    762         ',' UpdateRuleKeyword
    763         ')' '{'
    764             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
    765     | PARSEOP_INDEXFIELD '('
    766         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
    767     ;
    768 
    769 MethodTerm
    770     : PARSEOP_METHOD  '('           {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
    771         NameString
    772         OptionalByteConstExpr       {UtCheckIntegerRange ($5, 0, 7);}
    773         OptionalSerializeRuleKeyword
    774         OptionalByteConstExpr
    775         OptionalParameterTypePackage
    776         OptionalParameterTypesPackage
    777         ')' '{'
    778             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$7,$8,$9,$10,$13);}
    779     | PARSEOP_METHOD '('
    780         error ')'                   {$$ = AslDoError(); yyclearin;}
    781     ;
    782 
    783 MutexTerm
    784     : PARSEOP_MUTEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MUTEX);}
    785         NameString
    786         ',' ByteConstExpr
    787         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
    788     | PARSEOP_MUTEX '('
    789         error ')'                   {$$ = AslDoError(); yyclearin;}
    790     ;
    791 
    792 OpRegionTerm
    793     : PARSEOP_OPERATIONREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_OPERATIONREGION);}
    794         NameString
    795         ',' OpRegionSpaceIdTerm
    796         TermArgItem
    797         TermArgItem
    798         ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8);}
    799     | PARSEOP_OPERATIONREGION '('
    800         error ')'                   {$$ = AslDoError(); yyclearin;}
    801     ;
    802 
    803 OpRegionSpaceIdTerm
    804     : RegionSpaceKeyword            {}
    805     | ByteConst                     {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
    806     ;
    807 
    808 PowerResTerm
    809     : PARSEOP_POWERRESOURCE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_POWERRESOURCE);}
    810         NameString
    811         ',' ByteConstExpr
    812         ',' WordConstExpr
    813         ')' '{'
    814             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$8,$11);}
    815     | PARSEOP_POWERRESOURCE '('
    816         error ')'                   {$$ = AslDoError(); yyclearin;}
    817     ;
    818 
    819 ProcessorTerm
    820     : PARSEOP_PROCESSOR '('         {$<n>$ = TrCreateLeafNode (PARSEOP_PROCESSOR);}
    821         NameString
    822         ',' ByteConstExpr
    823         OptionalDWordConstExpr
    824         OptionalByteConstExpr
    825         ')' '{'
    826             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,5,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8,$11);}
    827     | PARSEOP_PROCESSOR '('
    828         error ')'                   {$$ = AslDoError(); yyclearin;}
    829     ;
    830 
    831 ThermalZoneTerm
    832     : PARSEOP_THERMALZONE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
    833         NameString
    834         ')' '{'
    835             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
    836     | PARSEOP_THERMALZONE '('
    837         error ')'                   {$$ = AslDoError(); yyclearin;}
    838     ;
    839 
    840 
    841 /******* Namespace modifiers *************************************************/
    842 
    843 
    844 AliasTerm
    845     : PARSEOP_ALIAS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_ALIAS);}
    846         NameString
    847         NameStringItem
    848         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($5, NODE_IS_NAME_DECLARATION));}
    849     | PARSEOP_ALIAS '('
    850         error ')'                   {$$ = AslDoError(); yyclearin;}
    851     ;
    852 
    853 NameTerm
    854     : PARSEOP_NAME '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAME);}
    855         NameString
    856         ',' DataObject
    857         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
    858     | PARSEOP_NAME '('
    859         error ')'                   {$$ = AslDoError(); yyclearin;}
    860     ;
    861 
    862 ScopeTerm
    863     : PARSEOP_SCOPE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
    864         NameString
    865         ')' '{'
    866             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
    867     | PARSEOP_SCOPE '('
    868         error ')'                   {$$ = AslDoError(); yyclearin;}
    869     ;
    870 
    871 
    872 /******* Type 1 opcodes *******************************************************/
    873 
    874 
    875 BreakTerm
    876     : PARSEOP_BREAK                 {$$ = TrCreateNode (PARSEOP_BREAK, 0);}
    877     ;
    878 
    879 BreakPointTerm
    880     : PARSEOP_BREAKPOINT            {$$ = TrCreateNode (PARSEOP_BREAKPOINT, 0);}
    881     ;
    882 
    883 ContinueTerm
    884     : PARSEOP_CONTINUE              {$$ = TrCreateNode (PARSEOP_CONTINUE, 0);}
    885     ;
    886 
    887 FatalTerm
    888     : PARSEOP_FATAL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FATAL);}
    889         ByteConstExpr
    890         ',' DWordConstExpr
    891         TermArgItem
    892         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
    893     | PARSEOP_FATAL '('
    894         error ')'                   {$$ = AslDoError(); yyclearin;}
    895     ;
    896 
    897 IfElseTerm
    898     : IfTerm ElseTerm               {$$ = TrLinkPeerNode ($1,$2);}
    899     ;
    900 
    901 IfTerm
    902     : PARSEOP_IF '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
    903         TermArg
    904         ')' '{'
    905             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
    906 
    907     | PARSEOP_IF '('
    908         error ')'                   {$$ = AslDoError(); yyclearin;}
    909     ;
    910 
    911 ElseTerm
    912     :                               {$$ = NULL;}
    913     | PARSEOP_ELSE '{'              {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
    914         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
    915 
    916     | PARSEOP_ELSE '{'
    917         error '}'                   {$$ = AslDoError(); yyclearin;}
    918 
    919     | PARSEOP_ELSE
    920         error                       {$$ = AslDoError(); yyclearin;}
    921 
    922     | PARSEOP_ELSEIF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
    923         TermArg                     {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
    924         ')' '{'
    925             TermList '}'            {TrLinkChildren ($<n>5,2,$4,$8);}
    926         ElseTerm                    {TrLinkPeerNode ($<n>5,$11);}
    927                                     {$$ = TrLinkChildren ($<n>3,1,$<n>5);}
    928 
    929     | PARSEOP_ELSEIF '('
    930         error ')'                   {$$ = AslDoError(); yyclearin;}
    931 
    932     | PARSEOP_ELSEIF
    933         error                       {$$ = AslDoError(); yyclearin;}
    934     ;
    935 
    936 LoadTerm
    937     : PARSEOP_LOAD '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LOAD);}
    938         NameString
    939         RequiredTarget
    940         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    941     | PARSEOP_LOAD '('
    942         error ')'                   {$$ = AslDoError(); yyclearin;}
    943     ;
    944 
    945 NoOpTerm
    946     : PARSEOP_NOOP                  {$$ = TrCreateNode (PARSEOP_NOOP, 0);}
    947     ;
    948 
    949 NotifyTerm
    950     : PARSEOP_NOTIFY '('            {$<n>$ = TrCreateLeafNode (PARSEOP_NOTIFY);}
    951         SuperName
    952         TermArgItem
    953         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    954     | PARSEOP_NOTIFY '('
    955         error ')'                   {$$ = AslDoError(); yyclearin;}
    956     ;
    957 
    958 ReleaseTerm
    959     : PARSEOP_RELEASE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_RELEASE);}
    960         SuperName
    961         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
    962     | PARSEOP_RELEASE '('
    963         error ')'                   {$$ = AslDoError(); yyclearin;}
    964     ;
    965 
    966 ResetTerm
    967     : PARSEOP_RESET '('             {$<n>$ = TrCreateLeafNode (PARSEOP_RESET);}
    968         SuperName
    969         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
    970     | PARSEOP_RESET '('
    971         error ')'                   {$$ = AslDoError(); yyclearin;}
    972     ;
    973 
    974 ReturnTerm
    975     : PARSEOP_RETURN '('            {$<n>$ = TrCreateLeafNode (PARSEOP_RETURN);}
    976         OptionalReturnArg
    977         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
    978     | PARSEOP_RETURN                {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),1,TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN));}
    979     | PARSEOP_RETURN '('
    980         error ')'                   {$$ = AslDoError(); yyclearin;}
    981     ;
    982 
    983 SignalTerm
    984     : PARSEOP_SIGNAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIGNAL);}
    985         SuperName
    986         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
    987     | PARSEOP_SIGNAL '('
    988         error ')'                   {$$ = AslDoError(); yyclearin;}
    989     ;
    990 
    991 SleepTerm
    992     : PARSEOP_SLEEP '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SLEEP);}
    993         TermArg
    994         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
    995     | PARSEOP_SLEEP '('
    996         error ')'                   {$$ = AslDoError(); yyclearin;}
    997     ;
    998 
    999 StallTerm
   1000     : PARSEOP_STALL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STALL);}
   1001         TermArg
   1002         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1003     | PARSEOP_STALL '('
   1004         error ')'                   {$$ = AslDoError(); yyclearin;}
   1005     ;
   1006 
   1007 SwitchTerm
   1008     : PARSEOP_SWITCH '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SWITCH);}
   1009         TermArg
   1010         ')' '{'
   1011             CaseDefaultTermList '}'
   1012                                     {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   1013     | PARSEOP_SWITCH '('
   1014         error ')'                   {$$ = AslDoError(); yyclearin;}
   1015     ;
   1016 
   1017 /*
   1018  * Case-Default list; allow only one Default term and unlimited Case terms
   1019  */
   1020 
   1021 CaseDefaultTermList
   1022     :                               {$$ = NULL;}
   1023     | CaseTerm  {}
   1024     | DefaultTerm   {}
   1025     | CaseDefaultTermList
   1026         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
   1027     | CaseDefaultTermList
   1028         DefaultTerm                 {$$ = TrLinkPeerNode ($1,$2);}
   1029 
   1030 /* Original - attempts to force zero or one default term within the switch */
   1031 
   1032 /*
   1033 CaseDefaultTermList
   1034     :                               {$$ = NULL;}
   1035     | CaseTermList
   1036         DefaultTerm
   1037         CaseTermList                {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));}
   1038     | CaseTermList
   1039         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
   1040     ;
   1041 
   1042 CaseTermList
   1043     :                               {$$ = NULL;}
   1044     | CaseTerm                      {}
   1045     | CaseTermList
   1046         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
   1047     ;
   1048 */
   1049 
   1050 CaseTerm
   1051     : PARSEOP_CASE '('              {$<n>$ = TrCreateLeafNode (PARSEOP_CASE);}
   1052         DataObject
   1053         ')' '{'
   1054             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   1055     | PARSEOP_CASE '('
   1056         error ')'                   {$$ = AslDoError(); yyclearin;}
   1057     ;
   1058 
   1059 DefaultTerm
   1060     : PARSEOP_DEFAULT '{'           {$<n>$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
   1061         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
   1062     | PARSEOP_DEFAULT '{'
   1063         error '}'                   {$$ = AslDoError(); yyclearin;}
   1064     ;
   1065 
   1066 UnloadTerm
   1067     : PARSEOP_UNLOAD '('            {$<n>$ = TrCreateLeafNode (PARSEOP_UNLOAD);}
   1068         SuperName
   1069         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1070     | PARSEOP_UNLOAD '('
   1071         error ')'                   {$$ = AslDoError(); yyclearin;}
   1072     ;
   1073 
   1074 WhileTerm
   1075     : PARSEOP_WHILE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
   1076         TermArg
   1077         ')' '{' TermList '}'
   1078                                     {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   1079     | PARSEOP_WHILE '('
   1080         error ')'                   {$$ = AslDoError(); yyclearin;}
   1081     ;
   1082 
   1083 
   1084 /******* Type 2 opcodes *******************************************************/
   1085 
   1086 AcquireTerm
   1087     : PARSEOP_ACQUIRE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_ACQUIRE);}
   1088         SuperName
   1089         ',' WordConstExpr
   1090         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$6);}
   1091     | PARSEOP_ACQUIRE '('
   1092         error ')'                   {$$ = AslDoError(); yyclearin;}
   1093     ;
   1094 
   1095 AddTerm
   1096     : PARSEOP_ADD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
   1097         TermArg
   1098         TermArgItem
   1099         Target
   1100         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1101     | PARSEOP_ADD '('
   1102         error ')'                   {$$ = AslDoError(); yyclearin;}
   1103     ;
   1104 
   1105 AndTerm
   1106     : PARSEOP_AND '('               {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
   1107         TermArg
   1108         TermArgItem
   1109         Target
   1110         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1111     | PARSEOP_AND '('
   1112         error ')'                   {$$ = AslDoError(); yyclearin;}
   1113     ;
   1114 
   1115 ConcatTerm
   1116     : PARSEOP_CONCATENATE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATE);}
   1117         TermArg
   1118         TermArgItem
   1119         Target
   1120         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1121     | PARSEOP_CONCATENATE '('
   1122         error ')'                   {$$ = AslDoError(); yyclearin;}
   1123     ;
   1124 
   1125 ConcatResTerm
   1126     : PARSEOP_CONCATENATERESTEMPLATE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATERESTEMPLATE);}
   1127         TermArg
   1128         TermArgItem
   1129         Target
   1130         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1131     | PARSEOP_CONCATENATERESTEMPLATE '('
   1132         error ')'                   {$$ = AslDoError(); yyclearin;}
   1133     ;
   1134 
   1135 CondRefOfTerm
   1136     : PARSEOP_CONDREFOF '('         {$<n>$ = TrCreateLeafNode (PARSEOP_CONDREFOF);}
   1137         SuperName
   1138         Target
   1139         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1140     | PARSEOP_CONDREFOF '('
   1141         error ')'                   {$$ = AslDoError(); yyclearin;}
   1142     ;
   1143 
   1144 CopyObjectTerm
   1145     : PARSEOP_COPYOBJECT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_COPYOBJECT);}
   1146         TermArg
   1147         ',' SimpleTarget
   1148         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
   1149     | PARSEOP_COPYOBJECT '('
   1150         error ')'                   {$$ = AslDoError(); yyclearin;}
   1151     ;
   1152 
   1153 DecTerm
   1154     : PARSEOP_DECREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
   1155         SuperName
   1156         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1157     | PARSEOP_DECREMENT '('
   1158         error ')'                   {$$ = AslDoError(); yyclearin;}
   1159     ;
   1160 
   1161 DerefOfTerm
   1162     : PARSEOP_DEREFOF '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DEREFOF);}
   1163         TermArg
   1164         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1165     | PARSEOP_DEREFOF '('
   1166         error ')'                   {$$ = AslDoError(); yyclearin;}
   1167     ;
   1168 
   1169 DivideTerm
   1170     : PARSEOP_DIVIDE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
   1171         TermArg
   1172         TermArgItem
   1173         Target
   1174         Target
   1175         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
   1176     | PARSEOP_DIVIDE '('
   1177         error ')'                   {$$ = AslDoError(); yyclearin;}
   1178     ;
   1179 
   1180 FindSetLeftBitTerm
   1181     : PARSEOP_FINDSETLEFTBIT '('    {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETLEFTBIT);}
   1182         TermArg
   1183         Target
   1184         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1185     | PARSEOP_FINDSETLEFTBIT '('
   1186         error ')'                   {$$ = AslDoError(); yyclearin;}
   1187     ;
   1188 
   1189 FindSetRightBitTerm
   1190     : PARSEOP_FINDSETRIGHTBIT '('   {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETRIGHTBIT);}
   1191         TermArg
   1192         Target
   1193         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1194     | PARSEOP_FINDSETRIGHTBIT '('
   1195         error ')'                   {$$ = AslDoError(); yyclearin;}
   1196     ;
   1197 
   1198 FromBCDTerm
   1199     : PARSEOP_FROMBCD '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FROMBCD);}
   1200         TermArg
   1201         Target
   1202         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1203     | PARSEOP_FROMBCD '('
   1204         error ')'                   {$$ = AslDoError(); yyclearin;}
   1205     ;
   1206 
   1207 IncTerm
   1208     : PARSEOP_INCREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
   1209         SuperName
   1210         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1211     | PARSEOP_INCREMENT '('
   1212         error ')'                   {$$ = AslDoError(); yyclearin;}
   1213     ;
   1214 
   1215 IndexTerm
   1216     : PARSEOP_INDEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_INDEX);}
   1217         TermArg
   1218         TermArgItem
   1219         Target
   1220         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1221     | PARSEOP_INDEX '('
   1222         error ')'                   {$$ = AslDoError(); yyclearin;}
   1223     ;
   1224 
   1225 LAndTerm
   1226     : PARSEOP_LAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
   1227         TermArg
   1228         TermArgItem
   1229         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1230     | PARSEOP_LAND '('
   1231         error ')'                   {$$ = AslDoError(); yyclearin;}
   1232     ;
   1233 
   1234 LEqualTerm
   1235     : PARSEOP_LEQUAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
   1236         TermArg
   1237         TermArgItem
   1238         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1239     | PARSEOP_LEQUAL '('
   1240         error ')'                   {$$ = AslDoError(); yyclearin;}
   1241     ;
   1242 
   1243 LGreaterTerm
   1244     : PARSEOP_LGREATER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
   1245         TermArg
   1246         TermArgItem
   1247         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1248     | PARSEOP_LGREATER '('
   1249         error ')'                   {$$ = AslDoError(); yyclearin;}
   1250     ;
   1251 
   1252 LGreaterEqualTerm
   1253     : PARSEOP_LGREATEREQUAL '('     {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
   1254         TermArg
   1255         TermArgItem
   1256         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
   1257     | PARSEOP_LGREATEREQUAL '('
   1258         error ')'                   {$$ = AslDoError(); yyclearin;}
   1259     ;
   1260 
   1261 LLessTerm
   1262     : PARSEOP_LLESS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
   1263         TermArg
   1264         TermArgItem
   1265         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1266     | PARSEOP_LLESS '('
   1267         error ')'                   {$$ = AslDoError(); yyclearin;}
   1268     ;
   1269 
   1270 LLessEqualTerm
   1271     : PARSEOP_LLESSEQUAL '('        {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
   1272         TermArg
   1273         TermArgItem
   1274         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
   1275     | PARSEOP_LLESSEQUAL '('
   1276         error ')'                   {$$ = AslDoError(); yyclearin;}
   1277     ;
   1278 
   1279 LNotTerm
   1280     : PARSEOP_LNOT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
   1281         TermArg
   1282         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1283     | PARSEOP_LNOT '('
   1284         error ')'                   {$$ = AslDoError(); yyclearin;}
   1285     ;
   1286 
   1287 LNotEqualTerm
   1288     : PARSEOP_LNOTEQUAL '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
   1289         TermArg
   1290         TermArgItem
   1291         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
   1292     | PARSEOP_LNOTEQUAL '('
   1293         error ')'                   {$$ = AslDoError(); yyclearin;}
   1294     ;
   1295 
   1296 LoadTableTerm
   1297     : PARSEOP_LOADTABLE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LOADTABLE);}
   1298         TermArg
   1299         TermArgItem
   1300         TermArgItem
   1301         OptionalListString
   1302         OptionalListString
   1303         OptionalReference
   1304         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$5,$6,$7,$8,$9);}
   1305     | PARSEOP_LOADTABLE '('
   1306         error ')'                   {$$ = AslDoError(); yyclearin;}
   1307     ;
   1308 
   1309 LOrTerm
   1310     : PARSEOP_LOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
   1311         TermArg
   1312         TermArgItem
   1313         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1314     | PARSEOP_LOR '('
   1315         error ')'                   {$$ = AslDoError(); yyclearin;}
   1316     ;
   1317 
   1318 MatchTerm
   1319     : PARSEOP_MATCH '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MATCH);}
   1320         TermArg
   1321         ',' MatchOpKeyword
   1322         TermArgItem
   1323         ',' MatchOpKeyword
   1324         TermArgItem
   1325         TermArgItem
   1326         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$7,$9,$10,$11);}
   1327     | PARSEOP_MATCH '('
   1328         error ')'                   {$$ = AslDoError(); yyclearin;}
   1329     ;
   1330 
   1331 MidTerm
   1332     : PARSEOP_MID '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MID);}
   1333         TermArg
   1334         TermArgItem
   1335         TermArgItem
   1336         Target
   1337         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
   1338     | PARSEOP_MID '('
   1339         error ')'                   {$$ = AslDoError(); yyclearin;}
   1340     ;
   1341 
   1342 ModTerm
   1343     : PARSEOP_MOD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
   1344         TermArg
   1345         TermArgItem
   1346         Target
   1347         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1348     | PARSEOP_MOD '('
   1349         error ')'                   {$$ = AslDoError(); yyclearin;}
   1350     ;
   1351 
   1352 MultiplyTerm
   1353     : PARSEOP_MULTIPLY '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
   1354         TermArg
   1355         TermArgItem
   1356         Target
   1357         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1358     | PARSEOP_MULTIPLY '('
   1359         error ')'                   {$$ = AslDoError(); yyclearin;}
   1360     ;
   1361 
   1362 NAndTerm
   1363     : PARSEOP_NAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAND);}
   1364         TermArg
   1365         TermArgItem
   1366         Target
   1367         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1368     | PARSEOP_NAND '('
   1369         error ')'                   {$$ = AslDoError(); yyclearin;}
   1370     ;
   1371 
   1372 NOrTerm
   1373     : PARSEOP_NOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOR);}
   1374         TermArg
   1375         TermArgItem
   1376         Target
   1377         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1378     | PARSEOP_NOR '('
   1379         error ')'                   {$$ = AslDoError(); yyclearin;}
   1380     ;
   1381 
   1382 NotTerm
   1383     : PARSEOP_NOT '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
   1384         TermArg
   1385         Target
   1386         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1387     | PARSEOP_NOT '('
   1388         error ')'                   {$$ = AslDoError(); yyclearin;}
   1389     ;
   1390 
   1391 ObjectTypeTerm
   1392     : PARSEOP_OBJECTTYPE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE);}
   1393         ObjectTypeName
   1394         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1395     | PARSEOP_OBJECTTYPE '('
   1396         error ')'                   {$$ = AslDoError(); yyclearin;}
   1397     ;
   1398 
   1399 OrTerm
   1400     : PARSEOP_OR '('                {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
   1401         TermArg
   1402         TermArgItem
   1403         Target
   1404         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1405     | PARSEOP_OR '('
   1406         error ')'                   {$$ = AslDoError(); yyclearin;}
   1407     ;
   1408 
   1409 /*
   1410  * In RefOf, the node isn't really a target, but we can't keep track of it after
   1411  * we've taken a pointer to it. (hard to tell if a local becomes initialized this way.)
   1412  */
   1413 RefOfTerm
   1414     : PARSEOP_REFOF '('             {$<n>$ = TrCreateLeafNode (PARSEOP_REFOF);}
   1415         SuperName
   1416         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_TARGET));}
   1417     | PARSEOP_REFOF '('
   1418         error ')'                   {$$ = AslDoError(); yyclearin;}
   1419     ;
   1420 
   1421 ShiftLeftTerm
   1422     : PARSEOP_SHIFTLEFT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
   1423         TermArg
   1424         TermArgItem
   1425         Target
   1426         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1427     | PARSEOP_SHIFTLEFT '('
   1428         error ')'                   {$$ = AslDoError(); yyclearin;}
   1429     ;
   1430 
   1431 ShiftRightTerm
   1432     : PARSEOP_SHIFTRIGHT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
   1433         TermArg
   1434         TermArgItem
   1435         Target
   1436         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1437     | PARSEOP_SHIFTRIGHT '('
   1438         error ')'                   {$$ = AslDoError(); yyclearin;}
   1439     ;
   1440 
   1441 SizeOfTerm
   1442     : PARSEOP_SIZEOF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIZEOF);}
   1443         SuperName
   1444         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1445     | PARSEOP_SIZEOF '('
   1446         error ')'                   {$$ = AslDoError(); yyclearin;}
   1447     ;
   1448 
   1449 StoreTerm
   1450     : PARSEOP_STORE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STORE);}
   1451         TermArg
   1452         ',' SuperName
   1453         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
   1454     | PARSEOP_STORE '('
   1455         error ')'                   {$$ = AslDoError(); yyclearin;}
   1456     ;
   1457 
   1458 SubtractTerm
   1459     : PARSEOP_SUBTRACT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
   1460         TermArg
   1461         TermArgItem
   1462         Target
   1463         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1464     | PARSEOP_SUBTRACT '('
   1465         error ')'                   {$$ = AslDoError(); yyclearin;}
   1466     ;
   1467 
   1468 TimerTerm
   1469     : PARSEOP_TIMER '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TIMER);}
   1470         ')'                         {$$ = TrLinkChildren ($<n>3,0);}
   1471     | PARSEOP_TIMER                 {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_TIMER),0);}
   1472     | PARSEOP_TIMER '('
   1473         error ')'                   {$$ = AslDoError(); yyclearin;}
   1474     ;
   1475 
   1476 ToBCDTerm
   1477     : PARSEOP_TOBCD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOBCD);}
   1478         TermArg
   1479         Target
   1480         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1481     | PARSEOP_TOBCD '('
   1482         error ')'                   {$$ = AslDoError(); yyclearin;}
   1483     ;
   1484 
   1485 ToBufferTerm
   1486     : PARSEOP_TOBUFFER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOBUFFER);}
   1487         TermArg
   1488         Target
   1489         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1490     | PARSEOP_TOBUFFER '('
   1491         error ')'                   {$$ = AslDoError(); yyclearin;}
   1492     ;
   1493 
   1494 ToDecimalStringTerm
   1495     : PARSEOP_TODECIMALSTRING '('   {$<n>$ = TrCreateLeafNode (PARSEOP_TODECIMALSTRING);}
   1496         TermArg
   1497         Target
   1498         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1499     | PARSEOP_TODECIMALSTRING '('
   1500         error ')'                   {$$ = AslDoError(); yyclearin;}
   1501     ;
   1502 
   1503 ToHexStringTerm
   1504     : PARSEOP_TOHEXSTRING '('       {$<n>$ = TrCreateLeafNode (PARSEOP_TOHEXSTRING);}
   1505         TermArg
   1506         Target
   1507         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1508     | PARSEOP_TOHEXSTRING '('
   1509         error ')'                   {$$ = AslDoError(); yyclearin;}
   1510     ;
   1511 
   1512 ToIntegerTerm
   1513     : PARSEOP_TOINTEGER '('         {$<n>$ = TrCreateLeafNode (PARSEOP_TOINTEGER);}
   1514         TermArg
   1515         Target
   1516         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1517     | PARSEOP_TOINTEGER '('
   1518         error ')'                   {$$ = AslDoError(); yyclearin;}
   1519     ;
   1520 
   1521 PldKeyword
   1522     : PARSEOP_PLD_REVISION          {$$ = TrCreateLeafNode (PARSEOP_PLD_REVISION);}
   1523     | PARSEOP_PLD_IGNORECOLOR       {$$ = TrCreateLeafNode (PARSEOP_PLD_IGNORECOLOR);}
   1524     | PARSEOP_PLD_RED               {$$ = TrCreateLeafNode (PARSEOP_PLD_RED);}
   1525     | PARSEOP_PLD_GREEN             {$$ = TrCreateLeafNode (PARSEOP_PLD_GREEN);}
   1526     | PARSEOP_PLD_BLUE              {$$ = TrCreateLeafNode (PARSEOP_PLD_BLUE);}
   1527     | PARSEOP_PLD_WIDTH             {$$ = TrCreateLeafNode (PARSEOP_PLD_WIDTH);}
   1528     | PARSEOP_PLD_HEIGHT            {$$ = TrCreateLeafNode (PARSEOP_PLD_HEIGHT);}
   1529     | PARSEOP_PLD_USERVISIBLE       {$$ = TrCreateLeafNode (PARSEOP_PLD_USERVISIBLE);}
   1530     | PARSEOP_PLD_DOCK              {$$ = TrCreateLeafNode (PARSEOP_PLD_DOCK);}
   1531     | PARSEOP_PLD_LID               {$$ = TrCreateLeafNode (PARSEOP_PLD_LID);}
   1532     | PARSEOP_PLD_PANEL             {$$ = TrCreateLeafNode (PARSEOP_PLD_PANEL);}
   1533     | PARSEOP_PLD_VERTICALPOSITION  {$$ = TrCreateLeafNode (PARSEOP_PLD_VERTICALPOSITION);}
   1534     | PARSEOP_PLD_HORIZONTALPOSITION {$$ = TrCreateLeafNode (PARSEOP_PLD_HORIZONTALPOSITION);}
   1535     | PARSEOP_PLD_SHAPE             {$$ = TrCreateLeafNode (PARSEOP_PLD_SHAPE);}
   1536     | PARSEOP_PLD_GROUPORIENTATION  {$$ = TrCreateLeafNode (PARSEOP_PLD_GROUPORIENTATION);}
   1537     | PARSEOP_PLD_GROUPTOKEN        {$$ = TrCreateLeafNode (PARSEOP_PLD_GROUPTOKEN);}
   1538     | PARSEOP_PLD_GROUPPOSITION     {$$ = TrCreateLeafNode (PARSEOP_PLD_GROUPPOSITION);}
   1539     | PARSEOP_PLD_BAY               {$$ = TrCreateLeafNode (PARSEOP_PLD_BAY);}
   1540     | PARSEOP_PLD_EJECTABLE         {$$ = TrCreateLeafNode (PARSEOP_PLD_EJECTABLE);}
   1541     | PARSEOP_PLD_EJECTREQUIRED     {$$ = TrCreateLeafNode (PARSEOP_PLD_EJECTREQUIRED);}
   1542     | PARSEOP_PLD_CABINETNUMBER     {$$ = TrCreateLeafNode (PARSEOP_PLD_CABINETNUMBER);}
   1543     | PARSEOP_PLD_CARDCAGENUMBER    {$$ = TrCreateLeafNode (PARSEOP_PLD_CARDCAGENUMBER);}
   1544     | PARSEOP_PLD_REFERENCE         {$$ = TrCreateLeafNode (PARSEOP_PLD_REFERENCE);}
   1545     | PARSEOP_PLD_ROTATION          {$$ = TrCreateLeafNode (PARSEOP_PLD_ROTATION);}
   1546     | PARSEOP_PLD_ORDER             {$$ = TrCreateLeafNode (PARSEOP_PLD_ORDER);}
   1547     | PARSEOP_PLD_RESERVED          {$$ = TrCreateLeafNode (PARSEOP_PLD_RESERVED);}
   1548     | PARSEOP_PLD_VERTICALOFFSET    {$$ = TrCreateLeafNode (PARSEOP_PLD_VERTICALOFFSET);}
   1549     | PARSEOP_PLD_HORIZONTALOFFSET  {$$ = TrCreateLeafNode (PARSEOP_PLD_HORIZONTALOFFSET);}
   1550     ;
   1551 
   1552 PldKeywordList
   1553     :                               {$$ = NULL;}
   1554     | PldKeyword
   1555         PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkChildren ($1,1,$3);}
   1556     | PldKeyword
   1557         PARSEOP_EXP_EQUALS String   {$$ = TrLinkChildren ($1,1,$3);}
   1558     | PldKeywordList ','            /* Allows a trailing comma at list end */
   1559     | PldKeywordList ','
   1560         PldKeyword
   1561         PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
   1562     | PldKeywordList ','
   1563         PldKeyword
   1564         PARSEOP_EXP_EQUALS String   {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
   1565     ;
   1566 
   1567 ToPLDTerm
   1568     : PARSEOP_TOPLD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOPLD);}
   1569         PldKeywordList
   1570         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1571     | PARSEOP_TOPLD '('
   1572         error ')'                   {$$ = AslDoError(); yyclearin;}
   1573     ;
   1574 
   1575 PrintfArgList
   1576     :                               {$$ = NULL;}
   1577     | TermArg                       {$$ = $1;}
   1578     | PrintfArgList ','
   1579        TermArg                      {$$ = TrLinkPeerNode ($1, $3);}
   1580     ;
   1581 
   1582 PrintfTerm
   1583     : PARSEOP_PRINTF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_PRINTF);}
   1584         StringData
   1585         PrintfArgList
   1586         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1587     | PARSEOP_PRINTF '('
   1588         error ')'                   {$$ = AslDoError(); yyclearin;}
   1589     ;
   1590 
   1591 FprintfTerm
   1592     : PARSEOP_FPRINTF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_FPRINTF);}
   1593         TermArg ','
   1594         StringData
   1595         PrintfArgList
   1596         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
   1597     | PARSEOP_FPRINTF '('
   1598         error ')'                   {$$ = AslDoError(); yyclearin;}
   1599     ;
   1600 
   1601 ToStringTerm
   1602     : PARSEOP_TOSTRING '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOSTRING);}
   1603         TermArg
   1604         OptionalCount
   1605         Target
   1606         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1607     | PARSEOP_TOSTRING '('
   1608         error ')'                   {$$ = AslDoError(); yyclearin;}
   1609     ;
   1610 
   1611 ToUUIDTerm
   1612     : PARSEOP_TOUUID '('
   1613         StringData ')'              {$$ = TrUpdateNode (PARSEOP_TOUUID, $3);}
   1614     | PARSEOP_TOUUID '('
   1615         error ')'                   {$$ = AslDoError(); yyclearin;}
   1616     ;
   1617 
   1618 WaitTerm
   1619     : PARSEOP_WAIT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_WAIT);}
   1620         SuperName
   1621         TermArgItem
   1622         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1623     | PARSEOP_WAIT '('
   1624         error ')'                   {$$ = AslDoError(); yyclearin;}
   1625     ;
   1626 
   1627 XOrTerm
   1628     : PARSEOP_XOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
   1629         TermArg
   1630         TermArgItem
   1631         Target
   1632         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1633     | PARSEOP_XOR '('
   1634         error ')'                   {$$ = AslDoError(); yyclearin;}
   1635     ;
   1636 
   1637 
   1638 /******* Keywords *************************************************************/
   1639 
   1640 
   1641 AccessAttribKeyword
   1642     : PARSEOP_ACCESSATTRIB_BLOCK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK);}
   1643     | PARSEOP_ACCESSATTRIB_BLOCK_CALL       {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK_CALL);}
   1644     | PARSEOP_ACCESSATTRIB_BYTE             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BYTE);}
   1645     | PARSEOP_ACCESSATTRIB_QUICK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_QUICK );}
   1646     | PARSEOP_ACCESSATTRIB_SND_RCV          {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_SND_RCV);}
   1647     | PARSEOP_ACCESSATTRIB_WORD             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD);}
   1648     | PARSEOP_ACCESSATTRIB_WORD_CALL        {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD_CALL);}
   1649     | PARSEOP_ACCESSATTRIB_MULTIBYTE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_MULTIBYTE);}
   1650         ByteConst
   1651         ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
   1652     | PARSEOP_ACCESSATTRIB_RAW_BYTES '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_BYTES);}
   1653         ByteConst
   1654         ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
   1655     | PARSEOP_ACCESSATTRIB_RAW_PROCESS '('  {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_PROCESS);}
   1656         ByteConst
   1657         ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
   1658     ;
   1659 
   1660 AccessTypeKeyword
   1661     : PARSEOP_ACCESSTYPE_ANY                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_ANY);}
   1662     | PARSEOP_ACCESSTYPE_BYTE               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BYTE);}
   1663     | PARSEOP_ACCESSTYPE_WORD               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_WORD);}
   1664     | PARSEOP_ACCESSTYPE_DWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_DWORD);}
   1665     | PARSEOP_ACCESSTYPE_QWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_QWORD);}
   1666     | PARSEOP_ACCESSTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BUF);}
   1667     ;
   1668 
   1669 AddressingModeKeyword
   1670     : PARSEOP_ADDRESSINGMODE_7BIT           {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_7BIT);}
   1671     | PARSEOP_ADDRESSINGMODE_10BIT          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_10BIT);}
   1672     ;
   1673 
   1674 AddressKeyword
   1675     : PARSEOP_ADDRESSTYPE_MEMORY            {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_MEMORY);}
   1676     | PARSEOP_ADDRESSTYPE_RESERVED          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_RESERVED);}
   1677     | PARSEOP_ADDRESSTYPE_NVS               {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_NVS);}
   1678     | PARSEOP_ADDRESSTYPE_ACPI              {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_ACPI);}
   1679     ;
   1680 
   1681 AddressSpaceKeyword
   1682     : ByteConst                             {$$ = UtCheckIntegerRange ($1, 0x0A, 0xFF);}
   1683     | RegionSpaceKeyword                    {}
   1684     ;
   1685 
   1686 BitsPerByteKeyword
   1687     : PARSEOP_BITSPERBYTE_FIVE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_FIVE);}
   1688     | PARSEOP_BITSPERBYTE_SIX               {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SIX);}
   1689     | PARSEOP_BITSPERBYTE_SEVEN             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SEVEN);}
   1690     | PARSEOP_BITSPERBYTE_EIGHT             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_EIGHT);}
   1691     | PARSEOP_BITSPERBYTE_NINE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_NINE);}
   1692     ;
   1693 
   1694 ClockPhaseKeyword
   1695     : PARSEOP_CLOCKPHASE_FIRST              {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_FIRST);}
   1696     | PARSEOP_CLOCKPHASE_SECOND             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_SECOND);}
   1697     ;
   1698 
   1699 ClockPolarityKeyword
   1700     : PARSEOP_CLOCKPOLARITY_LOW             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_LOW);}
   1701     | PARSEOP_CLOCKPOLARITY_HIGH            {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_HIGH);}
   1702     ;
   1703 
   1704 DecodeKeyword
   1705     : PARSEOP_DECODETYPE_POS                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_POS);}
   1706     | PARSEOP_DECODETYPE_SUB                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_SUB);}
   1707     ;
   1708 
   1709 DevicePolarityKeyword
   1710     : PARSEOP_DEVICEPOLARITY_LOW            {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_LOW);}
   1711     | PARSEOP_DEVICEPOLARITY_HIGH           {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_HIGH);}
   1712     ;
   1713 
   1714 DMATypeKeyword
   1715     : PARSEOP_DMATYPE_A                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_A);}
   1716     | PARSEOP_DMATYPE_COMPATIBILITY         {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_COMPATIBILITY);}
   1717     | PARSEOP_DMATYPE_B                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_B);}
   1718     | PARSEOP_DMATYPE_F                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_F);}
   1719     ;
   1720 
   1721 EndianKeyword
   1722     : PARSEOP_ENDIAN_LITTLE                 {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_LITTLE);}
   1723     | PARSEOP_ENDIAN_BIG                    {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_BIG);}
   1724     ;
   1725 
   1726 FlowControlKeyword
   1727     : PARSEOP_FLOWCONTROL_HW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_HW);}
   1728     | PARSEOP_FLOWCONTROL_NONE              {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_NONE);}
   1729     | PARSEOP_FLOWCONTROL_SW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_SW);}
   1730     ;
   1731 
   1732 InterruptLevel
   1733     : PARSEOP_INTLEVEL_ACTIVEBOTH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEBOTH);}
   1734     | PARSEOP_INTLEVEL_ACTIVEHIGH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEHIGH);}
   1735     | PARSEOP_INTLEVEL_ACTIVELOW            {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVELOW);}
   1736     ;
   1737 
   1738 InterruptTypeKeyword
   1739     : PARSEOP_INTTYPE_EDGE                  {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_EDGE);}
   1740     | PARSEOP_INTTYPE_LEVEL                 {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_LEVEL);}
   1741     ;
   1742 
   1743 IODecodeKeyword
   1744     : PARSEOP_IODECODETYPE_16               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_16);}
   1745     | PARSEOP_IODECODETYPE_10               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_10);}
   1746     ;
   1747 
   1748 IoRestrictionKeyword
   1749     : PARSEOP_IORESTRICT_IN                 {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_IN);}
   1750     | PARSEOP_IORESTRICT_OUT                {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_OUT);}
   1751     | PARSEOP_IORESTRICT_NONE               {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_NONE);}
   1752     | PARSEOP_IORESTRICT_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_PRESERVE);}
   1753     ;
   1754 
   1755 LockRuleKeyword
   1756     : PARSEOP_LOCKRULE_LOCK                 {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_LOCK);}
   1757     | PARSEOP_LOCKRULE_NOLOCK               {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_NOLOCK);}
   1758     ;
   1759 
   1760 MatchOpKeyword
   1761     : PARSEOP_MATCHTYPE_MTR                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MTR);}
   1762     | PARSEOP_MATCHTYPE_MEQ                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MEQ);}
   1763     | PARSEOP_MATCHTYPE_MLE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLE);}
   1764     | PARSEOP_MATCHTYPE_MLT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLT);}
   1765     | PARSEOP_MATCHTYPE_MGE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGE);}
   1766     | PARSEOP_MATCHTYPE_MGT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGT);}
   1767     ;
   1768 
   1769 MaxKeyword
   1770     : PARSEOP_MAXTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_FIXED);}
   1771     | PARSEOP_MAXTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_NOTFIXED);}
   1772     ;
   1773 
   1774 MemTypeKeyword
   1775     : PARSEOP_MEMTYPE_CACHEABLE             {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_CACHEABLE);}
   1776     | PARSEOP_MEMTYPE_WRITECOMBINING        {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_WRITECOMBINING);}
   1777     | PARSEOP_MEMTYPE_PREFETCHABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_PREFETCHABLE);}
   1778     | PARSEOP_MEMTYPE_NONCACHEABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_NONCACHEABLE);}
   1779     ;
   1780 
   1781 MinKeyword
   1782     : PARSEOP_MINTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_FIXED);}
   1783     | PARSEOP_MINTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_NOTFIXED);}
   1784     ;
   1785 
   1786 ObjectTypeKeyword
   1787     : PARSEOP_OBJECTTYPE_UNK                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
   1788     | PARSEOP_OBJECTTYPE_INT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_INT);}
   1789     | PARSEOP_OBJECTTYPE_STR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_STR);}
   1790     | PARSEOP_OBJECTTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BUF);}
   1791     | PARSEOP_OBJECTTYPE_PKG                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PKG);}
   1792     | PARSEOP_OBJECTTYPE_FLD                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_FLD);}
   1793     | PARSEOP_OBJECTTYPE_DEV                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DEV);}
   1794     | PARSEOP_OBJECTTYPE_EVT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_EVT);}
   1795     | PARSEOP_OBJECTTYPE_MTH                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTH);}
   1796     | PARSEOP_OBJECTTYPE_MTX                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTX);}
   1797     | PARSEOP_OBJECTTYPE_OPR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_OPR);}
   1798     | PARSEOP_OBJECTTYPE_POW                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_POW);}
   1799     | PARSEOP_OBJECTTYPE_PRO                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PRO);}
   1800     | PARSEOP_OBJECTTYPE_THZ                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_THZ);}
   1801     | PARSEOP_OBJECTTYPE_BFF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BFF);}
   1802     | PARSEOP_OBJECTTYPE_DDB                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DDB);}
   1803     ;
   1804 
   1805 ParityTypeKeyword
   1806     : PARSEOP_PARITYTYPE_SPACE              {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_SPACE);}
   1807     | PARSEOP_PARITYTYPE_MARK               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_MARK);}
   1808     | PARSEOP_PARITYTYPE_ODD                {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_ODD);}
   1809     | PARSEOP_PARITYTYPE_EVEN               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_EVEN);}
   1810     | PARSEOP_PARITYTYPE_NONE               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_NONE);}
   1811     ;
   1812 
   1813 PinConfigByte
   1814     : PinConfigKeyword                      {$$ = $1;}
   1815     | ByteConstExpr                         {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
   1816     ;
   1817 
   1818 PinConfigKeyword
   1819     : PARSEOP_PIN_NOPULL                    {$$ = TrCreateLeafNode (PARSEOP_PIN_NOPULL);}
   1820     | PARSEOP_PIN_PULLDOWN                  {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDOWN);}
   1821     | PARSEOP_PIN_PULLUP                    {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLUP);}
   1822     | PARSEOP_PIN_PULLDEFAULT               {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDEFAULT);}
   1823     ;
   1824 
   1825 RangeTypeKeyword
   1826     : PARSEOP_RANGETYPE_ISAONLY             {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ISAONLY);}
   1827     | PARSEOP_RANGETYPE_NONISAONLY          {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_NONISAONLY);}
   1828     | PARSEOP_RANGETYPE_ENTIRE              {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ENTIRE);}
   1829     ;
   1830 
   1831 RegionSpaceKeyword
   1832     : PARSEOP_REGIONSPACE_IO                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IO);}
   1833     | PARSEOP_REGIONSPACE_MEM               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_MEM);}
   1834     | PARSEOP_REGIONSPACE_PCI               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCI);}
   1835     | PARSEOP_REGIONSPACE_EC                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_EC);}
   1836     | PARSEOP_REGIONSPACE_SMBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_SMBUS);}
   1837     | PARSEOP_REGIONSPACE_CMOS              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_CMOS);}
   1838     | PARSEOP_REGIONSPACE_PCIBAR            {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCIBAR);}
   1839     | PARSEOP_REGIONSPACE_IPMI              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IPMI);}
   1840     | PARSEOP_REGIONSPACE_GPIO              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GPIO);}
   1841     | PARSEOP_REGIONSPACE_GSBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GSBUS);}
   1842     | PARSEOP_REGIONSPACE_PCC               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCC);}
   1843     | PARSEOP_REGIONSPACE_FFIXEDHW          {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_FFIXEDHW);}
   1844     ;
   1845 
   1846 ResourceTypeKeyword
   1847     : PARSEOP_RESOURCETYPE_CONSUMER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
   1848     | PARSEOP_RESOURCETYPE_PRODUCER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_PRODUCER);}
   1849     ;
   1850 
   1851 SerializeRuleKeyword
   1852     : PARSEOP_SERIALIZERULE_SERIAL          {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_SERIAL);}
   1853     | PARSEOP_SERIALIZERULE_NOTSERIAL       {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL);}
   1854     ;
   1855 
   1856 ShareTypeKeyword
   1857     : PARSEOP_SHARETYPE_SHARED              {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHARED);}
   1858     | PARSEOP_SHARETYPE_EXCLUSIVE           {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVE);}
   1859     | PARSEOP_SHARETYPE_SHAREDWAKE          {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHAREDWAKE);}
   1860     | PARSEOP_SHARETYPE_EXCLUSIVEWAKE       {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVEWAKE);}
   1861    ;
   1862 
   1863 SlaveModeKeyword
   1864     : PARSEOP_SLAVEMODE_CONTROLLERINIT      {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_CONTROLLERINIT);}
   1865     | PARSEOP_SLAVEMODE_DEVICEINIT          {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_DEVICEINIT);}
   1866     ;
   1867 
   1868 StopBitsKeyword
   1869     : PARSEOP_STOPBITS_TWO                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_TWO);}
   1870     | PARSEOP_STOPBITS_ONEPLUSHALF          {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONEPLUSHALF);}
   1871     | PARSEOP_STOPBITS_ONE                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONE);}
   1872     | PARSEOP_STOPBITS_ZERO                 {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ZERO);}
   1873     ;
   1874 
   1875 TranslationKeyword
   1876     : PARSEOP_TRANSLATIONTYPE_SPARSE        {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_SPARSE);}
   1877     | PARSEOP_TRANSLATIONTYPE_DENSE         {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_DENSE);}
   1878     ;
   1879 
   1880 TypeKeyword
   1881     : PARSEOP_TYPE_TRANSLATION              {$$ = TrCreateLeafNode (PARSEOP_TYPE_TRANSLATION);}
   1882     | PARSEOP_TYPE_STATIC                   {$$ = TrCreateLeafNode (PARSEOP_TYPE_STATIC);}
   1883     ;
   1884 
   1885 UpdateRuleKeyword
   1886     : PARSEOP_UPDATERULE_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_PRESERVE);}
   1887     | PARSEOP_UPDATERULE_ONES               {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ONES);}
   1888     | PARSEOP_UPDATERULE_ZEROS              {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ZEROS);}
   1889     ;
   1890 
   1891 WireModeKeyword
   1892     : PARSEOP_WIREMODE_FOUR                 {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_FOUR);}
   1893     | PARSEOP_WIREMODE_THREE                {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_THREE);}
   1894     ;
   1895 
   1896 XferSizeKeyword
   1897     : PARSEOP_XFERSIZE_8                    {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_8,   0);}
   1898     | PARSEOP_XFERSIZE_16                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_16,  1);}
   1899     | PARSEOP_XFERSIZE_32                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32,  2);}
   1900     | PARSEOP_XFERSIZE_64                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_64,  3);}
   1901     | PARSEOP_XFERSIZE_128                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_128, 4);}
   1902     | PARSEOP_XFERSIZE_256                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_256, 5);}
   1903     ;
   1904 
   1905 XferTypeKeyword
   1906     : PARSEOP_XFERTYPE_8                    {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8);}
   1907     | PARSEOP_XFERTYPE_8_16                 {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8_16);}
   1908     | PARSEOP_XFERTYPE_16                   {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_16);}
   1909     ;
   1910 
   1911 
   1912 /******* Miscellaneous Types **************************************************/
   1913 
   1914 
   1915 SuperName
   1916     : NameString                    {}
   1917     | ArgTerm                       {}
   1918     | LocalTerm                     {}
   1919     | DebugTerm                     {}
   1920     | Type6Opcode                   {}
   1921 
   1922 /* For ObjectType: SuperName except for MethodInvocationTerm */
   1923 
   1924 ObjectTypeName
   1925     : NameString                    {}
   1926     | ArgTerm                       {}
   1927     | LocalTerm                     {}
   1928     | DebugTerm                     {}
   1929     | RefOfTerm                     {}
   1930     | DerefOfTerm                   {}
   1931     | IndexTerm                     {}
   1932 
   1933 /*    | MethodInvocationTerm          {} */  /* Caused reduce/reduce with Type6Opcode->MethodInvocationTerm */
   1934     ;
   1935 
   1936 ArgTerm
   1937     : PARSEOP_ARG0                  {$$ = TrCreateLeafNode (PARSEOP_ARG0);}
   1938     | PARSEOP_ARG1                  {$$ = TrCreateLeafNode (PARSEOP_ARG1);}
   1939     | PARSEOP_ARG2                  {$$ = TrCreateLeafNode (PARSEOP_ARG2);}
   1940     | PARSEOP_ARG3                  {$$ = TrCreateLeafNode (PARSEOP_ARG3);}
   1941     | PARSEOP_ARG4                  {$$ = TrCreateLeafNode (PARSEOP_ARG4);}
   1942     | PARSEOP_ARG5                  {$$ = TrCreateLeafNode (PARSEOP_ARG5);}
   1943     | PARSEOP_ARG6                  {$$ = TrCreateLeafNode (PARSEOP_ARG6);}
   1944     ;
   1945 
   1946 LocalTerm
   1947     : PARSEOP_LOCAL0                {$$ = TrCreateLeafNode (PARSEOP_LOCAL0);}
   1948     | PARSEOP_LOCAL1                {$$ = TrCreateLeafNode (PARSEOP_LOCAL1);}
   1949     | PARSEOP_LOCAL2                {$$ = TrCreateLeafNode (PARSEOP_LOCAL2);}
   1950     | PARSEOP_LOCAL3                {$$ = TrCreateLeafNode (PARSEOP_LOCAL3);}
   1951     | PARSEOP_LOCAL4                {$$ = TrCreateLeafNode (PARSEOP_LOCAL4);}
   1952     | PARSEOP_LOCAL5                {$$ = TrCreateLeafNode (PARSEOP_LOCAL5);}
   1953     | PARSEOP_LOCAL6                {$$ = TrCreateLeafNode (PARSEOP_LOCAL6);}
   1954     | PARSEOP_LOCAL7                {$$ = TrCreateLeafNode (PARSEOP_LOCAL7);}
   1955     ;
   1956 
   1957 DebugTerm
   1958     : PARSEOP_DEBUG                 {$$ = TrCreateLeafNode (PARSEOP_DEBUG);}
   1959     ;
   1960 
   1961 
   1962 ByteConst
   1963     : Integer                       {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
   1964     ;
   1965 
   1966 WordConst
   1967     : Integer                       {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
   1968     ;
   1969 
   1970 DWordConst
   1971     : Integer                       {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
   1972     ;
   1973 
   1974 QWordConst
   1975     : Integer                       {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
   1976     ;
   1977 
   1978 Integer
   1979     : PARSEOP_INTEGER               {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, AslCompilerlval.i);}
   1980     ;
   1981 
   1982 String
   1983     : PARSEOP_STRING_LITERAL        {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, (ACPI_NATIVE_INT) AslCompilerlval.s);}
   1984     ;
   1985 
   1986 ConstTerm
   1987     : ConstExprTerm                 {}
   1988     | PARSEOP_REVISION              {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
   1989     ;
   1990 
   1991 ConstExprTerm
   1992     : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
   1993     | PARSEOP_ONE                   {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
   1994     | PARSEOP_ONES                  {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
   1995     | PARSEOP___DATE__              {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
   1996     | PARSEOP___FILE__              {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
   1997     | PARSEOP___LINE__              {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
   1998     | PARSEOP___PATH__              {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);}
   1999     ;
   2000 
   2001 /*
   2002  * The NODE_COMPILE_TIME_CONST flag in the following constant expressions
   2003  * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes
   2004  * to simple integers. It is an error if these types of expressions cannot be
   2005  * reduced, since the AML grammar for ****ConstExpr requires a simple constant.
   2006  * Note: The required byte length of the constant is passed through to the
   2007  * constant folding code in the node AmlLength field.
   2008  */
   2009 ByteConstExpr
   2010     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
   2011     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
   2012     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
   2013     | ByteConst                     {}
   2014     ;
   2015 
   2016 WordConstExpr
   2017     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
   2018     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
   2019     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
   2020     | WordConst                     {}
   2021     ;
   2022 
   2023 DWordConstExpr
   2024     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
   2025     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
   2026     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
   2027     | DWordConst                    {}
   2028     ;
   2029 
   2030 QWordConstExpr
   2031     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
   2032     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
   2033     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
   2034     | QWordConst                    {}
   2035     ;
   2036 
   2037 /* OptionalCount must appear before ByteList or an incorrect reduction will result */
   2038 
   2039 OptionalCount
   2040     :                               {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
   2041     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
   2042     | ',' TermArg                   {$$ = $2;}
   2043     ;
   2044 
   2045 BufferTerm
   2046     : PARSEOP_BUFFER '('            {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
   2047         OptionalTermArg
   2048         ')' '{'
   2049             BufferTermData '}'      {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   2050     | PARSEOP_BUFFER '('
   2051         error ')'                   {$$ = AslDoError(); yyclearin;}
   2052     ;
   2053 
   2054 BufferTermData
   2055     : ByteList                      {}
   2056     | StringData                    {}
   2057     ;
   2058 
   2059 ByteList
   2060     :                               {$$ = NULL;}
   2061     | ByteConstExpr
   2062     | ByteList ','                  /* Allows a trailing comma at list end */
   2063     | ByteList ','
   2064         ByteConstExpr               {$$ = TrLinkPeerNode ($1,$3);}
   2065     ;
   2066 
   2067 DataBufferTerm
   2068     : PARSEOP_DATABUFFER  '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DATABUFFER);}
   2069         OptionalWordConst
   2070         ')' '{'
   2071             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   2072     | PARSEOP_DATABUFFER '('
   2073         error ')'                   {$$ = AslDoError(); yyclearin;}
   2074     ;
   2075 
   2076 DWordList
   2077     :                               {$$ = NULL;}
   2078     | DWordConstExpr
   2079     | DWordList ','                 /* Allows a trailing comma at list end */
   2080     | DWordList ','
   2081         DWordConstExpr              {$$ = TrLinkPeerNode ($1,$3);}
   2082     ;
   2083 
   2084 PackageTerm
   2085     : PARSEOP_PACKAGE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_VAR_PACKAGE);}
   2086         VarPackageLengthTerm
   2087         ')' '{'
   2088             PackageList '}'         {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   2089     | PARSEOP_PACKAGE '('
   2090         error ')'                   {$$ = AslDoError(); yyclearin;}
   2091     ;
   2092 
   2093 PackageList
   2094     :                               {$$ = NULL;}
   2095     | PackageElement
   2096     | PackageList ','               /* Allows a trailing comma at list end */
   2097     | PackageList ','
   2098         PackageElement              {$$ = TrLinkPeerNode ($1,$3);}
   2099     ;
   2100 
   2101 PackageElement
   2102     : DataObject                    {}
   2103     | NameString                    {}
   2104     ;
   2105 
   2106 VarPackageLengthTerm
   2107     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
   2108     | TermArg                       {$$ = $1;}
   2109     ;
   2110 
   2111 
   2112 /******* Macros ***********************************************/
   2113 
   2114 
   2115 EISAIDTerm
   2116     : PARSEOP_EISAID '('
   2117         StringData ')'              {$$ = TrUpdateNode (PARSEOP_EISAID, $3);}
   2118     | PARSEOP_EISAID '('
   2119         error ')'                   {$$ = AslDoError(); yyclearin;}
   2120     ;
   2121 
   2122 UnicodeTerm
   2123     : PARSEOP_UNICODE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_UNICODE);}
   2124         StringData
   2125         ')'                         {$$ = TrLinkChildren ($<n>3,2,0,$4);}
   2126     | PARSEOP_UNICODE '('
   2127         error ')'                   {$$ = AslDoError(); yyclearin;}
   2128     ;
   2129 
   2130 
   2131 /******* Resources and Memory ***********************************************/
   2132 
   2133 
   2134 /*
   2135  * Note: Create two default nodes to allow conversion to a Buffer AML opcode
   2136  * Also, insert the EndTag at the end of the template.
   2137  */
   2138 ResourceTemplateTerm
   2139     : PARSEOP_RESOURCETEMPLATE '(' ')'
   2140         '{'
   2141         ResourceMacroList '}'       {$$ = TrCreateNode (PARSEOP_RESOURCETEMPLATE,4,
   2142                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
   2143                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
   2144                                           $5,
   2145                                           TrCreateLeafNode (PARSEOP_ENDTAG));}
   2146     ;
   2147 
   2148 ResourceMacroList
   2149     :                               {$$ = NULL;}
   2150     | ResourceMacroList
   2151         ResourceMacroTerm           {$$ = TrLinkPeerNode ($1,$2);}
   2152     ;
   2153 
   2154 ResourceMacroTerm
   2155     : DMATerm                       {}
   2156     | DWordIOTerm                   {}
   2157     | DWordMemoryTerm               {}
   2158     | DWordSpaceTerm                {}
   2159     | EndDependentFnTerm            {}
   2160     | ExtendedIOTerm                {}
   2161     | ExtendedMemoryTerm            {}
   2162     | ExtendedSpaceTerm             {}
   2163     | FixedDmaTerm                  {}
   2164     | FixedIOTerm                   {}
   2165     | GpioIntTerm                   {}
   2166     | GpioIoTerm                    {}
   2167     | I2cSerialBusTerm              {}
   2168     | InterruptTerm                 {}
   2169     | IOTerm                        {}
   2170     | IRQNoFlagsTerm                {}
   2171     | IRQTerm                       {}
   2172     | Memory24Term                  {}
   2173     | Memory32FixedTerm             {}
   2174     | Memory32Term                  {}
   2175     | QWordIOTerm                   {}
   2176     | QWordMemoryTerm               {}
   2177     | QWordSpaceTerm                {}
   2178     | RegisterTerm                  {}
   2179     | SpiSerialBusTerm              {}
   2180     | StartDependentFnNoPriTerm     {}
   2181     | StartDependentFnTerm          {}
   2182     | UartSerialBusTerm             {}
   2183     | VendorLongTerm                {}
   2184     | VendorShortTerm               {}
   2185     | WordBusNumberTerm             {}
   2186     | WordIOTerm                    {}
   2187     | WordSpaceTerm                 {}
   2188     ;
   2189 
   2190 DMATerm
   2191     : PARSEOP_DMA '('               {$<n>$ = TrCreateLeafNode (PARSEOP_DMA);}
   2192         DMATypeKeyword
   2193         OptionalBusMasterKeyword
   2194         ',' XferTypeKeyword
   2195         OptionalNameString_Last
   2196         ')' '{'
   2197             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$5,$7,$8,$11);}
   2198     | PARSEOP_DMA '('
   2199         error ')'                   {$$ = AslDoError(); yyclearin;}
   2200     ;
   2201 
   2202 DWordIOTerm
   2203     : PARSEOP_DWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDIO);}
   2204         OptionalResourceType_First
   2205         OptionalMinType
   2206         OptionalMaxType
   2207         OptionalDecodeType
   2208         OptionalRangeType
   2209         ',' DWordConstExpr
   2210         ',' DWordConstExpr
   2211         ',' DWordConstExpr
   2212         ',' DWordConstExpr
   2213         ',' DWordConstExpr
   2214         OptionalByteConstExpr
   2215         OptionalStringData
   2216         OptionalNameString
   2217         OptionalType
   2218         OptionalTranslationType_Last
   2219         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
   2220     | PARSEOP_DWORDIO '('
   2221         error ')'                   {$$ = AslDoError(); yyclearin;}
   2222     ;
   2223 
   2224 DWordMemoryTerm
   2225     : PARSEOP_DWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDMEMORY);}
   2226         OptionalResourceType_First
   2227         OptionalDecodeType
   2228         OptionalMinType
   2229         OptionalMaxType
   2230         OptionalMemType
   2231         ',' OptionalReadWriteKeyword
   2232         ',' DWordConstExpr
   2233         ',' DWordConstExpr
   2234         ',' DWordConstExpr
   2235         ',' DWordConstExpr
   2236         ',' DWordConstExpr
   2237         OptionalByteConstExpr
   2238         OptionalStringData
   2239         OptionalNameString
   2240         OptionalAddressRange
   2241         OptionalType_Last
   2242         ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
   2243     | PARSEOP_DWORDMEMORY '('
   2244         error ')'                   {$$ = AslDoError(); yyclearin;}
   2245     ;
   2246 
   2247 DWordSpaceTerm
   2248     : PARSEOP_DWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDSPACE);}
   2249         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
   2250         OptionalResourceType
   2251         OptionalDecodeType
   2252         OptionalMinType
   2253         OptionalMaxType
   2254         ',' ByteConstExpr
   2255         ',' DWordConstExpr
   2256         ',' DWordConstExpr
   2257         ',' DWordConstExpr
   2258         ',' DWordConstExpr
   2259         ',' DWordConstExpr
   2260         OptionalByteConstExpr
   2261         OptionalStringData
   2262         OptionalNameString_Last
   2263         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
   2264     | PARSEOP_DWORDSPACE '('
   2265         error ')'                   {$$ = AslDoError(); yyclearin;}
   2266     ;
   2267 
   2268 
   2269 EndDependentFnTerm
   2270     : PARSEOP_ENDDEPENDENTFN '('
   2271         ')'                         {$$ = TrCreateLeafNode (PARSEOP_ENDDEPENDENTFN);}
   2272     | PARSEOP_ENDDEPENDENTFN '('
   2273         error ')'                   {$$ = AslDoError(); yyclearin;}
   2274     ;
   2275 
   2276 ExtendedIOTerm
   2277     : PARSEOP_EXTENDEDIO '('        {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDIO);}
   2278         OptionalResourceType_First
   2279         OptionalMinType
   2280         OptionalMaxType
   2281         OptionalDecodeType
   2282         OptionalRangeType
   2283         ',' QWordConstExpr
   2284         ',' QWordConstExpr
   2285         ',' QWordConstExpr
   2286         ',' QWordConstExpr
   2287         ',' QWordConstExpr
   2288         OptionalQWordConstExpr
   2289         OptionalNameString
   2290         OptionalType
   2291         OptionalTranslationType_Last
   2292         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22);}
   2293     | PARSEOP_EXTENDEDIO '('
   2294         error ')'                   {$$ = AslDoError(); yyclearin;}
   2295     ;
   2296 
   2297 ExtendedMemoryTerm
   2298     : PARSEOP_EXTENDEDMEMORY '('    {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDMEMORY);}
   2299         OptionalResourceType_First
   2300         OptionalDecodeType
   2301         OptionalMinType
   2302         OptionalMaxType
   2303         OptionalMemType
   2304         ',' OptionalReadWriteKeyword
   2305         ',' QWordConstExpr
   2306         ',' QWordConstExpr
   2307         ',' QWordConstExpr
   2308         ',' QWordConstExpr
   2309         ',' QWordConstExpr
   2310         OptionalQWordConstExpr
   2311         OptionalNameString
   2312         OptionalAddressRange
   2313         OptionalType_Last
   2314         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24);}
   2315     | PARSEOP_EXTENDEDMEMORY '('
   2316         error ')'                   {$$ = AslDoError(); yyclearin;}
   2317     ;
   2318 
   2319 ExtendedSpaceTerm
   2320     : PARSEOP_EXTENDEDSPACE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDSPACE);}
   2321         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
   2322         OptionalResourceType
   2323         OptionalDecodeType
   2324         OptionalMinType
   2325         OptionalMaxType
   2326         ',' ByteConstExpr
   2327         ',' QWordConstExpr
   2328         ',' QWordConstExpr
   2329         ',' QWordConstExpr
   2330         ',' QWordConstExpr
   2331         ',' QWordConstExpr
   2332         OptionalQWordConstExpr
   2333         OptionalNameString_Last
   2334         ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23);}
   2335     | PARSEOP_EXTENDEDSPACE '('
   2336         error ')'                   {$$ = AslDoError(); yyclearin;}
   2337     ;
   2338 
   2339 FixedDmaTerm
   2340     : PARSEOP_FIXEDDMA '('          {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDDMA);}
   2341         WordConstExpr               /* 04: DMA RequestLines */
   2342         ',' WordConstExpr           /* 06: DMA Channels */
   2343         OptionalXferSize            /* 07: DMA TransferSize */
   2344         OptionalNameString          /* 08: DescriptorName */
   2345         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$7,$8);}
   2346     | PARSEOP_FIXEDDMA '('
   2347         error ')'                   {$$ = AslDoError(); yyclearin;}
   2348     ;
   2349 
   2350 FixedIOTerm
   2351     : PARSEOP_FIXEDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDIO);}
   2352         WordConstExpr
   2353         ',' ByteConstExpr
   2354         OptionalNameString_Last
   2355         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
   2356     | PARSEOP_FIXEDIO '('
   2357         error ')'                   {$$ = AslDoError(); yyclearin;}
   2358     ;
   2359 
   2360 GpioIntTerm
   2361     : PARSEOP_GPIO_INT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_INT);}
   2362         InterruptTypeKeyword        /* 04: InterruptType */
   2363         ',' InterruptLevel          /* 06: InterruptLevel */
   2364         OptionalShareType           /* 07: SharedType */
   2365         ',' PinConfigByte           /* 09: PinConfig */
   2366         OptionalWordConstExpr       /* 10: DebounceTimeout */
   2367         ',' StringData              /* 12: ResourceSource */
   2368         OptionalByteConstExpr       /* 13: ResourceSourceIndex */
   2369         OptionalResourceType        /* 14: ResourceType */
   2370         OptionalNameString          /* 15: DescriptorName */
   2371         OptionalBuffer_Last         /* 16: VendorData */
   2372         ')' '{'
   2373             DWordConstExpr '}'      {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$9,$10,$12,$13,$14,$15,$16,$19);}
   2374     | PARSEOP_GPIO_INT '('
   2375         error ')'                   {$$ = AslDoError(); yyclearin;}
   2376     ;
   2377 
   2378 GpioIoTerm
   2379     : PARSEOP_GPIO_IO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_IO);}
   2380         OptionalShareType_First     /* 04: SharedType */
   2381         ',' PinConfigByte           /* 06: PinConfig */
   2382         OptionalWordConstExpr       /* 07: DebounceTimeout */
   2383         OptionalWordConstExpr       /* 08: DriveStrength */
   2384         OptionalIoRestriction       /* 09: IoRestriction */
   2385         ',' StringData              /* 11: ResourceSource */
   2386         OptionalByteConstExpr       /* 12: ResourceSourceIndex */
   2387         OptionalResourceType        /* 13: ResourceType */
   2388         OptionalNameString          /* 14: DescriptorName */
   2389         OptionalBuffer_Last         /* 15: VendorData */
   2390         ')' '{'
   2391             DWordList '}'           {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$8,$9,$11,$12,$13,$14,$15,$18);}
   2392     | PARSEOP_GPIO_IO '('
   2393         error ')'                   {$$ = AslDoError(); yyclearin;}
   2394     ;
   2395 
   2396 I2cSerialBusTerm
   2397     : PARSEOP_I2C_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS);}
   2398         WordConstExpr               /* 04: SlaveAddress */
   2399         OptionalSlaveMode           /* 05: SlaveMode */
   2400         ',' DWordConstExpr          /* 07: ConnectionSpeed */
   2401         OptionalAddressingMode      /* 08: AddressingMode */
   2402         ',' StringData              /* 10: ResourceSource */
   2403         OptionalByteConstExpr       /* 11: ResourceSourceIndex */
   2404         OptionalResourceType        /* 12: ResourceType */
   2405         OptionalNameString          /* 13: DescriptorName */
   2406         OptionalBuffer_Last         /* 14: VendorData */
   2407         ')'                         {$$ = TrLinkChildren ($<n>3,9,$4,$5,$7,$8,$10,$11,$12,$13,$14);}
   2408     | PARSEOP_I2C_SERIALBUS '('
   2409         error ')'                   {$$ = AslDoError(); yyclearin;}
   2410     ;
   2411 
   2412 InterruptTerm
   2413     : PARSEOP_INTERRUPT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INTERRUPT);}
   2414         OptionalResourceType_First
   2415         ',' InterruptTypeKeyword
   2416         ',' InterruptLevel
   2417         OptionalShareType
   2418         OptionalByteConstExpr
   2419         OptionalStringData
   2420         OptionalNameString_Last
   2421         ')' '{'
   2422             DWordList '}'           {$$ = TrLinkChildren ($<n>3,8,$4,$6,$8,$9,$10,$11,$12,$15);}
   2423     | PARSEOP_INTERRUPT '('
   2424         error ')'                   {$$ = AslDoError(); yyclearin;}
   2425     ;
   2426 
   2427 IOTerm
   2428     : PARSEOP_IO '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IO);}
   2429         IODecodeKeyword
   2430         ',' WordConstExpr
   2431         ',' WordConstExpr
   2432         ',' ByteConstExpr
   2433         ',' ByteConstExpr
   2434         OptionalNameString_Last
   2435         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
   2436     | PARSEOP_IO '('
   2437         error ')'                   {$$ = AslDoError(); yyclearin;}
   2438     ;
   2439 
   2440 IRQNoFlagsTerm
   2441     : PARSEOP_IRQNOFLAGS '('        {$<n>$ = TrCreateLeafNode (PARSEOP_IRQNOFLAGS);}
   2442         OptionalNameString_First
   2443         ')' '{'
   2444             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   2445     | PARSEOP_IRQNOFLAGS '('
   2446         error ')'                   {$$ = AslDoError(); yyclearin;}
   2447     ;
   2448 
   2449 IRQTerm
   2450     : PARSEOP_IRQ '('               {$<n>$ = TrCreateLeafNode (PARSEOP_IRQ);}
   2451         InterruptTypeKeyword
   2452         ',' InterruptLevel
   2453         OptionalShareType
   2454         OptionalNameString_Last
   2455         ')' '{'
   2456             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$6,$7,$8,$11);}
   2457     | PARSEOP_IRQ '('
   2458         error ')'                   {$$ = AslDoError(); yyclearin;}
   2459     ;
   2460 
   2461 Memory24Term
   2462     : PARSEOP_MEMORY24 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY24);}
   2463         OptionalReadWriteKeyword
   2464         ',' WordConstExpr
   2465         ',' WordConstExpr
   2466         ',' WordConstExpr
   2467         ',' WordConstExpr
   2468         OptionalNameString_Last
   2469         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
   2470     | PARSEOP_MEMORY24 '('
   2471         error ')'                   {$$ = AslDoError(); yyclearin;}
   2472     ;
   2473 
   2474 Memory32FixedTerm
   2475     : PARSEOP_MEMORY32FIXED '('     {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32FIXED);}
   2476         OptionalReadWriteKeyword
   2477         ',' DWordConstExpr
   2478         ',' DWordConstExpr
   2479         OptionalNameString_Last
   2480         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$8,$9);}
   2481     | PARSEOP_MEMORY32FIXED '('
   2482         error ')'                   {$$ = AslDoError(); yyclearin;}
   2483     ;
   2484 
   2485 Memory32Term
   2486     : PARSEOP_MEMORY32 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32);}
   2487         OptionalReadWriteKeyword
   2488         ',' DWordConstExpr
   2489         ',' DWordConstExpr
   2490         ',' DWordConstExpr
   2491         ',' DWordConstExpr
   2492         OptionalNameString_Last
   2493         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
   2494     | PARSEOP_MEMORY32 '('
   2495         error ')'                   {$$ = AslDoError(); yyclearin;}
   2496     ;
   2497 
   2498 QWordIOTerm
   2499     : PARSEOP_QWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDIO);}
   2500         OptionalResourceType_First
   2501         OptionalMinType
   2502         OptionalMaxType
   2503         OptionalDecodeType
   2504         OptionalRangeType
   2505         ',' QWordConstExpr
   2506         ',' QWordConstExpr
   2507         ',' QWordConstExpr
   2508         ',' QWordConstExpr
   2509         ',' QWordConstExpr
   2510         OptionalByteConstExpr
   2511         OptionalStringData
   2512         OptionalNameString
   2513         OptionalType
   2514         OptionalTranslationType_Last
   2515         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
   2516     | PARSEOP_QWORDIO '('
   2517         error ')'                   {$$ = AslDoError(); yyclearin;}
   2518     ;
   2519 
   2520 QWordMemoryTerm
   2521     : PARSEOP_QWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDMEMORY);}
   2522         OptionalResourceType_First
   2523         OptionalDecodeType
   2524         OptionalMinType
   2525         OptionalMaxType
   2526         OptionalMemType
   2527         ',' OptionalReadWriteKeyword
   2528         ',' QWordConstExpr
   2529         ',' QWordConstExpr
   2530         ',' QWordConstExpr
   2531         ',' QWordConstExpr
   2532         ',' QWordConstExpr
   2533         OptionalByteConstExpr
   2534         OptionalStringData
   2535         OptionalNameString
   2536         OptionalAddressRange
   2537         OptionalType_Last
   2538         ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
   2539     | PARSEOP_QWORDMEMORY '('
   2540         error ')'                   {$$ = AslDoError(); yyclearin;}
   2541     ;
   2542 
   2543 QWordSpaceTerm
   2544     : PARSEOP_QWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDSPACE);}
   2545         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
   2546         OptionalResourceType
   2547         OptionalDecodeType
   2548         OptionalMinType
   2549         OptionalMaxType
   2550         ',' ByteConstExpr
   2551         ',' QWordConstExpr
   2552         ',' QWordConstExpr
   2553         ',' QWordConstExpr
   2554         ',' QWordConstExpr
   2555         ',' QWordConstExpr
   2556         OptionalByteConstExpr
   2557         OptionalStringData
   2558         OptionalNameString_Last
   2559         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
   2560     | PARSEOP_QWORDSPACE '('
   2561         error ')'                   {$$ = AslDoError(); yyclearin;}
   2562     ;
   2563 
   2564 RegisterTerm
   2565     : PARSEOP_REGISTER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_REGISTER);}
   2566         AddressSpaceKeyword
   2567         ',' ByteConstExpr
   2568         ',' ByteConstExpr
   2569         ',' QWordConstExpr
   2570         OptionalAccessSize
   2571         OptionalNameString_Last
   2572         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$11,$12);}
   2573     | PARSEOP_REGISTER '('
   2574         error ')'                   {$$ = AslDoError(); yyclearin;}
   2575     ;
   2576 
   2577 SpiSerialBusTerm
   2578     : PARSEOP_SPI_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS);}
   2579         WordConstExpr               /* 04: DeviceSelection */
   2580         OptionalDevicePolarity      /* 05: DevicePolarity */
   2581         OptionalWireMode            /* 06: WireMode */
   2582         ',' ByteConstExpr           /* 08: DataBitLength */
   2583         OptionalSlaveMode           /* 09: SlaveMode */
   2584         ',' DWordConstExpr          /* 11: ConnectionSpeed */
   2585         ',' ClockPolarityKeyword    /* 13: ClockPolarity */
   2586         ',' ClockPhaseKeyword       /* 15: ClockPhase */
   2587         ',' StringData              /* 17: ResourceSource */
   2588         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
   2589         OptionalResourceType        /* 19: ResourceType */
   2590         OptionalNameString          /* 20: DescriptorName */
   2591         OptionalBuffer_Last         /* 21: VendorData */
   2592         ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,$21);}
   2593     | PARSEOP_SPI_SERIALBUS '('
   2594         error ')'                   {$$ = AslDoError(); yyclearin;}
   2595     ;
   2596 
   2597 StartDependentFnNoPriTerm
   2598     : PARSEOP_STARTDEPENDENTFN_NOPRI '('    {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
   2599         ')' '{'
   2600         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,1,$6);}
   2601     | PARSEOP_STARTDEPENDENTFN_NOPRI '('
   2602         error ')'                   {$$ = AslDoError(); yyclearin;}
   2603     ;
   2604 
   2605 StartDependentFnTerm
   2606     : PARSEOP_STARTDEPENDENTFN '('  {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN);}
   2607         ByteConstExpr
   2608         ',' ByteConstExpr
   2609         ')' '{'
   2610         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,3,$4,$6,$9);}
   2611     | PARSEOP_STARTDEPENDENTFN '('
   2612         error ')'                   {$$ = AslDoError(); yyclearin;}
   2613     ;
   2614 
   2615 UartSerialBusTerm
   2616     : PARSEOP_UART_SERIALBUS '('    {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS);}
   2617         DWordConstExpr              /* 04: ConnectionSpeed */
   2618         OptionalBitsPerByte         /* 05: BitsPerByte */
   2619         OptionalStopBits            /* 06: StopBits */
   2620         ',' ByteConstExpr           /* 08: LinesInUse */
   2621         OptionalEndian              /* 09: Endianess */
   2622         OptionalParityType          /* 10: Parity */
   2623         OptionalFlowControl         /* 11: FlowControl */
   2624         ',' WordConstExpr           /* 13: Rx BufferSize */
   2625         ',' WordConstExpr           /* 15: Tx BufferSize */
   2626         ',' StringData              /* 17: ResourceSource */
   2627         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
   2628         OptionalResourceType        /* 19: ResourceType */
   2629         OptionalNameString          /* 20: DescriptorName */
   2630         OptionalBuffer_Last         /* 21: VendorData */
   2631         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,$21);}
   2632     | PARSEOP_UART_SERIALBUS '('
   2633         error ')'                   {$$ = AslDoError(); yyclearin;}
   2634     ;
   2635 
   2636 VendorLongTerm
   2637     : PARSEOP_VENDORLONG '('        {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORLONG);}
   2638         OptionalNameString_First
   2639         ')' '{'
   2640             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   2641     | PARSEOP_VENDORLONG '('
   2642         error ')'                   {$$ = AslDoError(); yyclearin;}
   2643     ;
   2644 
   2645 VendorShortTerm
   2646     : PARSEOP_VENDORSHORT '('       {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORSHORT);}
   2647         OptionalNameString_First
   2648         ')' '{'
   2649             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   2650     | PARSEOP_VENDORSHORT '('
   2651         error ')'                   {$$ = AslDoError(); yyclearin;}
   2652     ;
   2653 
   2654 WordBusNumberTerm
   2655     : PARSEOP_WORDBUSNUMBER '('     {$<n>$ = TrCreateLeafNode (PARSEOP_WORDBUSNUMBER);}
   2656         OptionalResourceType_First
   2657         OptionalMinType
   2658         OptionalMaxType
   2659         OptionalDecodeType
   2660         ',' WordConstExpr
   2661         ',' WordConstExpr
   2662         ',' WordConstExpr
   2663         ',' WordConstExpr
   2664         ',' WordConstExpr
   2665         OptionalByteConstExpr
   2666         OptionalStringData
   2667         OptionalNameString_Last
   2668         ')'                         {$$ = TrLinkChildren ($<n>3,12,$4,$5,$6,$7,$9,$11,$13,$15,$17,$18,$19,$20);}
   2669     | PARSEOP_WORDBUSNUMBER '('
   2670         error ')'                   {$$ = AslDoError(); yyclearin;}
   2671     ;
   2672 
   2673 WordIOTerm
   2674     : PARSEOP_WORDIO '('            {$<n>$ = TrCreateLeafNode (PARSEOP_WORDIO);}
   2675         OptionalResourceType_First
   2676         OptionalMinType
   2677         OptionalMaxType
   2678         OptionalDecodeType
   2679         OptionalRangeType
   2680         ',' WordConstExpr
   2681         ',' WordConstExpr
   2682         ',' WordConstExpr
   2683         ',' WordConstExpr
   2684         ',' WordConstExpr
   2685         OptionalByteConstExpr
   2686         OptionalStringData
   2687         OptionalNameString
   2688         OptionalType
   2689         OptionalTranslationType_Last
   2690         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
   2691     | PARSEOP_WORDIO '('
   2692         error ')'                   {$$ = AslDoError(); yyclearin;}
   2693     ;
   2694 
   2695 WordSpaceTerm
   2696     : PARSEOP_WORDSPACE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_WORDSPACE);}
   2697         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
   2698         OptionalResourceType
   2699         OptionalDecodeType
   2700         OptionalMinType
   2701         OptionalMaxType
   2702         ',' ByteConstExpr
   2703         ',' WordConstExpr
   2704         ',' WordConstExpr
   2705         ',' WordConstExpr
   2706         ',' WordConstExpr
   2707         ',' WordConstExpr
   2708         OptionalByteConstExpr
   2709         OptionalStringData
   2710         OptionalNameString_Last
   2711         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
   2712     | PARSEOP_WORDSPACE '('
   2713         error ')'                   {$$ = AslDoError(); yyclearin;}
   2714     ;
   2715 
   2716 
   2717 /******* Object References ***********************************************/
   2718 
   2719 /* Allow IO, DMA, IRQ Resource macro names to also be used as identifiers */
   2720 
   2721 NameString
   2722     : NameSeg                       {}
   2723     | PARSEOP_NAMESTRING            {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) AslCompilerlval.s);}
   2724     | PARSEOP_IO                    {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
   2725     | PARSEOP_DMA                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
   2726     | PARSEOP_IRQ                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
   2727     ;
   2728 
   2729 NameSeg
   2730     : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT) AslCompilerlval.s);}
   2731     ;
   2732 
   2733 
   2734 /******* Helper rules ****************************************************/
   2735 
   2736 
   2737 AmlPackageLengthTerm
   2738     : Integer                       {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,(ACPI_PARSE_OBJECT *) $1);}
   2739     ;
   2740 
   2741 NameStringItem
   2742     : ',' NameString                {$$ = $2;}
   2743     | ',' error                     {$$ = AslDoError (); yyclearin;}
   2744     ;
   2745 
   2746 TermArgItem
   2747     : ',' TermArg                   {$$ = $2;}
   2748     | ',' error                     {$$ = AslDoError (); yyclearin;}
   2749     ;
   2750 
   2751 OptionalBusMasterKeyword
   2752     : ','                                       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
   2753     | ',' PARSEOP_BUSMASTERTYPE_MASTER          {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
   2754     | ',' PARSEOP_BUSMASTERTYPE_NOTMASTER       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_NOTMASTER);}
   2755     ;
   2756 
   2757 OptionalAccessAttribTerm
   2758     :                               {$$ = NULL;}
   2759     | ','                           {$$ = NULL;}
   2760     | ',' ByteConstExpr             {$$ = $2;}
   2761     | ',' AccessAttribKeyword       {$$ = $2;}
   2762     ;
   2763 
   2764 OptionalAccessSize
   2765     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
   2766     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
   2767     | ',' ByteConstExpr             {$$ = $2;}
   2768     ;
   2769 
   2770 OptionalAddressingMode
   2771     : ','                           {$$ = NULL;}
   2772     | ',' AddressingModeKeyword     {$$ = $2;}
   2773     ;
   2774 
   2775 OptionalAddressRange
   2776     :                               {$$ = NULL;}
   2777     | ','                           {$$ = NULL;}
   2778     | ',' AddressKeyword            {$$ = $2;}
   2779     ;
   2780 
   2781 OptionalBitsPerByte
   2782     : ','                           {$$ = NULL;}
   2783     | ',' BitsPerByteKeyword        {$$ = $2;}
   2784     ;
   2785 
   2786 OptionalBuffer_Last
   2787     :                               {$$ = NULL;}
   2788     | ','                           {$$ = NULL;}
   2789     | ',' DataBufferTerm            {$$ = $2;}
   2790     ;
   2791 
   2792 OptionalByteConstExpr
   2793     :                               {$$ = NULL;}
   2794     | ','                           {$$ = NULL;}
   2795     | ',' ByteConstExpr             {$$ = $2;}
   2796     ;
   2797 
   2798 OptionalDecodeType
   2799     : ','                           {$$ = NULL;}
   2800     | ',' DecodeKeyword             {$$ = $2;}
   2801     ;
   2802 
   2803 OptionalDevicePolarity
   2804     : ','                           {$$ = NULL;}
   2805     | ',' DevicePolarityKeyword     {$$ = $2;}
   2806     ;
   2807 
   2808 OptionalDWordConstExpr
   2809     :                               {$$ = NULL;}
   2810     | ','                           {$$ = NULL;}
   2811     | ',' DWordConstExpr            {$$ = $2;}
   2812     ;
   2813 
   2814 OptionalEndian
   2815     : ','                           {$$ = NULL;}
   2816     | ',' EndianKeyword             {$$ = $2;}
   2817     ;
   2818 
   2819 OptionalFlowControl
   2820     : ','                           {$$ = NULL;}
   2821     | ',' FlowControlKeyword        {$$ = $2;}
   2822     ;
   2823 
   2824 OptionalIoRestriction
   2825     : ','                           {$$ = NULL;}
   2826     | ',' IoRestrictionKeyword      {$$ = $2;}
   2827     ;
   2828 
   2829 OptionalListString
   2830     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
   2831     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
   2832     | ',' TermArg                   {$$ = $2;}
   2833     ;
   2834 
   2835 OptionalMaxType
   2836     : ','                           {$$ = NULL;}
   2837     | ',' MaxKeyword                {$$ = $2;}
   2838     ;
   2839 
   2840 OptionalMemType
   2841     : ','                           {$$ = NULL;}
   2842     | ',' MemTypeKeyword            {$$ = $2;}
   2843     ;
   2844 
   2845 OptionalMinType
   2846     : ','                           {$$ = NULL;}
   2847     | ',' MinKeyword                {$$ = $2;}
   2848     ;
   2849 
   2850 OptionalNameString
   2851     :                               {$$ = NULL;}
   2852     | ','                           {$$ = NULL;}
   2853     | ',' NameString                {$$ = $2;}
   2854     ;
   2855 
   2856 OptionalNameString_Last
   2857     :                               {$$ = NULL;}
   2858     | ','                           {$$ = NULL;}
   2859     | ',' NameString                {$$ = $2;}
   2860     ;
   2861 
   2862 OptionalNameString_First
   2863     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}
   2864     | NameString                    {$$ = $1;}
   2865     ;
   2866 
   2867 OptionalObjectTypeKeyword
   2868     :                               {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
   2869     | ',' ObjectTypeKeyword         {$$ = $2;}
   2870     ;
   2871 
   2872 OptionalParityType
   2873     : ','                           {$$ = NULL;}
   2874     | ',' ParityTypeKeyword         {$$ = $2;}
   2875     ;
   2876 
   2877 OptionalQWordConstExpr
   2878     :                               {$$ = NULL;}
   2879     | ','                           {$$ = NULL;}
   2880     | ',' QWordConstExpr            {$$ = $2;}
   2881     ;
   2882 
   2883 OptionalRangeType
   2884     : ','                           {$$ = NULL;}
   2885     | ',' RangeTypeKeyword          {$$ = $2;}
   2886     ;
   2887 
   2888 OptionalReadWriteKeyword
   2889     :                                   {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
   2890     | PARSEOP_READWRITETYPE_BOTH        {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
   2891     | PARSEOP_READWRITETYPE_READONLY    {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_READONLY);}
   2892     ;
   2893 
   2894 OptionalReference
   2895     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
   2896     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
   2897     | ',' TermArg                   {$$ = $2;}
   2898     ;
   2899 
   2900 OptionalResourceType_First
   2901     :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
   2902     | ResourceTypeKeyword           {$$ = $1;}
   2903     ;
   2904 
   2905 OptionalResourceType
   2906     :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
   2907     | ','                           {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
   2908     | ',' ResourceTypeKeyword       {$$ = $2;}
   2909     ;
   2910 
   2911 OptionalReturnArg
   2912     :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
   2913     | TermArg                       {$$ = $1;}
   2914     ;
   2915 
   2916 OptionalSerializeRuleKeyword
   2917     :                               {$$ = NULL;}
   2918     | ','                           {$$ = NULL;}
   2919     | ',' SerializeRuleKeyword      {$$ = $2;}
   2920     ;
   2921 
   2922 OptionalSlaveMode
   2923     : ','                           {$$ = NULL;}
   2924     | ',' SlaveModeKeyword          {$$ = $2;}
   2925     ;
   2926 
   2927 OptionalShareType
   2928     :                               {$$ = NULL;}
   2929     | ','                           {$$ = NULL;}
   2930     | ',' ShareTypeKeyword          {$$ = $2;}
   2931     ;
   2932 
   2933 OptionalShareType_First
   2934     :                               {$$ = NULL;}
   2935     | ShareTypeKeyword              {$$ = $1;}
   2936     ;
   2937 
   2938 OptionalStopBits
   2939     : ','                           {$$ = NULL;}
   2940     | ',' StopBitsKeyword           {$$ = $2;}
   2941     ;
   2942 
   2943 OptionalStringData
   2944     :                               {$$ = NULL;}
   2945     | ','                           {$$ = NULL;}
   2946     | ',' StringData                {$$ = $2;}
   2947     ;
   2948 
   2949 OptionalTermArg
   2950     :                               {$$ = NULL;}
   2951     | TermArg                       {$$ = $1;}
   2952     ;
   2953 
   2954 OptionalType
   2955     :                               {$$ = NULL;}
   2956     | ','                           {$$ = NULL;}
   2957     | ',' TypeKeyword               {$$ = $2;}
   2958     ;
   2959 
   2960 OptionalType_Last
   2961     :                               {$$ = NULL;}
   2962     | ','                           {$$ = NULL;}
   2963     | ',' TypeKeyword               {$$ = $2;}
   2964     ;
   2965 
   2966 OptionalTranslationType_Last
   2967     :                               {$$ = NULL;}
   2968     | ','                           {$$ = NULL;}
   2969     | ',' TranslationKeyword        {$$ = $2;}
   2970     ;
   2971 
   2972 OptionalWireMode
   2973     : ','                           {$$ = NULL;}
   2974     | ',' WireModeKeyword           {$$ = $2;}
   2975     ;
   2976 
   2977 OptionalWordConst
   2978     :                               {$$ = NULL;}
   2979     | WordConst                     {$$ = $1;}
   2980     ;
   2981 
   2982 OptionalWordConstExpr
   2983     : ','                           {$$ = NULL;}
   2984     | ',' WordConstExpr             {$$ = $2;}
   2985     ;
   2986 
   2987 OptionalXferSize
   2988     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
   2989     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
   2990     | ',' XferSizeKeyword           {$$ = $2;}
   2991     ;
   2992