Home | History | Annotate | Line # | Download | only in compiler
aslrules.y revision 1.1.1.3
      1 NoEcho('
      2 /******************************************************************************
      3  *
      4  * Module Name: aslrules.y - Main Bison/Yacc production rules
      5  *
      6  *****************************************************************************/
      7 
      8 /*
      9  * Copyright (C) 2000 - 2016, 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  * ASL Root and Secondary Terms
     50  *
     51  ******************************************************************************/
     52 
     53 /*
     54  * Root term. Allow multiple #line directives before the definition block
     55  * to handle output from preprocessors
     56  */
     57 AslCode
     58     : DefinitionBlockList           {$<n>$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_ASL_CODE),1, $1);}
     59     | error                         {YYABORT; $$ = NULL;}
     60     ;
     61 
     62 
     63 /*
     64  * Note concerning support for "module-level code".
     65  *
     66  * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
     67  * methods (the so-called module-level code.) This support was explicitly
     68  * removed in ACPI 2.0, but this type of code continues to be created by
     69  * BIOS vendors. In order to support the disassembly and recompilation of
     70  * such code (and the porting of ASL code to iASL), iASL supports this
     71  * code in violation of the current ACPI specification.
     72  *
     73  * The grammar change to support module-level code is to revert the
     74  * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
     75  * original use of {TermList} instead (see below.) This allows the use
     76  * of Type1 and Type2 opcodes at module level.
     77  */
     78 DefinitionBlockTerm
     79     : PARSEOP_DEFINITION_BLOCK '('  {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITION_BLOCK);}
     80         String ','
     81         String ','
     82         ByteConst ','
     83         String ','
     84         String ','
     85         DWordConst
     86         ')'                         {TrSetEndLineNumber ($<n>3);}
     87             '{' TermList '}'        {$$ = TrLinkChildren ($<n>3,7,$4,$6,$8,$10,$12,$14,$18);}
     88     ;
     89 
     90 DefinitionBlockList
     91     : DefinitionBlockTerm
     92     | DefinitionBlockTerm
     93         DefinitionBlockList         {$$ = TrLinkPeerNodes (2, $1,$2);}
     94     ;
     95 
     96 SuperName
     97     : NameString                    {}
     98     | ArgTerm                       {}
     99     | LocalTerm                     {}
    100     | DebugTerm                     {}
    101     | Type6Opcode                   {}
    102 
    103 Target
    104     :                               {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
    105     | ','                           {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
    106     | ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
    107     ;
    108 
    109 TermArg
    110     : Type2Opcode                   {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    111     | DataObject                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    112     | NameString                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    113     | ArgTerm                       {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    114     | LocalTerm                     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    115     ;
    116 
    117 /*
    118  NOTE: Removed from TermArg due to reduce/reduce conflicts:
    119     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    120     | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    121     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    122     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    123 
    124 */
    125 
    126 MethodInvocationTerm
    127     : NameString '('                {TrUpdateNode (PARSEOP_METHODCALL, $1);}
    128         ArgList ')'                 {$$ = TrLinkChildNode ($1,$4);}
    129     ;
    130 
    131 /* OptionalCount must appear before ByteList or an incorrect reduction will result */
    132 
    133 OptionalCount
    134     :                               {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
    135     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
    136     | ',' TermArg                   {$$ = $2;}
    137     ;
    138 
    139 VarPackageLengthTerm
    140     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
    141     | TermArg                       {$$ = $1;}
    142     ;
    143 
    144 
    145 /******* List Terms **************************************************/
    146 
    147 ArgList
    148     :                               {$$ = NULL;}
    149     | TermArg
    150     | ArgList ','                   /* Allows a trailing comma at list end */
    151     | ArgList ','
    152         TermArg                     {$$ = TrLinkPeerNode ($1,$3);}
    153     ;
    154 
    155 ByteList
    156     :                               {$$ = NULL;}
    157     | ByteConstExpr
    158     | ByteList ','                  /* Allows a trailing comma at list end */
    159     | ByteList ','
    160         ByteConstExpr               {$$ = TrLinkPeerNode ($1,$3);}
    161     ;
    162 
    163 DWordList
    164     :                               {$$ = NULL;}
    165     | DWordConstExpr
    166     | DWordList ','                 /* Allows a trailing comma at list end */
    167     | DWordList ','
    168         DWordConstExpr              {$$ = TrLinkPeerNode ($1,$3);}
    169     ;
    170 
    171 FieldUnitList
    172     :                               {$$ = NULL;}
    173     | FieldUnit
    174     | FieldUnitList ','             /* Allows a trailing comma at list end */
    175     | FieldUnitList ','
    176         FieldUnit                   {$$ = TrLinkPeerNode ($1,$3);}
    177     ;
    178 
    179 FieldUnit
    180     : FieldUnitEntry                {}
    181     | OffsetTerm                    {}
    182     | AccessAsTerm                  {}
    183     | ConnectionTerm                {}
    184     ;
    185 
    186 FieldUnitEntry
    187     : ',' AmlPackageLengthTerm      {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);}
    188     | NameSeg ','
    189         AmlPackageLengthTerm        {$$ = TrLinkChildNode ($1,$3);}
    190     ;
    191 
    192 ObjectList
    193     :                               {$$ = NULL;}
    194     | ObjectList Object             {$$ = TrLinkPeerNode ($1,$2);}
    195     | error                         {$$ = AslDoError(); yyclearin;}
    196     ;
    197 
    198 Object
    199     : CompilerDirective             {}
    200     | NamedObject                   {}
    201     | NameSpaceModifier             {}
    202     ;
    203 
    204 PackageList
    205     :                               {$$ = NULL;}
    206     | PackageElement
    207     | PackageList ','               /* Allows a trailing comma at list end */
    208     | PackageList ','
    209         PackageElement              {$$ = TrLinkPeerNode ($1,$3);}
    210     ;
    211 
    212 PackageElement
    213     : DataObject                    {}
    214     | NameString                    {}
    215     ;
    216 
    217     /* Rules for specifying the type of one method argument or return value */
    218 
    219 ParameterTypePackage
    220     :                               {$$ = NULL;}
    221     | ObjectTypeKeyword             {$$ = $1;}
    222     | ParameterTypePackage ','
    223         ObjectTypeKeyword           {$$ = TrLinkPeerNodes (2,$1,$3);}
    224     ;
    225 
    226 ParameterTypePackageList
    227     :                               {$$ = NULL;}
    228     | ObjectTypeKeyword             {$$ = $1;}
    229     | '{' ParameterTypePackage '}'  {$$ = $2;}
    230     ;
    231 
    232 OptionalParameterTypePackage
    233     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
    234     | ',' ParameterTypePackageList  {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
    235     ;
    236 
    237     /* Rules for specifying the types for method arguments */
    238 
    239 ParameterTypesPackage
    240     : ParameterTypePackageList      {$$ = $1;}
    241     | ParameterTypesPackage ','
    242         ParameterTypePackageList    {$$ = TrLinkPeerNodes (2,$1,$3);}
    243     ;
    244 
    245 ParameterTypesPackageList
    246     :                               {$$ = NULL;}
    247     | ObjectTypeKeyword             {$$ = $1;}
    248     | '{' ParameterTypesPackage '}' {$$ = $2;}
    249     ;
    250 
    251 OptionalParameterTypesPackage
    252     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
    253     | ',' ParameterTypesPackageList {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
    254     ;
    255 
    256     /* ACPI 3.0 -- allow semicolons between terms */
    257 
    258 TermList
    259     :                               {$$ = NULL;}
    260     | TermList Term                 {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
    261     | TermList Term ';'             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
    262     | TermList ';' Term             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
    263     | TermList ';' Term ';'         {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
    264     ;
    265 
    266 Term
    267     : Object                        {}
    268     | Type1Opcode                   {}
    269     | Type2Opcode                   {}
    270     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    271     | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    272     | Type2BufferOpcode             {}
    273     | Type2BufferOrStringOpcode     {}
    274     | error                         {$$ = AslDoError(); yyclearin;}
    275     ;
    276 
    277 /*
    278  * Case-Default list; allow only one Default term and unlimited Case terms
    279  */
    280 CaseDefaultTermList
    281     :                               {$$ = NULL;}
    282     | CaseTerm  {}
    283     | DefaultTerm   {}
    284     | CaseDefaultTermList
    285         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
    286     | CaseDefaultTermList
    287         DefaultTerm                 {$$ = TrLinkPeerNode ($1,$2);}
    288 
    289 /* Original - attempts to force zero or one default term within the switch */
    290 
    291 /*
    292 CaseDefaultTermList
    293     :                               {$$ = NULL;}
    294     | CaseTermList
    295         DefaultTerm
    296         CaseTermList                {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));}
    297     | CaseTermList
    298         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
    299     ;
    300 
    301 CaseTermList
    302     :                               {$$ = NULL;}
    303     | CaseTerm                      {}
    304     | CaseTermList
    305         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
    306     ;
    307 */
    308 
    309 
    310 /*******************************************************************************
    311  *
    312  * ASL Data and Constant Terms
    313  *
    314  ******************************************************************************/
    315 
    316 DataObject
    317     : BufferData                    {}
    318     | PackageData                   {}
    319     | IntegerData                   {}
    320     | StringData                    {}
    321     ;
    322 
    323 BufferData
    324     : Type5Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    325     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    326     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    327     | BufferTerm                    {}
    328     ;
    329 
    330 PackageData
    331     : PackageTerm                   {}
    332     ;
    333 
    334 IntegerData
    335     : Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    336     | Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    337     | Integer                       {}
    338     | ConstTerm                     {}
    339     ;
    340 
    341 StringData
    342     : Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    343     | String                        {}
    344     ;
    345 
    346 ByteConst
    347     : Integer                       {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
    348     ;
    349 
    350 WordConst
    351     : Integer                       {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
    352     ;
    353 
    354 DWordConst
    355     : Integer                       {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
    356     ;
    357 
    358 QWordConst
    359     : Integer                       {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
    360     ;
    361 
    362 /*
    363  * The NODE_COMPILE_TIME_CONST flag in the following constant expressions
    364  * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes
    365  * to simple integers. It is an error if these types of expressions cannot be
    366  * reduced, since the AML grammar for ****ConstExpr requires a simple constant.
    367  * Note: The required byte length of the constant is passed through to the
    368  * constant folding code in the node AmlLength field.
    369  */
    370 ByteConstExpr
    371     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
    372     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
    373     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
    374     | ByteConst                     {}
    375     ;
    376 
    377 WordConstExpr
    378     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
    379     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
    380     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
    381     | WordConst                     {}
    382     ;
    383 
    384 DWordConstExpr
    385     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
    386     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
    387     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
    388     | DWordConst                    {}
    389     ;
    390 
    391 QWordConstExpr
    392     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
    393     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
    394     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
    395     | QWordConst                    {}
    396     ;
    397 
    398 ConstTerm
    399     : ConstExprTerm                 {}
    400     | PARSEOP_REVISION              {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
    401     ;
    402 
    403 ConstExprTerm
    404     : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
    405     | PARSEOP_ONE                   {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
    406     | PARSEOP_ONES                  {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
    407     | PARSEOP___DATE__              {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
    408     | PARSEOP___FILE__              {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
    409     | PARSEOP___LINE__              {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
    410     | PARSEOP___PATH__              {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);}
    411     ;
    412 
    413 Integer
    414     : PARSEOP_INTEGER               {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, AslCompilerlval.i);}
    415     ;
    416 
    417 String
    418     : PARSEOP_STRING_LITERAL        {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, (ACPI_NATIVE_INT) AslCompilerlval.s);}
    419     ;
    420 
    421 
    422 /*******************************************************************************
    423  *
    424  * ASL Opcode Terms
    425  *
    426  ******************************************************************************/
    427 
    428 CompilerDirective
    429     : IncludeTerm                   {}
    430     | IncludeEndTerm                {}
    431     | ExternalTerm                  {}
    432     ;
    433 
    434 NamedObject
    435     : BankFieldTerm                 {}
    436     | CreateBitFieldTerm            {}
    437     | CreateByteFieldTerm           {}
    438     | CreateDWordFieldTerm          {}
    439     | CreateFieldTerm               {}
    440     | CreateQWordFieldTerm          {}
    441     | CreateWordFieldTerm           {}
    442     | DataRegionTerm                {}
    443     | DeviceTerm                    {}
    444     | EventTerm                     {}
    445     | FieldTerm                     {}
    446     | FunctionTerm                  {}
    447     | IndexFieldTerm                {}
    448     | MethodTerm                    {}
    449     | MutexTerm                     {}
    450     | OpRegionTerm                  {}
    451     | PowerResTerm                  {}
    452     | ProcessorTerm                 {}
    453     | ThermalZoneTerm               {}
    454     ;
    455 
    456 NameSpaceModifier
    457     : AliasTerm                     {}
    458     | NameTerm                      {}
    459     | ScopeTerm                     {}
    460     ;
    461 
    462 /* For ObjectType: SuperName except for MethodInvocationTerm */
    463 
    464 ObjectTypeName
    465     : NameString                    {}
    466     | ArgTerm                       {}
    467     | LocalTerm                     {}
    468     | DebugTerm                     {}
    469     | RefOfTerm                     {}
    470     | DerefOfTerm                   {}
    471     | IndexTerm                     {}
    472 
    473 /*    | MethodInvocationTerm          {} */  /* Caused reduce/reduce with Type6Opcode->MethodInvocationTerm */
    474     ;
    475 
    476 RequiredTarget
    477     : ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
    478     ;
    479 
    480 SimpleTarget
    481     : NameString                    {}
    482     | LocalTerm                     {}
    483     | ArgTerm                       {}
    484     ;
    485 
    486 /* Opcode types */
    487 
    488 Type1Opcode
    489     : BreakTerm                     {}
    490     | BreakPointTerm                {}
    491     | ContinueTerm                  {}
    492     | FatalTerm                     {}
    493     | ElseIfTerm                    {}
    494     | LoadTerm                      {}
    495     | NoOpTerm                      {}
    496     | NotifyTerm                    {}
    497     | ReleaseTerm                   {}
    498     | ResetTerm                     {}
    499     | ReturnTerm                    {}
    500     | SignalTerm                    {}
    501     | SleepTerm                     {}
    502     | StallTerm                     {}
    503     | SwitchTerm                    {}
    504     | UnloadTerm                    {}
    505     | WhileTerm                     {}
    506     ;
    507 
    508 Type2Opcode
    509     : AcquireTerm                   {}
    510     | CondRefOfTerm                 {}
    511     | CopyObjectTerm                {}
    512     | DerefOfTerm                   {}
    513     | ObjectTypeTerm                {}
    514     | RefOfTerm                     {}
    515     | SizeOfTerm                    {}
    516     | StoreTerm                     {}
    517     | EqualsTerm                    {}
    518     | TimerTerm                     {}
    519     | WaitTerm                      {}
    520     | MethodInvocationTerm          {}
    521     ;
    522 
    523 /*
    524  * Type 3/4/5 opcodes
    525  */
    526 Type2IntegerOpcode                  /* "Type3" opcodes */
    527     : Expression                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    528     | AddTerm                       {}
    529     | AndTerm                       {}
    530     | DecTerm                       {}
    531     | DivideTerm                    {}
    532     | FindSetLeftBitTerm            {}
    533     | FindSetRightBitTerm           {}
    534     | FromBCDTerm                   {}
    535     | IncTerm                       {}
    536     | IndexTerm                     {}
    537     | LAndTerm                      {}
    538     | LEqualTerm                    {}
    539     | LGreaterTerm                  {}
    540     | LGreaterEqualTerm             {}
    541     | LLessTerm                     {}
    542     | LLessEqualTerm                {}
    543     | LNotTerm                      {}
    544     | LNotEqualTerm                 {}
    545     | LoadTableTerm                 {}
    546     | LOrTerm                       {}
    547     | MatchTerm                     {}
    548     | ModTerm                       {}
    549     | MultiplyTerm                  {}
    550     | NAndTerm                      {}
    551     | NOrTerm                       {}
    552     | NotTerm                       {}
    553     | OrTerm                        {}
    554     | ShiftLeftTerm                 {}
    555     | ShiftRightTerm                {}
    556     | SubtractTerm                  {}
    557     | ToBCDTerm                     {}
    558     | ToIntegerTerm                 {}
    559     | XOrTerm                       {}
    560     ;
    561 
    562 Type2StringOpcode                   /* "Type4" Opcodes */
    563     : ToDecimalStringTerm           {}
    564     | ToHexStringTerm               {}
    565     | ToStringTerm                  {}
    566     ;
    567 
    568 Type2BufferOpcode                   /* "Type5" Opcodes */
    569     : ToBufferTerm                  {}
    570     | ConcatResTerm                 {}
    571     ;
    572 
    573 Type2BufferOrStringOpcode
    574     : ConcatTerm                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    575     | PrintfTerm                    {}
    576     | FprintfTerm                   {}
    577     | MidTerm                       {}
    578     ;
    579 
    580 /*
    581  * A type 3 opcode evaluates to an Integer and cannot have a destination operand
    582  */
    583 Type3Opcode
    584     : EISAIDTerm                    {}
    585     ;
    586 
    587 /* Obsolete
    588 Type4Opcode
    589     : ConcatTerm                    {}
    590     | ToDecimalStringTerm           {}
    591     | ToHexStringTerm               {}
    592     | MidTerm                       {}
    593     | ToStringTerm                  {}
    594     ;
    595 */
    596 
    597 Type5Opcode
    598     : ResourceTemplateTerm          {}
    599     | UnicodeTerm                   {}
    600     | ToPLDTerm                     {}
    601     | ToUUIDTerm                    {}
    602     ;
    603 
    604 Type6Opcode
    605     : RefOfTerm                     {}
    606     | DerefOfTerm                   {}
    607     | IndexTerm                     {}
    608     | IndexExpTerm                  {}
    609     | MethodInvocationTerm          {}
    610     ;
    611 
    612 
    613 /*******************************************************************************
    614  *
    615  * ASL Primary Terms
    616  *
    617  ******************************************************************************/
    618 
    619 AccessAsTerm
    620     : PARSEOP_ACCESSAS '('
    621         AccessTypeKeyword
    622         OptionalAccessAttribTerm
    623         ')'                         {$$ = TrCreateNode (PARSEOP_ACCESSAS,2,$3,$4);}
    624     | PARSEOP_ACCESSAS '('
    625         error ')'                   {$$ = AslDoError(); yyclearin;}
    626     ;
    627 
    628 AcquireTerm
    629     : PARSEOP_ACQUIRE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_ACQUIRE);}
    630         SuperName
    631         ',' WordConstExpr
    632         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$6);}
    633     | PARSEOP_ACQUIRE '('
    634         error ')'                   {$$ = AslDoError(); yyclearin;}
    635     ;
    636 
    637 AddTerm
    638     : PARSEOP_ADD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
    639         TermArg
    640         TermArgItem
    641         Target
    642         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    643     | PARSEOP_ADD '('
    644         error ')'                   {$$ = AslDoError(); yyclearin;}
    645     ;
    646 
    647 AliasTerm
    648     : PARSEOP_ALIAS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_ALIAS);}
    649         NameString
    650         NameStringItem
    651         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,
    652                                         TrSetNodeFlags ($5, NODE_IS_NAME_DECLARATION));}
    653     | PARSEOP_ALIAS '('
    654         error ')'                   {$$ = AslDoError(); yyclearin;}
    655     ;
    656 
    657 AndTerm
    658     : PARSEOP_AND '('               {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
    659         TermArg
    660         TermArgItem
    661         Target
    662         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    663     | PARSEOP_AND '('
    664         error ')'                   {$$ = AslDoError(); yyclearin;}
    665     ;
    666 
    667 ArgTerm
    668     : PARSEOP_ARG0                  {$$ = TrCreateLeafNode (PARSEOP_ARG0);}
    669     | PARSEOP_ARG1                  {$$ = TrCreateLeafNode (PARSEOP_ARG1);}
    670     | PARSEOP_ARG2                  {$$ = TrCreateLeafNode (PARSEOP_ARG2);}
    671     | PARSEOP_ARG3                  {$$ = TrCreateLeafNode (PARSEOP_ARG3);}
    672     | PARSEOP_ARG4                  {$$ = TrCreateLeafNode (PARSEOP_ARG4);}
    673     | PARSEOP_ARG5                  {$$ = TrCreateLeafNode (PARSEOP_ARG5);}
    674     | PARSEOP_ARG6                  {$$ = TrCreateLeafNode (PARSEOP_ARG6);}
    675     ;
    676 
    677 BankFieldTerm
    678     : PARSEOP_BANKFIELD '('         {$<n>$ = TrCreateLeafNode (PARSEOP_BANKFIELD);}
    679         NameString
    680         NameStringItem
    681         TermArgItem
    682         ',' AccessTypeKeyword
    683         ',' LockRuleKeyword
    684         ',' UpdateRuleKeyword
    685         ')' '{'
    686             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,7,$4,$5,$6,$8,$10,$12,$15);}
    687     | PARSEOP_BANKFIELD '('
    688         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
    689     ;
    690 
    691 BreakTerm
    692     : PARSEOP_BREAK                 {$$ = TrCreateNode (PARSEOP_BREAK, 0);}
    693     ;
    694 
    695 BreakPointTerm
    696     : PARSEOP_BREAKPOINT            {$$ = TrCreateNode (PARSEOP_BREAKPOINT, 0);}
    697     ;
    698 
    699 BufferTerm
    700     : PARSEOP_BUFFER '('            {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
    701         OptionalTermArg
    702         ')' '{'
    703             BufferTermData '}'      {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
    704     | PARSEOP_BUFFER '('
    705         error ')'                   {$$ = AslDoError(); yyclearin;}
    706     ;
    707 
    708 BufferTermData
    709     : ByteList                      {}
    710     | StringData                    {}
    711     ;
    712 
    713 CaseTerm
    714     : PARSEOP_CASE '('              {$<n>$ = TrCreateLeafNode (PARSEOP_CASE);}
    715         DataObject
    716         ')' '{'
    717             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
    718     | PARSEOP_CASE '('
    719         error ')'                   {$$ = AslDoError(); yyclearin;}
    720     ;
    721 
    722 ConcatTerm
    723     : PARSEOP_CONCATENATE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATE);}
    724         TermArg
    725         TermArgItem
    726         Target
    727         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    728     | PARSEOP_CONCATENATE '('
    729         error ')'                   {$$ = AslDoError(); yyclearin;}
    730     ;
    731 
    732 ConcatResTerm
    733     : PARSEOP_CONCATENATERESTEMPLATE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATERESTEMPLATE);}
    734         TermArg
    735         TermArgItem
    736         Target
    737         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    738     | PARSEOP_CONCATENATERESTEMPLATE '('
    739         error ')'                   {$$ = AslDoError(); yyclearin;}
    740     ;
    741 
    742 ConnectionTerm
    743     : PARSEOP_CONNECTION '('
    744         NameString
    745         ')'                         {$$ = TrCreateNode (PARSEOP_CONNECTION,1,$3);}
    746     | PARSEOP_CONNECTION '('        {$<n>$ = TrCreateLeafNode (PARSEOP_CONNECTION);}
    747         ResourceMacroTerm
    748         ')'                         {$$ = TrLinkChildren ($<n>3, 1,
    749                                             TrLinkChildren (TrCreateLeafNode (PARSEOP_RESOURCETEMPLATE), 3,
    750                                                 TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
    751                                                 TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
    752                                                 $4));}
    753     | PARSEOP_CONNECTION '('
    754         error ')'                   {$$ = AslDoError(); yyclearin;}
    755     ;
    756 
    757 CondRefOfTerm
    758     : PARSEOP_CONDREFOF '('         {$<n>$ = TrCreateLeafNode (PARSEOP_CONDREFOF);}
    759         SuperName
    760         Target
    761         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    762     | PARSEOP_CONDREFOF '('
    763         error ')'                   {$$ = AslDoError(); yyclearin;}
    764     ;
    765 
    766 ContinueTerm
    767     : PARSEOP_CONTINUE              {$$ = TrCreateNode (PARSEOP_CONTINUE, 0);}
    768     ;
    769 
    770 CopyObjectTerm
    771     : PARSEOP_COPYOBJECT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_COPYOBJECT);}
    772         TermArg
    773         ',' SimpleTarget
    774         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
    775     | PARSEOP_COPYOBJECT '('
    776         error ')'                   {$$ = AslDoError(); yyclearin;}
    777     ;
    778 
    779 CreateBitFieldTerm
    780     : PARSEOP_CREATEBITFIELD '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBITFIELD);}
    781         TermArg
    782         TermArgItem
    783         NameStringItem
    784         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    785     | PARSEOP_CREATEBITFIELD '('
    786         error ')'                   {$$ = AslDoError(); yyclearin;}
    787     ;
    788 
    789 CreateByteFieldTerm
    790     : PARSEOP_CREATEBYTEFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBYTEFIELD);}
    791         TermArg
    792         TermArgItem
    793         NameStringItem
    794         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    795     | PARSEOP_CREATEBYTEFIELD '('
    796         error ')'                   {$$ = AslDoError(); yyclearin;}
    797     ;
    798 
    799 CreateDWordFieldTerm
    800     : PARSEOP_CREATEDWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEDWORDFIELD);}
    801         TermArg
    802         TermArgItem
    803         NameStringItem
    804         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    805     | PARSEOP_CREATEDWORDFIELD '('
    806         error ')'                   {$$ = AslDoError(); yyclearin;}
    807     ;
    808 
    809 CreateFieldTerm
    810     : PARSEOP_CREATEFIELD '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEFIELD);}
    811         TermArg
    812         TermArgItem
    813         TermArgItem
    814         NameStringItem
    815         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,TrSetNodeFlags ($7, NODE_IS_NAME_DECLARATION));}
    816     | PARSEOP_CREATEFIELD '('
    817         error ')'                   {$$ = AslDoError(); yyclearin;}
    818     ;
    819 
    820 CreateQWordFieldTerm
    821     : PARSEOP_CREATEQWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEQWORDFIELD);}
    822         TermArg
    823         TermArgItem
    824         NameStringItem
    825         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    826     | PARSEOP_CREATEQWORDFIELD '('
    827         error ')'                   {$$ = AslDoError(); yyclearin;}
    828     ;
    829 
    830 CreateWordFieldTerm
    831     : PARSEOP_CREATEWORDFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEWORDFIELD);}
    832         TermArg
    833         TermArgItem
    834         NameStringItem
    835         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    836     | PARSEOP_CREATEWORDFIELD '('
    837         error ')'                   {$$ = AslDoError(); yyclearin;}
    838     ;
    839 
    840 DataRegionTerm
    841     : PARSEOP_DATATABLEREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DATATABLEREGION);}
    842         NameString
    843         TermArgItem
    844         TermArgItem
    845         TermArgItem
    846         ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$6,$7);}
    847     | PARSEOP_DATATABLEREGION '('
    848         error ')'                   {$$ = AslDoError(); yyclearin;}
    849     ;
    850 
    851 DebugTerm
    852     : PARSEOP_DEBUG                 {$$ = TrCreateLeafNode (PARSEOP_DEBUG);}
    853     ;
    854 
    855 DecTerm
    856     : PARSEOP_DECREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
    857         SuperName
    858         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
    859     | PARSEOP_DECREMENT '('
    860         error ')'                   {$$ = AslDoError(); yyclearin;}
    861     ;
    862 
    863 DefaultTerm
    864     : PARSEOP_DEFAULT '{'           {$<n>$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
    865         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
    866     | PARSEOP_DEFAULT '{'
    867         error '}'                   {$$ = AslDoError(); yyclearin;}
    868     ;
    869 
    870 DerefOfTerm
    871     : PARSEOP_DEREFOF '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DEREFOF);}
    872         TermArg
    873         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
    874     | PARSEOP_DEREFOF '('
    875         error ')'                   {$$ = AslDoError(); yyclearin;}
    876     ;
    877 
    878 DeviceTerm
    879     : PARSEOP_DEVICE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
    880         NameString
    881         ')' '{'
    882             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
    883     | PARSEOP_DEVICE '('
    884         error ')'                   {$$ = AslDoError(); yyclearin;}
    885     ;
    886 
    887 DivideTerm
    888     : PARSEOP_DIVIDE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
    889         TermArg
    890         TermArgItem
    891         Target
    892         Target
    893         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
    894     | PARSEOP_DIVIDE '('
    895         error ')'                   {$$ = AslDoError(); yyclearin;}
    896     ;
    897 
    898 EISAIDTerm
    899     : PARSEOP_EISAID '('
    900         StringData ')'              {$$ = TrUpdateNode (PARSEOP_EISAID, $3);}
    901     | PARSEOP_EISAID '('
    902         error ')'                   {$$ = AslDoError(); yyclearin;}
    903     ;
    904 
    905 ElseIfTerm
    906     : IfTerm ElseTerm               {$$ = TrLinkPeerNode ($1,$2);}
    907     ;
    908 
    909 ElseTerm
    910     :                               {$$ = NULL;}
    911     | PARSEOP_ELSE '{'              {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
    912         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
    913 
    914     | PARSEOP_ELSE '{'
    915         error '}'                   {$$ = AslDoError(); yyclearin;}
    916 
    917     | PARSEOP_ELSE
    918         error                       {$$ = AslDoError(); yyclearin;}
    919 
    920     | PARSEOP_ELSEIF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
    921         TermArg                     {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
    922         ')' '{'
    923             TermList '}'            {TrLinkChildren ($<n>5,2,$4,$8);}
    924         ElseTerm                    {TrLinkPeerNode ($<n>5,$11);}
    925                                     {$$ = TrLinkChildren ($<n>3,1,$<n>5);}
    926 
    927     | PARSEOP_ELSEIF '('
    928         error ')'                   {$$ = AslDoError(); yyclearin;}
    929 
    930     | PARSEOP_ELSEIF
    931         error                       {$$ = AslDoError(); yyclearin;}
    932     ;
    933 
    934 EventTerm
    935     : PARSEOP_EVENT '('             {$<n>$ = TrCreateLeafNode (PARSEOP_EVENT);}
    936         NameString
    937         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION));}
    938     | PARSEOP_EVENT '('
    939         error ')'                   {$$ = AslDoError(); yyclearin;}
    940     ;
    941 
    942 ExternalTerm
    943     : PARSEOP_EXTERNAL '('
    944         NameString
    945         OptionalObjectTypeKeyword
    946         OptionalParameterTypePackage
    947         OptionalParameterTypesPackage
    948         ')'                         {$$ = TrCreateNode (PARSEOP_EXTERNAL,4,$3,$4,$5,$6);}
    949     | PARSEOP_EXTERNAL '('
    950         error ')'                   {$$ = AslDoError(); yyclearin;}
    951     ;
    952 
    953 FatalTerm
    954     : PARSEOP_FATAL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FATAL);}
    955         ByteConstExpr
    956         ',' DWordConstExpr
    957         TermArgItem
    958         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
    959     | PARSEOP_FATAL '('
    960         error ')'                   {$$ = AslDoError(); yyclearin;}
    961     ;
    962 
    963 FieldTerm
    964     : PARSEOP_FIELD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FIELD);}
    965         NameString
    966         ',' AccessTypeKeyword
    967         ',' LockRuleKeyword
    968         ',' UpdateRuleKeyword
    969         ')' '{'
    970             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$10,$13);}
    971     | PARSEOP_FIELD '('
    972         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
    973     ;
    974 
    975 FindSetLeftBitTerm
    976     : PARSEOP_FINDSETLEFTBIT '('    {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETLEFTBIT);}
    977         TermArg
    978         Target
    979         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    980     | PARSEOP_FINDSETLEFTBIT '('
    981         error ')'                   {$$ = AslDoError(); yyclearin;}
    982     ;
    983 
    984 FindSetRightBitTerm
    985     : PARSEOP_FINDSETRIGHTBIT '('   {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETRIGHTBIT);}
    986         TermArg
    987         Target
    988         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    989     | PARSEOP_FINDSETRIGHTBIT '('
    990         error ')'                   {$$ = AslDoError(); yyclearin;}
    991     ;
    992 
    993 FprintfTerm
    994     : PARSEOP_FPRINTF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_FPRINTF);}
    995         TermArg ','
    996         StringData
    997         PrintfArgList
    998         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
    999     | PARSEOP_FPRINTF '('
   1000         error ')'                   {$$ = AslDoError(); yyclearin;}
   1001     ;
   1002 
   1003 FromBCDTerm
   1004     : PARSEOP_FROMBCD '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FROMBCD);}
   1005         TermArg
   1006         Target
   1007         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1008     | PARSEOP_FROMBCD '('
   1009         error ')'                   {$$ = AslDoError(); yyclearin;}
   1010     ;
   1011 
   1012 FunctionTerm
   1013     : PARSEOP_FUNCTION '('          {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
   1014         NameString
   1015         OptionalParameterTypePackage
   1016         OptionalParameterTypesPackage
   1017         ')' '{'
   1018             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
   1019                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
   1020                                         TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
   1021                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$9);}
   1022     | PARSEOP_FUNCTION '('
   1023         error ')'                   {$$ = AslDoError(); yyclearin;}
   1024     ;
   1025 
   1026 IfTerm
   1027     : PARSEOP_IF '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
   1028         TermArg
   1029         ')' '{'
   1030             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   1031 
   1032     | PARSEOP_IF '('
   1033         error ')'                   {$$ = AslDoError(); yyclearin;}
   1034     ;
   1035 
   1036 IncludeTerm
   1037     : PARSEOP_INCLUDE '('
   1038         String  ')'                 {$$ = TrUpdateNode (PARSEOP_INCLUDE, $3);
   1039                                         FlOpenIncludeFile ($3);}
   1040     ;
   1041 
   1042 IncludeEndTerm
   1043     : PARSEOP_INCLUDE_END           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE_END); TrSetCurrentFilename ($$);}
   1044     ;
   1045 
   1046 IncTerm
   1047     : PARSEOP_INCREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
   1048         SuperName
   1049         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1050     | PARSEOP_INCREMENT '('
   1051         error ')'                   {$$ = AslDoError(); yyclearin;}
   1052     ;
   1053 
   1054 IndexFieldTerm
   1055     : PARSEOP_INDEXFIELD '('        {$<n>$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
   1056         NameString
   1057         NameStringItem
   1058         ',' AccessTypeKeyword
   1059         ',' LockRuleKeyword
   1060         ',' UpdateRuleKeyword
   1061         ')' '{'
   1062             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
   1063     | PARSEOP_INDEXFIELD '('
   1064         error ')' '{' 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 LGreaterEqualTerm
   1096     : PARSEOP_LGREATEREQUAL '('     {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
   1097         TermArg
   1098         TermArgItem
   1099         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
   1100     | PARSEOP_LGREATEREQUAL '('
   1101         error ')'                   {$$ = AslDoError(); yyclearin;}
   1102     ;
   1103 
   1104 LGreaterTerm
   1105     : PARSEOP_LGREATER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
   1106         TermArg
   1107         TermArgItem
   1108         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1109     | PARSEOP_LGREATER '('
   1110         error ')'                   {$$ = AslDoError(); yyclearin;}
   1111     ;
   1112 
   1113 LLessEqualTerm
   1114     : PARSEOP_LLESSEQUAL '('        {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
   1115         TermArg
   1116         TermArgItem
   1117         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
   1118     | PARSEOP_LLESSEQUAL '('
   1119         error ')'                   {$$ = AslDoError(); yyclearin;}
   1120     ;
   1121 
   1122 LLessTerm
   1123     : PARSEOP_LLESS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
   1124         TermArg
   1125         TermArgItem
   1126         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1127     | PARSEOP_LLESS '('
   1128         error ')'                   {$$ = AslDoError(); yyclearin;}
   1129     ;
   1130 
   1131 LNotEqualTerm
   1132     : PARSEOP_LNOTEQUAL '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
   1133         TermArg
   1134         TermArgItem
   1135         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
   1136     | PARSEOP_LNOTEQUAL '('
   1137         error ')'                   {$$ = AslDoError(); yyclearin;}
   1138     ;
   1139 
   1140 LNotTerm
   1141     : PARSEOP_LNOT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
   1142         TermArg
   1143         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1144     | PARSEOP_LNOT '('
   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 LoadTerm
   1162     : PARSEOP_LOAD '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LOAD);}
   1163         NameString
   1164         RequiredTarget
   1165         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1166     | PARSEOP_LOAD '('
   1167         error ')'                   {$$ = AslDoError(); yyclearin;}
   1168     ;
   1169 
   1170 LocalTerm
   1171     : PARSEOP_LOCAL0                {$$ = TrCreateLeafNode (PARSEOP_LOCAL0);}
   1172     | PARSEOP_LOCAL1                {$$ = TrCreateLeafNode (PARSEOP_LOCAL1);}
   1173     | PARSEOP_LOCAL2                {$$ = TrCreateLeafNode (PARSEOP_LOCAL2);}
   1174     | PARSEOP_LOCAL3                {$$ = TrCreateLeafNode (PARSEOP_LOCAL3);}
   1175     | PARSEOP_LOCAL4                {$$ = TrCreateLeafNode (PARSEOP_LOCAL4);}
   1176     | PARSEOP_LOCAL5                {$$ = TrCreateLeafNode (PARSEOP_LOCAL5);}
   1177     | PARSEOP_LOCAL6                {$$ = TrCreateLeafNode (PARSEOP_LOCAL6);}
   1178     | PARSEOP_LOCAL7                {$$ = TrCreateLeafNode (PARSEOP_LOCAL7);}
   1179     ;
   1180 
   1181 LOrTerm
   1182     : PARSEOP_LOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
   1183         TermArg
   1184         TermArgItem
   1185         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1186     | PARSEOP_LOR '('
   1187         error ')'                   {$$ = AslDoError(); yyclearin;}
   1188     ;
   1189 
   1190 MatchTerm
   1191     : PARSEOP_MATCH '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MATCH);}
   1192         TermArg
   1193         ',' MatchOpKeyword
   1194         TermArgItem
   1195         ',' MatchOpKeyword
   1196         TermArgItem
   1197         TermArgItem
   1198         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$7,$9,$10,$11);}
   1199     | PARSEOP_MATCH '('
   1200         error ')'                   {$$ = AslDoError(); yyclearin;}
   1201     ;
   1202 
   1203 MethodTerm
   1204     : PARSEOP_METHOD  '('           {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
   1205         NameString
   1206         OptionalByteConstExpr       {UtCheckIntegerRange ($5, 0, 7);}
   1207         OptionalSerializeRuleKeyword
   1208         OptionalByteConstExpr
   1209         OptionalParameterTypePackage
   1210         OptionalParameterTypesPackage
   1211         ')' '{'
   1212             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$7,$8,$9,$10,$13);}
   1213     | PARSEOP_METHOD '('
   1214         error ')'                   {$$ = AslDoError(); yyclearin;}
   1215     ;
   1216 
   1217 MidTerm
   1218     : PARSEOP_MID '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MID);}
   1219         TermArg
   1220         TermArgItem
   1221         TermArgItem
   1222         Target
   1223         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
   1224     | PARSEOP_MID '('
   1225         error ')'                   {$$ = AslDoError(); yyclearin;}
   1226     ;
   1227 
   1228 ModTerm
   1229     : PARSEOP_MOD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
   1230         TermArg
   1231         TermArgItem
   1232         Target
   1233         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1234     | PARSEOP_MOD '('
   1235         error ')'                   {$$ = AslDoError(); yyclearin;}
   1236     ;
   1237 
   1238 MultiplyTerm
   1239     : PARSEOP_MULTIPLY '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
   1240         TermArg
   1241         TermArgItem
   1242         Target
   1243         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1244     | PARSEOP_MULTIPLY '('
   1245         error ')'                   {$$ = AslDoError(); yyclearin;}
   1246     ;
   1247 
   1248 MutexTerm
   1249     : PARSEOP_MUTEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MUTEX);}
   1250         NameString
   1251         ',' ByteConstExpr
   1252         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
   1253     | PARSEOP_MUTEX '('
   1254         error ')'                   {$$ = AslDoError(); yyclearin;}
   1255     ;
   1256 
   1257 NameTerm
   1258     : PARSEOP_NAME '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAME);}
   1259         NameString
   1260         ',' DataObject
   1261         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
   1262     | PARSEOP_NAME '('
   1263         error ')'                   {$$ = AslDoError(); yyclearin;}
   1264     ;
   1265 
   1266 NAndTerm
   1267     : PARSEOP_NAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAND);}
   1268         TermArg
   1269         TermArgItem
   1270         Target
   1271         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1272     | PARSEOP_NAND '('
   1273         error ')'                   {$$ = AslDoError(); yyclearin;}
   1274     ;
   1275 
   1276 NoOpTerm
   1277     : PARSEOP_NOOP                  {$$ = TrCreateNode (PARSEOP_NOOP, 0);}
   1278     ;
   1279 
   1280 NOrTerm
   1281     : PARSEOP_NOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOR);}
   1282         TermArg
   1283         TermArgItem
   1284         Target
   1285         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1286     | PARSEOP_NOR '('
   1287         error ')'                   {$$ = AslDoError(); yyclearin;}
   1288     ;
   1289 
   1290 NotifyTerm
   1291     : PARSEOP_NOTIFY '('            {$<n>$ = TrCreateLeafNode (PARSEOP_NOTIFY);}
   1292         SuperName
   1293         TermArgItem
   1294         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1295     | PARSEOP_NOTIFY '('
   1296         error ')'                   {$$ = AslDoError(); yyclearin;}
   1297     ;
   1298 
   1299 NotTerm
   1300     : PARSEOP_NOT '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
   1301         TermArg
   1302         Target
   1303         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1304     | PARSEOP_NOT '('
   1305         error ')'                   {$$ = AslDoError(); yyclearin;}
   1306     ;
   1307 
   1308 ObjectTypeTerm
   1309     : PARSEOP_OBJECTTYPE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE);}
   1310         ObjectTypeName
   1311         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1312     | PARSEOP_OBJECTTYPE '('
   1313         error ')'                   {$$ = AslDoError(); yyclearin;}
   1314     ;
   1315 
   1316 OffsetTerm
   1317     : PARSEOP_OFFSET '('
   1318         AmlPackageLengthTerm
   1319         ')'                         {$$ = TrCreateNode (PARSEOP_OFFSET,1,$3);}
   1320     | PARSEOP_OFFSET '('
   1321         error ')'                   {$$ = AslDoError(); yyclearin;}
   1322     ;
   1323 
   1324 OpRegionTerm
   1325     : PARSEOP_OPERATIONREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_OPERATIONREGION);}
   1326         NameString
   1327         ',' OpRegionSpaceIdTerm
   1328         TermArgItem
   1329         TermArgItem
   1330         ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8);}
   1331     | PARSEOP_OPERATIONREGION '('
   1332         error ')'                   {$$ = AslDoError(); yyclearin;}
   1333     ;
   1334 
   1335 OpRegionSpaceIdTerm
   1336     : RegionSpaceKeyword            {}
   1337     | ByteConst                     {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
   1338     ;
   1339 
   1340 OrTerm
   1341     : PARSEOP_OR '('                {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
   1342         TermArg
   1343         TermArgItem
   1344         Target
   1345         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1346     | PARSEOP_OR '('
   1347         error ')'                   {$$ = AslDoError(); yyclearin;}
   1348     ;
   1349 
   1350 PackageTerm
   1351     : PARSEOP_PACKAGE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_VAR_PACKAGE);}
   1352         VarPackageLengthTerm
   1353         ')' '{'
   1354             PackageList '}'         {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   1355     | PARSEOP_PACKAGE '('
   1356         error ')'                   {$$ = AslDoError(); yyclearin;}
   1357     ;
   1358 
   1359 PowerResTerm
   1360     : PARSEOP_POWERRESOURCE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_POWERRESOURCE);}
   1361         NameString
   1362         ',' ByteConstExpr
   1363         ',' WordConstExpr
   1364         ')' '{'
   1365             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$8,$11);}
   1366     | PARSEOP_POWERRESOURCE '('
   1367         error ')'                   {$$ = AslDoError(); yyclearin;}
   1368     ;
   1369 
   1370 PrintfTerm
   1371     : PARSEOP_PRINTF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_PRINTF);}
   1372         StringData
   1373         PrintfArgList
   1374         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1375     | PARSEOP_PRINTF '('
   1376         error ')'                   {$$ = AslDoError(); yyclearin;}
   1377     ;
   1378 
   1379 PrintfArgList
   1380     :                               {$$ = NULL;}
   1381     | TermArg                       {$$ = $1;}
   1382     | PrintfArgList ','
   1383        TermArg                      {$$ = TrLinkPeerNode ($1, $3);}
   1384     ;
   1385 
   1386 ProcessorTerm
   1387     : PARSEOP_PROCESSOR '('         {$<n>$ = TrCreateLeafNode (PARSEOP_PROCESSOR);}
   1388         NameString
   1389         ',' ByteConstExpr
   1390         OptionalDWordConstExpr
   1391         OptionalByteConstExpr
   1392         ')' '{'
   1393             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,5,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8,$11);}
   1394     | PARSEOP_PROCESSOR '('
   1395         error ')'                   {$$ = AslDoError(); yyclearin;}
   1396     ;
   1397 
   1398 RawDataBufferTerm
   1399     : PARSEOP_DATABUFFER  '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DATABUFFER);}
   1400         OptionalWordConst
   1401         ')' '{'
   1402             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   1403     | PARSEOP_DATABUFFER '('
   1404         error ')'                   {$$ = AslDoError(); yyclearin;}
   1405     ;
   1406 
   1407 /*
   1408  * In RefOf, the node isn't really a target, but we can't keep track of it after
   1409  * we've taken a pointer to it. (hard to tell if a local becomes initialized this way.)
   1410  */
   1411 RefOfTerm
   1412     : PARSEOP_REFOF '('             {$<n>$ = TrCreateLeafNode (PARSEOP_REFOF);}
   1413         SuperName
   1414         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_TARGET));}
   1415     | PARSEOP_REFOF '('
   1416         error ')'                   {$$ = AslDoError(); yyclearin;}
   1417     ;
   1418 
   1419 ReleaseTerm
   1420     : PARSEOP_RELEASE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_RELEASE);}
   1421         SuperName
   1422         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1423     | PARSEOP_RELEASE '('
   1424         error ')'                   {$$ = AslDoError(); yyclearin;}
   1425     ;
   1426 
   1427 ResetTerm
   1428     : PARSEOP_RESET '('             {$<n>$ = TrCreateLeafNode (PARSEOP_RESET);}
   1429         SuperName
   1430         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1431     | PARSEOP_RESET '('
   1432         error ')'                   {$$ = AslDoError(); yyclearin;}
   1433     ;
   1434 
   1435 ReturnTerm
   1436     : PARSEOP_RETURN '('            {$<n>$ = TrCreateLeafNode (PARSEOP_RETURN);}
   1437         OptionalReturnArg
   1438         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1439     | PARSEOP_RETURN                {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),1,TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN));}
   1440     | PARSEOP_RETURN '('
   1441         error ')'                   {$$ = AslDoError(); yyclearin;}
   1442     ;
   1443 
   1444 ScopeTerm
   1445     : PARSEOP_SCOPE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
   1446         NameString
   1447         ')' '{'
   1448             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
   1449     | PARSEOP_SCOPE '('
   1450         error ')'                   {$$ = AslDoError(); yyclearin;}
   1451     ;
   1452 
   1453 ShiftLeftTerm
   1454     : PARSEOP_SHIFTLEFT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
   1455         TermArg
   1456         TermArgItem
   1457         Target
   1458         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1459     | PARSEOP_SHIFTLEFT '('
   1460         error ')'                   {$$ = AslDoError(); yyclearin;}
   1461     ;
   1462 
   1463 ShiftRightTerm
   1464     : PARSEOP_SHIFTRIGHT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
   1465         TermArg
   1466         TermArgItem
   1467         Target
   1468         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1469     | PARSEOP_SHIFTRIGHT '('
   1470         error ')'                   {$$ = AslDoError(); yyclearin;}
   1471     ;
   1472 
   1473 SignalTerm
   1474     : PARSEOP_SIGNAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIGNAL);}
   1475         SuperName
   1476         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1477     | PARSEOP_SIGNAL '('
   1478         error ')'                   {$$ = AslDoError(); yyclearin;}
   1479     ;
   1480 
   1481 SizeOfTerm
   1482     : PARSEOP_SIZEOF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIZEOF);}
   1483         SuperName
   1484         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1485     | PARSEOP_SIZEOF '('
   1486         error ')'                   {$$ = AslDoError(); yyclearin;}
   1487     ;
   1488 
   1489 SleepTerm
   1490     : PARSEOP_SLEEP '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SLEEP);}
   1491         TermArg
   1492         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1493     | PARSEOP_SLEEP '('
   1494         error ')'                   {$$ = AslDoError(); yyclearin;}
   1495     ;
   1496 
   1497 StallTerm
   1498     : PARSEOP_STALL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STALL);}
   1499         TermArg
   1500         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1501     | PARSEOP_STALL '('
   1502         error ')'                   {$$ = AslDoError(); yyclearin;}
   1503     ;
   1504 
   1505 StoreTerm
   1506     : PARSEOP_STORE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STORE);}
   1507         TermArg
   1508         ',' SuperName
   1509         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
   1510     | PARSEOP_STORE '('
   1511         error ')'                   {$$ = AslDoError(); yyclearin;}
   1512     ;
   1513 
   1514 SubtractTerm
   1515     : PARSEOP_SUBTRACT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
   1516         TermArg
   1517         TermArgItem
   1518         Target
   1519         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1520     | PARSEOP_SUBTRACT '('
   1521         error ')'                   {$$ = AslDoError(); yyclearin;}
   1522     ;
   1523 SwitchTerm
   1524     : PARSEOP_SWITCH '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SWITCH);}
   1525         TermArg
   1526         ')' '{'
   1527             CaseDefaultTermList '}'
   1528                                     {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   1529     | PARSEOP_SWITCH '('
   1530         error ')'                   {$$ = AslDoError(); yyclearin;}
   1531     ;
   1532 
   1533 ThermalZoneTerm
   1534     : PARSEOP_THERMALZONE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
   1535         NameString
   1536         ')' '{'
   1537             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
   1538     | PARSEOP_THERMALZONE '('
   1539         error ')'                   {$$ = AslDoError(); yyclearin;}
   1540     ;
   1541 
   1542 TimerTerm
   1543     : PARSEOP_TIMER '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TIMER);}
   1544         ')'                         {$$ = TrLinkChildren ($<n>3,0);}
   1545     | PARSEOP_TIMER                 {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_TIMER),0);}
   1546     | PARSEOP_TIMER '('
   1547         error ')'                   {$$ = AslDoError(); yyclearin;}
   1548     ;
   1549 
   1550 ToBCDTerm
   1551     : PARSEOP_TOBCD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOBCD);}
   1552         TermArg
   1553         Target
   1554         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1555     | PARSEOP_TOBCD '('
   1556         error ')'                   {$$ = AslDoError(); yyclearin;}
   1557     ;
   1558 
   1559 ToBufferTerm
   1560     : PARSEOP_TOBUFFER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOBUFFER);}
   1561         TermArg
   1562         Target
   1563         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1564     | PARSEOP_TOBUFFER '('
   1565         error ')'                   {$$ = AslDoError(); yyclearin;}
   1566     ;
   1567 
   1568 ToDecimalStringTerm
   1569     : PARSEOP_TODECIMALSTRING '('   {$<n>$ = TrCreateLeafNode (PARSEOP_TODECIMALSTRING);}
   1570         TermArg
   1571         Target
   1572         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1573     | PARSEOP_TODECIMALSTRING '('
   1574         error ')'                   {$$ = AslDoError(); yyclearin;}
   1575     ;
   1576 
   1577 ToHexStringTerm
   1578     : PARSEOP_TOHEXSTRING '('       {$<n>$ = TrCreateLeafNode (PARSEOP_TOHEXSTRING);}
   1579         TermArg
   1580         Target
   1581         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1582     | PARSEOP_TOHEXSTRING '('
   1583         error ')'                   {$$ = AslDoError(); yyclearin;}
   1584     ;
   1585 
   1586 ToIntegerTerm
   1587     : PARSEOP_TOINTEGER '('         {$<n>$ = TrCreateLeafNode (PARSEOP_TOINTEGER);}
   1588         TermArg
   1589         Target
   1590         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1591     | PARSEOP_TOINTEGER '('
   1592         error ')'                   {$$ = AslDoError(); yyclearin;}
   1593     ;
   1594 
   1595 ToPLDTerm
   1596     : PARSEOP_TOPLD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOPLD);}
   1597         PldKeywordList
   1598         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1599     | PARSEOP_TOPLD '('
   1600         error ')'                   {$$ = AslDoError(); yyclearin;}
   1601     ;
   1602 
   1603 PldKeywordList
   1604     :                               {$$ = NULL;}
   1605     | PldKeyword
   1606         PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkChildren ($1,1,$3);}
   1607     | PldKeyword
   1608         PARSEOP_EXP_EQUALS String   {$$ = TrLinkChildren ($1,1,$3);}
   1609     | PldKeywordList ','            /* Allows a trailing comma at list end */
   1610     | PldKeywordList ','
   1611         PldKeyword
   1612         PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
   1613     | PldKeywordList ','
   1614         PldKeyword
   1615         PARSEOP_EXP_EQUALS String   {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
   1616     ;
   1617 
   1618 
   1619 ToStringTerm
   1620     : PARSEOP_TOSTRING '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOSTRING);}
   1621         TermArg
   1622         OptionalCount
   1623         Target
   1624         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1625     | PARSEOP_TOSTRING '('
   1626         error ')'                   {$$ = AslDoError(); yyclearin;}
   1627     ;
   1628 
   1629 ToUUIDTerm
   1630     : PARSEOP_TOUUID '('
   1631         StringData ')'              {$$ = TrUpdateNode (PARSEOP_TOUUID, $3);}
   1632     | PARSEOP_TOUUID '('
   1633         error ')'                   {$$ = AslDoError(); yyclearin;}
   1634     ;
   1635 
   1636 UnicodeTerm
   1637     : PARSEOP_UNICODE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_UNICODE);}
   1638         StringData
   1639         ')'                         {$$ = TrLinkChildren ($<n>3,2,0,$4);}
   1640     | PARSEOP_UNICODE '('
   1641         error ')'                   {$$ = AslDoError(); yyclearin;}
   1642     ;
   1643 
   1644 UnloadTerm
   1645     : PARSEOP_UNLOAD '('            {$<n>$ = TrCreateLeafNode (PARSEOP_UNLOAD);}
   1646         SuperName
   1647         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1648     | PARSEOP_UNLOAD '('
   1649         error ')'                   {$$ = AslDoError(); yyclearin;}
   1650     ;
   1651 
   1652 WaitTerm
   1653     : PARSEOP_WAIT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_WAIT);}
   1654         SuperName
   1655         TermArgItem
   1656         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1657     | PARSEOP_WAIT '('
   1658         error ')'                   {$$ = AslDoError(); yyclearin;}
   1659     ;
   1660 
   1661 XOrTerm
   1662     : PARSEOP_XOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
   1663         TermArg
   1664         TermArgItem
   1665         Target
   1666         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1667     | PARSEOP_XOR '('
   1668         error ')'                   {$$ = AslDoError(); yyclearin;}
   1669     ;
   1670 
   1671 WhileTerm
   1672     : PARSEOP_WHILE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
   1673         TermArg
   1674         ')' '{' TermList '}'
   1675                                     {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   1676     | PARSEOP_WHILE '('
   1677         error ')'                   {$$ = AslDoError(); yyclearin;}
   1678     ;
   1679 
   1680 
   1681 /*******************************************************************************
   1682  *
   1683  * ASL Helper Terms
   1684  *
   1685  ******************************************************************************/
   1686 
   1687 AmlPackageLengthTerm
   1688     : Integer                       {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,(ACPI_PARSE_OBJECT *) $1);}
   1689     ;
   1690 
   1691 NameStringItem
   1692     : ',' NameString                {$$ = $2;}
   1693     | ',' error                     {$$ = AslDoError (); yyclearin;}
   1694     ;
   1695 
   1696 TermArgItem
   1697     : ',' TermArg                   {$$ = $2;}
   1698     | ',' error                     {$$ = AslDoError (); yyclearin;}
   1699     ;
   1700 
   1701 OptionalReference
   1702     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
   1703     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
   1704     | ',' TermArg                   {$$ = $2;}
   1705     ;
   1706 
   1707 OptionalReturnArg
   1708     :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
   1709     | TermArg                       {$$ = $1;}
   1710     ;
   1711 
   1712 OptionalSerializeRuleKeyword
   1713     :                               {$$ = NULL;}
   1714     | ','                           {$$ = NULL;}
   1715     | ',' SerializeRuleKeyword      {$$ = $2;}
   1716     ;
   1717 
   1718 OptionalTermArg
   1719     :                               {$$ = NULL;}
   1720     | TermArg                       {$$ = $1;}
   1721     ;
   1722 
   1723 OptionalWordConst
   1724     :                               {$$ = NULL;}
   1725     | WordConst                     {$$ = $1;}
   1726     ;
   1727