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