1271440SjkimNoEcho('
2271440Sjkim/******************************************************************************
3271440Sjkim *
4306536Sjkim * Module Name: aslrules.y - Main Bison/Yacc production rules
5271440Sjkim *
6271440Sjkim *****************************************************************************/
7271440Sjkim
8271440Sjkim/*
9306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp.
10271440Sjkim * All rights reserved.
11271440Sjkim *
12271440Sjkim * Redistribution and use in source and binary forms, with or without
13271440Sjkim * modification, are permitted provided that the following conditions
14271440Sjkim * are met:
15271440Sjkim * 1. Redistributions of source code must retain the above copyright
16271440Sjkim *    notice, this list of conditions, and the following disclaimer,
17271440Sjkim *    without modification.
18271440Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19271440Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
20271440Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
21271440Sjkim *    including a substantially similar Disclaimer requirement for further
22271440Sjkim *    binary redistribution.
23271440Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
24271440Sjkim *    of any contributors may be used to endorse or promote products derived
25271440Sjkim *    from this software without specific prior written permission.
26271440Sjkim *
27271440Sjkim * Alternatively, this software may be distributed under the terms of the
28271440Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
29271440Sjkim * Software Foundation.
30271440Sjkim *
31271440Sjkim * NO WARRANTY
32271440Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33271440Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34271440Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35271440Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36271440Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37271440Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38271440Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39271440Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40271440Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41271440Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42271440Sjkim * POSSIBILITY OF SUCH DAMAGES.
43271440Sjkim */
44271440Sjkim
45271440Sjkim')
46271440Sjkim
47271440Sjkim/*******************************************************************************
48271440Sjkim *
49306536Sjkim * ASL Root and Secondary Terms
50271440Sjkim *
51271440Sjkim ******************************************************************************/
52271440Sjkim
53271440Sjkim/*
54306536Sjkim * Root term. Allow multiple #line directives before the definition block
55271440Sjkim * to handle output from preprocessors
56271440Sjkim */
57306536SjkimAslCode
58306536Sjkim    : DefinitionBlockList           {$<n>$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_ASL_CODE),1, $1);}
59271440Sjkim    | error                         {YYABORT; $$ = NULL;}
60271440Sjkim    ;
61271440Sjkim
62271440Sjkim
63271440Sjkim/*
64271440Sjkim * Note concerning support for "module-level code".
65271440Sjkim *
66271440Sjkim * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
67271440Sjkim * methods (the so-called module-level code.) This support was explicitly
68271440Sjkim * removed in ACPI 2.0, but this type of code continues to be created by
69271440Sjkim * BIOS vendors. In order to support the disassembly and recompilation of
70271440Sjkim * such code (and the porting of ASL code to iASL), iASL supports this
71271440Sjkim * code in violation of the current ACPI specification.
72271440Sjkim *
73271440Sjkim * The grammar change to support module-level code is to revert the
74271440Sjkim * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
75271440Sjkim * original use of {TermList} instead (see below.) This allows the use
76271440Sjkim * of Type1 and Type2 opcodes at module level.
77306536Sjkim *
78306536Sjkim * 04/2016: The module-level code is now allowed in the following terms:
79306536Sjkim * DeviceTerm, PowerResTerm, ProcessorTerm, ScopeTerm, ThermalZoneTerm.
80306536Sjkim * The ObjectList term is obsolete and has been removed.
81271440Sjkim */
82271440SjkimDefinitionBlockTerm
83306536Sjkim    : PARSEOP_DEFINITION_BLOCK '('  {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITION_BLOCK);}
84271440Sjkim        String ','
85271440Sjkim        String ','
86271440Sjkim        ByteConst ','
87271440Sjkim        String ','
88271440Sjkim        String ','
89271440Sjkim        DWordConst
90271440Sjkim        ')'                         {TrSetEndLineNumber ($<n>3);}
91271440Sjkim            '{' TermList '}'        {$$ = TrLinkChildren ($<n>3,7,$4,$6,$8,$10,$12,$14,$18);}
92271440Sjkim    ;
93271440Sjkim
94306536SjkimDefinitionBlockList
95306536Sjkim    : DefinitionBlockTerm
96306536Sjkim    | DefinitionBlockTerm
97306536Sjkim        DefinitionBlockList         {$$ = TrLinkPeerNodes (2, $1,$2);}
98306536Sjkim    ;
99281075Sdim
100306536SjkimSuperName
101306536Sjkim    : NameString                    {}
102306536Sjkim    | ArgTerm                       {}
103306536Sjkim    | LocalTerm                     {}
104306536Sjkim    | DebugTerm                     {}
105306536Sjkim    | Type6Opcode                   {}
106281075Sdim
107306536SjkimTarget
108306536Sjkim    :                               {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
109306536Sjkim    | ','                           {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
110306536Sjkim    | ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
111306536Sjkim    ;
112281075Sdim
113306536SjkimTermArg
114306536Sjkim    : Type2Opcode                   {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
115306536Sjkim    | DataObject                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
116306536Sjkim    | NameString                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
117306536Sjkim    | ArgTerm                       {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
118306536Sjkim    | LocalTerm                     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
119306536Sjkim    ;
120281075Sdim
121306536Sjkim/*
122306536Sjkim NOTE: Removed from TermArg due to reduce/reduce conflicts:
123306536Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
124306536Sjkim    | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
125306536Sjkim    | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
126306536Sjkim    | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
127281075Sdim
128306536Sjkim*/
129281075Sdim
130306536SjkimMethodInvocationTerm
131306536Sjkim    : NameString '('                {TrUpdateNode (PARSEOP_METHODCALL, $1);}
132306536Sjkim        ArgList ')'                 {$$ = TrLinkChildNode ($1,$4);}
133306536Sjkim    ;
134281075Sdim
135306536Sjkim/* OptionalCount must appear before ByteList or an incorrect reduction will result */
136281075Sdim
137306536SjkimOptionalCount
138306536Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
139306536Sjkim    | ','                           {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
140306536Sjkim    | ',' TermArg                   {$$ = $2;}
141306536Sjkim    ;
142281075Sdim
143306536SjkimVarPackageLengthTerm
144306536Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
145306536Sjkim    | TermArg                       {$$ = $1;}
146306536Sjkim    ;
147281075Sdim
148281075Sdim
149306536Sjkim/******* List Terms **************************************************/
150306536Sjkim
151306536SjkimArgList
152306536Sjkim    :                               {$$ = NULL;}
153306536Sjkim    | TermArg
154306536Sjkim    | ArgList ','                   /* Allows a trailing comma at list end */
155306536Sjkim    | ArgList ','
156306536Sjkim        TermArg                     {$$ = TrLinkPeerNode ($1,$3);}
157281075Sdim    ;
158281075Sdim
159306536SjkimByteList
160306536Sjkim    :                               {$$ = NULL;}
161306536Sjkim    | ByteConstExpr
162306536Sjkim    | ByteList ','                  /* Allows a trailing comma at list end */
163306536Sjkim    | ByteList ','
164306536Sjkim        ByteConstExpr               {$$ = TrLinkPeerNode ($1,$3);}
165306536Sjkim    ;
166281075Sdim
167306536SjkimDWordList
168306536Sjkim    :                               {$$ = NULL;}
169306536Sjkim    | DWordConstExpr
170306536Sjkim    | DWordList ','                 /* Allows a trailing comma at list end */
171306536Sjkim    | DWordList ','
172306536Sjkim        DWordConstExpr              {$$ = TrLinkPeerNode ($1,$3);}
173306536Sjkim    ;
174281075Sdim
175306536SjkimFieldUnitList
176306536Sjkim    :                               {$$ = NULL;}
177306536Sjkim    | FieldUnit
178306536Sjkim    | FieldUnitList ','             /* Allows a trailing comma at list end */
179306536Sjkim    | FieldUnitList ','
180306536Sjkim        FieldUnit                   {$$ = TrLinkPeerNode ($1,$3);}
181306536Sjkim    ;
182281075Sdim
183306536SjkimFieldUnit
184306536Sjkim    : FieldUnitEntry                {}
185306536Sjkim    | OffsetTerm                    {}
186306536Sjkim    | AccessAsTerm                  {}
187306536Sjkim    | ConnectionTerm                {}
188306536Sjkim    ;
189281075Sdim
190306536SjkimFieldUnitEntry
191306536Sjkim    : ',' AmlPackageLengthTerm      {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);}
192306536Sjkim    | NameSeg ','
193306536Sjkim        AmlPackageLengthTerm        {$$ = TrLinkChildNode ($1,$3);}
194306536Sjkim    ;
195281075Sdim
196306536SjkimObject
197306536Sjkim    : CompilerDirective             {}
198306536Sjkim    | NamedObject                   {}
199306536Sjkim    | NameSpaceModifier             {}
200306536Sjkim    ;
201281075Sdim
202306536SjkimPackageList
203306536Sjkim    :                               {$$ = NULL;}
204306536Sjkim    | PackageElement
205306536Sjkim    | PackageList ','               /* Allows a trailing comma at list end */
206306536Sjkim    | PackageList ','
207306536Sjkim        PackageElement              {$$ = TrLinkPeerNode ($1,$3);}
208306536Sjkim    ;
209281075Sdim
210306536SjkimPackageElement
211306536Sjkim    : DataObject                    {}
212306536Sjkim    | NameString                    {}
213306536Sjkim    ;
214281075Sdim
215306536Sjkim    /* Rules for specifying the type of one method argument or return value */
216281075Sdim
217306536SjkimParameterTypePackage
218306536Sjkim    :                               {$$ = NULL;}
219306536Sjkim    | ObjectTypeKeyword             {$$ = $1;}
220306536Sjkim    | ParameterTypePackage ','
221306536Sjkim        ObjectTypeKeyword           {$$ = TrLinkPeerNodes (2,$1,$3);}
222306536Sjkim    ;
223281075Sdim
224306536SjkimParameterTypePackageList
225306536Sjkim    :                               {$$ = NULL;}
226306536Sjkim    | ObjectTypeKeyword             {$$ = $1;}
227306536Sjkim    | '{' ParameterTypePackage '}'  {$$ = $2;}
228306536Sjkim    ;
229281075Sdim
230306536SjkimOptionalParameterTypePackage
231306536Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
232306536Sjkim    | ',' ParameterTypePackageList  {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
233306536Sjkim    ;
234281075Sdim
235306536Sjkim    /* Rules for specifying the types for method arguments */
236306536Sjkim
237306536SjkimParameterTypesPackage
238306536Sjkim    : ParameterTypePackageList      {$$ = $1;}
239306536Sjkim    | ParameterTypesPackage ','
240306536Sjkim        ParameterTypePackageList    {$$ = TrLinkPeerNodes (2,$1,$3);}
241281075Sdim    ;
242281075Sdim
243306536SjkimParameterTypesPackageList
244306536Sjkim    :                               {$$ = NULL;}
245306536Sjkim    | ObjectTypeKeyword             {$$ = $1;}
246306536Sjkim    | '{' ParameterTypesPackage '}' {$$ = $2;}
247306536Sjkim    ;
248281075Sdim
249306536SjkimOptionalParameterTypesPackage
250306536Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
251306536Sjkim    | ',' ParameterTypesPackageList {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
252306536Sjkim    ;
253271440Sjkim
254306536Sjkim    /* ACPI 3.0 -- allow semicolons between terms */
255306536Sjkim
256271440SjkimTermList
257271440Sjkim    :                               {$$ = NULL;}
258271440Sjkim    | TermList Term                 {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
259271440Sjkim    | TermList Term ';'             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
260271440Sjkim    | TermList ';' Term             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
261271440Sjkim    | TermList ';' Term ';'         {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
262271440Sjkim    ;
263271440Sjkim
264271440SjkimTerm
265271440Sjkim    : Object                        {}
266271440Sjkim    | Type1Opcode                   {}
267271440Sjkim    | Type2Opcode                   {}
268281687Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
269281687Sjkim    | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
270271440Sjkim    | Type2BufferOpcode             {}
271271440Sjkim    | Type2BufferOrStringOpcode     {}
272271440Sjkim    | error                         {$$ = AslDoError(); yyclearin;}
273271440Sjkim    ;
274271440Sjkim
275306536Sjkim/*
276306536Sjkim * Case-Default list; allow only one Default term and unlimited Case terms
277306536Sjkim */
278306536SjkimCaseDefaultTermList
279306536Sjkim    :                               {$$ = NULL;}
280306536Sjkim    | CaseTerm  {}
281306536Sjkim    | DefaultTerm   {}
282306536Sjkim    | CaseDefaultTermList
283306536Sjkim        CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
284306536Sjkim    | CaseDefaultTermList
285306536Sjkim        DefaultTerm                 {$$ = TrLinkPeerNode ($1,$2);}
286271440Sjkim
287306536Sjkim/* Original - attempts to force zero or one default term within the switch */
288306536Sjkim
289306536Sjkim/*
290306536SjkimCaseDefaultTermList
291271440Sjkim    :                               {$$ = NULL;}
292306536Sjkim    | CaseTermList
293306536Sjkim        DefaultTerm
294306536Sjkim        CaseTermList                {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));}
295306536Sjkim    | CaseTermList
296306536Sjkim        CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
297271440Sjkim    ;
298271440Sjkim
299306536SjkimCaseTermList
300306536Sjkim    :                               {$$ = NULL;}
301306536Sjkim    | CaseTerm                      {}
302306536Sjkim    | CaseTermList
303306536Sjkim        CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
304271440Sjkim    ;
305306536Sjkim*/
306271440Sjkim
307306536Sjkim
308306536Sjkim/*******************************************************************************
309306536Sjkim *
310306536Sjkim * ASL Data and Constant Terms
311306536Sjkim *
312306536Sjkim ******************************************************************************/
313306536Sjkim
314271440SjkimDataObject
315271440Sjkim    : BufferData                    {}
316271440Sjkim    | PackageData                   {}
317271440Sjkim    | IntegerData                   {}
318271440Sjkim    | StringData                    {}
319271440Sjkim    ;
320271440Sjkim
321271440SjkimBufferData
322271440Sjkim    : Type5Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
323271440Sjkim    | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
324271440Sjkim    | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
325271440Sjkim    | BufferTerm                    {}
326271440Sjkim    ;
327271440Sjkim
328271440SjkimPackageData
329271440Sjkim    : PackageTerm                   {}
330271440Sjkim    ;
331271440Sjkim
332271440SjkimIntegerData
333271440Sjkim    : Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
334271440Sjkim    | Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
335271440Sjkim    | Integer                       {}
336271440Sjkim    | ConstTerm                     {}
337271440Sjkim    ;
338271440Sjkim
339271440SjkimStringData
340271440Sjkim    : Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
341271440Sjkim    | String                        {}
342271440Sjkim    ;
343271440Sjkim
344306536SjkimByteConst
345306536Sjkim    : Integer                       {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
346306536Sjkim    ;
347306536Sjkim
348306536SjkimWordConst
349306536Sjkim    : Integer                       {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
350306536Sjkim    ;
351306536Sjkim
352306536SjkimDWordConst
353306536Sjkim    : Integer                       {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
354306536Sjkim    ;
355306536Sjkim
356306536SjkimQWordConst
357306536Sjkim    : Integer                       {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
358306536Sjkim    ;
359306536Sjkim
360306536Sjkim/*
361306536Sjkim * The NODE_COMPILE_TIME_CONST flag in the following constant expressions
362306536Sjkim * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes
363306536Sjkim * to simple integers. It is an error if these types of expressions cannot be
364306536Sjkim * reduced, since the AML grammar for ****ConstExpr requires a simple constant.
365306536Sjkim * Note: The required byte length of the constant is passed through to the
366306536Sjkim * constant folding code in the node AmlLength field.
367306536Sjkim */
368306536SjkimByteConstExpr
369306536Sjkim    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
370306536Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
371306536Sjkim    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
372306536Sjkim    | ByteConst                     {}
373306536Sjkim    ;
374306536Sjkim
375306536SjkimWordConstExpr
376306536Sjkim    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
377306536Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
378306536Sjkim    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
379306536Sjkim    | WordConst                     {}
380306536Sjkim    ;
381306536Sjkim
382306536SjkimDWordConstExpr
383306536Sjkim    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
384306536Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
385306536Sjkim    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
386306536Sjkim    | DWordConst                    {}
387306536Sjkim    ;
388306536Sjkim
389306536SjkimQWordConstExpr
390306536Sjkim    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
391306536Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
392306536Sjkim    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
393306536Sjkim    | QWordConst                    {}
394306536Sjkim    ;
395306536Sjkim
396306536SjkimConstTerm
397306536Sjkim    : ConstExprTerm                 {}
398306536Sjkim    | PARSEOP_REVISION              {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
399306536Sjkim    ;
400306536Sjkim
401306536SjkimConstExprTerm
402306536Sjkim    : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
403306536Sjkim    | PARSEOP_ONE                   {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
404306536Sjkim    | PARSEOP_ONES                  {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
405306536Sjkim    | PARSEOP___DATE__              {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
406306536Sjkim    | PARSEOP___FILE__              {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
407306536Sjkim    | PARSEOP___LINE__              {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
408306536Sjkim    | PARSEOP___PATH__              {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);}
409306536Sjkim    ;
410306536Sjkim
411306536SjkimInteger
412306536Sjkim    : PARSEOP_INTEGER               {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, AslCompilerlval.i);}
413306536Sjkim    ;
414306536Sjkim
415306536SjkimString
416306536Sjkim    : PARSEOP_STRING_LITERAL        {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, (ACPI_NATIVE_INT) AslCompilerlval.s);}
417306536Sjkim    ;
418306536Sjkim
419306536Sjkim
420306536Sjkim/*******************************************************************************
421306536Sjkim *
422306536Sjkim * ASL Opcode Terms
423306536Sjkim *
424306536Sjkim ******************************************************************************/
425306536Sjkim
426306536SjkimCompilerDirective
427306536Sjkim    : IncludeTerm                   {}
428306536Sjkim    | IncludeEndTerm                {}
429306536Sjkim    | ExternalTerm                  {}
430306536Sjkim    ;
431306536Sjkim
432271440SjkimNamedObject
433271440Sjkim    : BankFieldTerm                 {}
434271440Sjkim    | CreateBitFieldTerm            {}
435271440Sjkim    | CreateByteFieldTerm           {}
436271440Sjkim    | CreateDWordFieldTerm          {}
437271440Sjkim    | CreateFieldTerm               {}
438271440Sjkim    | CreateQWordFieldTerm          {}
439271440Sjkim    | CreateWordFieldTerm           {}
440271440Sjkim    | DataRegionTerm                {}
441271440Sjkim    | DeviceTerm                    {}
442271440Sjkim    | EventTerm                     {}
443271440Sjkim    | FieldTerm                     {}
444271440Sjkim    | FunctionTerm                  {}
445271440Sjkim    | IndexFieldTerm                {}
446271440Sjkim    | MethodTerm                    {}
447271440Sjkim    | MutexTerm                     {}
448271440Sjkim    | OpRegionTerm                  {}
449271440Sjkim    | PowerResTerm                  {}
450271440Sjkim    | ProcessorTerm                 {}
451271440Sjkim    | ThermalZoneTerm               {}
452271440Sjkim    ;
453271440Sjkim
454271440SjkimNameSpaceModifier
455271440Sjkim    : AliasTerm                     {}
456271440Sjkim    | NameTerm                      {}
457271440Sjkim    | ScopeTerm                     {}
458271440Sjkim    ;
459271440Sjkim
460306536Sjkim/* For ObjectType: SuperName except for MethodInvocationTerm */
461271440Sjkim
462306536SjkimObjectTypeName
463306536Sjkim    : NameString                    {}
464306536Sjkim    | ArgTerm                       {}
465306536Sjkim    | LocalTerm                     {}
466306536Sjkim    | DebugTerm                     {}
467306536Sjkim    | RefOfTerm                     {}
468306536Sjkim    | DerefOfTerm                   {}
469306536Sjkim    | IndexTerm                     {}
470306536Sjkim/*    | MethodInvocationTerm          {} */  /* Caused reduce/reduce with Type6Opcode->MethodInvocationTerm */
471271440Sjkim    ;
472271440Sjkim
473271440SjkimRequiredTarget
474271440Sjkim    : ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
475271440Sjkim    ;
476271440Sjkim
477271440SjkimSimpleTarget
478271440Sjkim    : NameString                    {}
479271440Sjkim    | LocalTerm                     {}
480271440Sjkim    | ArgTerm                       {}
481271440Sjkim    ;
482271440Sjkim
483271440Sjkim/* Opcode types */
484271440Sjkim
485271440SjkimType1Opcode
486271440Sjkim    : BreakTerm                     {}
487271440Sjkim    | BreakPointTerm                {}
488271440Sjkim    | ContinueTerm                  {}
489271440Sjkim    | FatalTerm                     {}
490306536Sjkim    | ForTerm                       {}
491306536Sjkim    | ElseIfTerm                    {}
492271440Sjkim    | LoadTerm                      {}
493271440Sjkim    | NoOpTerm                      {}
494271440Sjkim    | NotifyTerm                    {}
495271440Sjkim    | ReleaseTerm                   {}
496271440Sjkim    | ResetTerm                     {}
497271440Sjkim    | ReturnTerm                    {}
498271440Sjkim    | SignalTerm                    {}
499271440Sjkim    | SleepTerm                     {}
500271440Sjkim    | StallTerm                     {}
501271440Sjkim    | SwitchTerm                    {}
502271440Sjkim    | UnloadTerm                    {}
503271440Sjkim    | WhileTerm                     {}
504271440Sjkim    ;
505271440Sjkim
506271440SjkimType2Opcode
507271440Sjkim    : AcquireTerm                   {}
508271440Sjkim    | CondRefOfTerm                 {}
509271440Sjkim    | CopyObjectTerm                {}
510271440Sjkim    | DerefOfTerm                   {}
511271440Sjkim    | ObjectTypeTerm                {}
512271440Sjkim    | RefOfTerm                     {}
513271440Sjkim    | SizeOfTerm                    {}
514271440Sjkim    | StoreTerm                     {}
515281075Sdim    | EqualsTerm                    {}
516271440Sjkim    | TimerTerm                     {}
517271440Sjkim    | WaitTerm                      {}
518281687Sjkim    | MethodInvocationTerm          {}
519271440Sjkim    ;
520271440Sjkim
521271440Sjkim/*
522271440Sjkim * Type 3/4/5 opcodes
523271440Sjkim */
524271440SjkimType2IntegerOpcode                  /* "Type3" opcodes */
525281687Sjkim    : Expression                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
526281687Sjkim    | AddTerm                       {}
527271440Sjkim    | AndTerm                       {}
528271440Sjkim    | DecTerm                       {}
529271440Sjkim    | DivideTerm                    {}
530271440Sjkim    | FindSetLeftBitTerm            {}
531271440Sjkim    | FindSetRightBitTerm           {}
532271440Sjkim    | FromBCDTerm                   {}
533271440Sjkim    | IncTerm                       {}
534271440Sjkim    | IndexTerm                     {}
535271440Sjkim    | LAndTerm                      {}
536271440Sjkim    | LEqualTerm                    {}
537271440Sjkim    | LGreaterTerm                  {}
538271440Sjkim    | LGreaterEqualTerm             {}
539271440Sjkim    | LLessTerm                     {}
540271440Sjkim    | LLessEqualTerm                {}
541271440Sjkim    | LNotTerm                      {}
542271440Sjkim    | LNotEqualTerm                 {}
543271440Sjkim    | LoadTableTerm                 {}
544271440Sjkim    | LOrTerm                       {}
545271440Sjkim    | MatchTerm                     {}
546271440Sjkim    | ModTerm                       {}
547271440Sjkim    | MultiplyTerm                  {}
548271440Sjkim    | NAndTerm                      {}
549271440Sjkim    | NOrTerm                       {}
550271440Sjkim    | NotTerm                       {}
551271440Sjkim    | OrTerm                        {}
552271440Sjkim    | ShiftLeftTerm                 {}
553271440Sjkim    | ShiftRightTerm                {}
554271440Sjkim    | SubtractTerm                  {}
555271440Sjkim    | ToBCDTerm                     {}
556271440Sjkim    | ToIntegerTerm                 {}
557271440Sjkim    | XOrTerm                       {}
558271440Sjkim    ;
559271440Sjkim
560271440SjkimType2StringOpcode                   /* "Type4" Opcodes */
561271440Sjkim    : ToDecimalStringTerm           {}
562271440Sjkim    | ToHexStringTerm               {}
563271440Sjkim    | ToStringTerm                  {}
564271440Sjkim    ;
565271440Sjkim
566271440SjkimType2BufferOpcode                   /* "Type5" Opcodes */
567271440Sjkim    : ToBufferTerm                  {}
568271440Sjkim    | ConcatResTerm                 {}
569271440Sjkim    ;
570271440Sjkim
571271440SjkimType2BufferOrStringOpcode
572281687Sjkim    : ConcatTerm                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
573281075Sdim    | PrintfTerm                    {}
574281075Sdim    | FprintfTerm                   {}
575271440Sjkim    | MidTerm                       {}
576271440Sjkim    ;
577271440Sjkim
578271440Sjkim/*
579271440Sjkim * A type 3 opcode evaluates to an Integer and cannot have a destination operand
580271440Sjkim */
581271440SjkimType3Opcode
582271440Sjkim    : EISAIDTerm                    {}
583271440Sjkim    ;
584271440Sjkim
585271440Sjkim/* Obsolete
586271440SjkimType4Opcode
587271440Sjkim    : ConcatTerm                    {}
588271440Sjkim    | ToDecimalStringTerm           {}
589271440Sjkim    | ToHexStringTerm               {}
590271440Sjkim    | MidTerm                       {}
591271440Sjkim    | ToStringTerm                  {}
592271440Sjkim    ;
593271440Sjkim*/
594271440Sjkim
595271440SjkimType5Opcode
596271440Sjkim    : ResourceTemplateTerm          {}
597271440Sjkim    | UnicodeTerm                   {}
598281075Sdim    | ToPLDTerm                     {}
599271440Sjkim    | ToUUIDTerm                    {}
600271440Sjkim    ;
601271440Sjkim
602271440SjkimType6Opcode
603271440Sjkim    : RefOfTerm                     {}
604271440Sjkim    | DerefOfTerm                   {}
605271440Sjkim    | IndexTerm                     {}
606306536Sjkim    | IndexExpTerm                  {}
607281687Sjkim    | MethodInvocationTerm          {}
608271440Sjkim    ;
609271440Sjkim
610306536Sjkim
611306536Sjkim/*******************************************************************************
612306536Sjkim *
613306536Sjkim * ASL Primary Terms
614306536Sjkim *
615306536Sjkim ******************************************************************************/
616306536Sjkim
617306536SjkimAccessAsTerm
618306536Sjkim    : PARSEOP_ACCESSAS '('
619306536Sjkim        AccessTypeKeyword
620306536Sjkim        OptionalAccessAttribTerm
621306536Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_ACCESSAS,2,$3,$4);}
622306536Sjkim    | PARSEOP_ACCESSAS '('
623306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
624271440Sjkim    ;
625271440Sjkim
626306536SjkimAcquireTerm
627306536Sjkim    : PARSEOP_ACQUIRE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_ACQUIRE);}
628306536Sjkim        SuperName
629306536Sjkim        ',' WordConstExpr
630306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$6);}
631306536Sjkim    | PARSEOP_ACQUIRE '('
632306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
633271440Sjkim    ;
634271440Sjkim
635306536SjkimAddTerm
636306536Sjkim    : PARSEOP_ADD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
637306536Sjkim        TermArg
638306536Sjkim        TermArgItem
639306536Sjkim        Target
640306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
641306536Sjkim    | PARSEOP_ADD '('
642306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
643306536Sjkim    ;
644306536Sjkim
645306536SjkimAliasTerm
646306536Sjkim    : PARSEOP_ALIAS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_ALIAS);}
647271440Sjkim        NameString
648306536Sjkim        NameStringItem
649306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,
650306536Sjkim                                        TrSetNodeFlags ($5, NODE_IS_NAME_DECLARATION));}
651306536Sjkim    | PARSEOP_ALIAS '('
652271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
653271440Sjkim    ;
654271440Sjkim
655306536SjkimAndTerm
656306536Sjkim    : PARSEOP_AND '('               {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
657306536Sjkim        TermArg
658306536Sjkim        TermArgItem
659306536Sjkim        Target
660306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
661306536Sjkim    | PARSEOP_AND '('
662306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
663306536Sjkim    ;
664271440Sjkim
665306536SjkimArgTerm
666306536Sjkim    : PARSEOP_ARG0                  {$$ = TrCreateLeafNode (PARSEOP_ARG0);}
667306536Sjkim    | PARSEOP_ARG1                  {$$ = TrCreateLeafNode (PARSEOP_ARG1);}
668306536Sjkim    | PARSEOP_ARG2                  {$$ = TrCreateLeafNode (PARSEOP_ARG2);}
669306536Sjkim    | PARSEOP_ARG3                  {$$ = TrCreateLeafNode (PARSEOP_ARG3);}
670306536Sjkim    | PARSEOP_ARG4                  {$$ = TrCreateLeafNode (PARSEOP_ARG4);}
671306536Sjkim    | PARSEOP_ARG5                  {$$ = TrCreateLeafNode (PARSEOP_ARG5);}
672306536Sjkim    | PARSEOP_ARG6                  {$$ = TrCreateLeafNode (PARSEOP_ARG6);}
673306536Sjkim    ;
674271440Sjkim
675271440SjkimBankFieldTerm
676271440Sjkim    : PARSEOP_BANKFIELD '('         {$<n>$ = TrCreateLeafNode (PARSEOP_BANKFIELD);}
677271440Sjkim        NameString
678271440Sjkim        NameStringItem
679271440Sjkim        TermArgItem
680271440Sjkim        ',' AccessTypeKeyword
681271440Sjkim        ',' LockRuleKeyword
682271440Sjkim        ',' UpdateRuleKeyword
683271440Sjkim        ')' '{'
684271440Sjkim            FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,7,$4,$5,$6,$8,$10,$12,$15);}
685271440Sjkim    | PARSEOP_BANKFIELD '('
686271440Sjkim        error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
687271440Sjkim    ;
688271440Sjkim
689306536SjkimBreakTerm
690306536Sjkim    : PARSEOP_BREAK                 {$$ = TrCreateNode (PARSEOP_BREAK, 0);}
691271440Sjkim    ;
692271440Sjkim
693306536SjkimBreakPointTerm
694306536Sjkim    : PARSEOP_BREAKPOINT            {$$ = TrCreateNode (PARSEOP_BREAKPOINT, 0);}
695271440Sjkim    ;
696271440Sjkim
697306536SjkimBufferTerm
698306536Sjkim    : PARSEOP_BUFFER '('            {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
699306536Sjkim        OptionalBufferLength
700306536Sjkim        ')' '{'
701306536Sjkim            BufferTermData '}'      {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
702306536Sjkim    | PARSEOP_BUFFER '('
703306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
704271440Sjkim    ;
705271440Sjkim
706306536SjkimBufferTermData
707306536Sjkim    : ByteList                      {}
708306536Sjkim    | StringData                    {}
709306536Sjkim    ;
710306536Sjkim
711306536SjkimCaseTerm
712306536Sjkim    : PARSEOP_CASE '('              {$<n>$ = TrCreateLeafNode (PARSEOP_CASE);}
713306536Sjkim        DataObject
714306536Sjkim        ')' '{'
715306536Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
716306536Sjkim    | PARSEOP_CASE '('
717271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
718271440Sjkim    ;
719271440Sjkim
720306536SjkimConcatTerm
721306536Sjkim    : PARSEOP_CONCATENATE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATE);}
722306536Sjkim        TermArg
723306536Sjkim        TermArgItem
724306536Sjkim        Target
725306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
726306536Sjkim    | PARSEOP_CONCATENATE '('
727271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
728271440Sjkim    ;
729271440Sjkim
730306536SjkimConcatResTerm
731306536Sjkim    : PARSEOP_CONCATENATERESTEMPLATE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATERESTEMPLATE);}
732306536Sjkim        TermArg
733306536Sjkim        TermArgItem
734306536Sjkim        Target
735306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
736306536Sjkim    | PARSEOP_CONCATENATERESTEMPLATE '('
737306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
738306536Sjkim    ;
739306536Sjkim
740271440SjkimConnectionTerm
741271440Sjkim    : PARSEOP_CONNECTION '('
742271440Sjkim        NameString
743271440Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_CONNECTION,1,$3);}
744271440Sjkim    | PARSEOP_CONNECTION '('        {$<n>$ = TrCreateLeafNode (PARSEOP_CONNECTION);}
745271440Sjkim        ResourceMacroTerm
746271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3, 1,
747271440Sjkim                                            TrLinkChildren (TrCreateLeafNode (PARSEOP_RESOURCETEMPLATE), 3,
748271440Sjkim                                                TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
749271440Sjkim                                                TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
750271440Sjkim                                                $4));}
751271440Sjkim    | PARSEOP_CONNECTION '('
752271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
753271440Sjkim    ;
754271440Sjkim
755306536SjkimCondRefOfTerm
756306536Sjkim    : PARSEOP_CONDREFOF '('         {$<n>$ = TrCreateLeafNode (PARSEOP_CONDREFOF);}
757306536Sjkim        SuperName
758306536Sjkim        Target
759306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
760306536Sjkim    | PARSEOP_CONDREFOF '('
761306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
762306536Sjkim    ;
763306536Sjkim
764306536SjkimContinueTerm
765306536Sjkim    : PARSEOP_CONTINUE              {$$ = TrCreateNode (PARSEOP_CONTINUE, 0);}
766306536Sjkim    ;
767306536Sjkim
768306536SjkimCopyObjectTerm
769306536Sjkim    : PARSEOP_COPYOBJECT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_COPYOBJECT);}
770306536Sjkim        TermArg
771306536Sjkim        ',' SimpleTarget
772306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
773306536Sjkim    | PARSEOP_COPYOBJECT '('
774306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
775306536Sjkim    ;
776306536Sjkim
777271440SjkimCreateBitFieldTerm
778271440Sjkim    : PARSEOP_CREATEBITFIELD '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBITFIELD);}
779271440Sjkim        TermArg
780271440Sjkim        TermArgItem
781271440Sjkim        NameStringItem
782271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
783271440Sjkim    | PARSEOP_CREATEBITFIELD '('
784271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
785271440Sjkim    ;
786271440Sjkim
787271440SjkimCreateByteFieldTerm
788271440Sjkim    : PARSEOP_CREATEBYTEFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBYTEFIELD);}
789271440Sjkim        TermArg
790271440Sjkim        TermArgItem
791271440Sjkim        NameStringItem
792271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
793271440Sjkim    | PARSEOP_CREATEBYTEFIELD '('
794271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
795271440Sjkim    ;
796271440Sjkim
797271440SjkimCreateDWordFieldTerm
798271440Sjkim    : PARSEOP_CREATEDWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEDWORDFIELD);}
799271440Sjkim        TermArg
800271440Sjkim        TermArgItem
801271440Sjkim        NameStringItem
802271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
803271440Sjkim    | PARSEOP_CREATEDWORDFIELD '('
804271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
805271440Sjkim    ;
806271440Sjkim
807271440SjkimCreateFieldTerm
808271440Sjkim    : PARSEOP_CREATEFIELD '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEFIELD);}
809271440Sjkim        TermArg
810271440Sjkim        TermArgItem
811271440Sjkim        TermArgItem
812271440Sjkim        NameStringItem
813271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,TrSetNodeFlags ($7, NODE_IS_NAME_DECLARATION));}
814271440Sjkim    | PARSEOP_CREATEFIELD '('
815271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
816271440Sjkim    ;
817271440Sjkim
818271440SjkimCreateQWordFieldTerm
819271440Sjkim    : PARSEOP_CREATEQWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEQWORDFIELD);}
820271440Sjkim        TermArg
821271440Sjkim        TermArgItem
822271440Sjkim        NameStringItem
823271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
824271440Sjkim    | PARSEOP_CREATEQWORDFIELD '('
825271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
826271440Sjkim    ;
827271440Sjkim
828271440SjkimCreateWordFieldTerm
829271440Sjkim    : PARSEOP_CREATEWORDFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEWORDFIELD);}
830271440Sjkim        TermArg
831271440Sjkim        TermArgItem
832271440Sjkim        NameStringItem
833271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
834271440Sjkim    | PARSEOP_CREATEWORDFIELD '('
835271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
836271440Sjkim    ;
837271440Sjkim
838271440SjkimDataRegionTerm
839271440Sjkim    : PARSEOP_DATATABLEREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DATATABLEREGION);}
840271440Sjkim        NameString
841271440Sjkim        TermArgItem
842271440Sjkim        TermArgItem
843271440Sjkim        TermArgItem
844271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$6,$7);}
845271440Sjkim    | PARSEOP_DATATABLEREGION '('
846271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
847271440Sjkim    ;
848271440Sjkim
849306536SjkimDebugTerm
850306536Sjkim    : PARSEOP_DEBUG                 {$$ = TrCreateLeafNode (PARSEOP_DEBUG);}
851271440Sjkim    ;
852271440Sjkim
853306536SjkimDecTerm
854306536Sjkim    : PARSEOP_DECREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
855306536Sjkim        SuperName
856306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
857306536Sjkim    | PARSEOP_DECREMENT '('
858271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
859271440Sjkim    ;
860271440Sjkim
861306536SjkimDefaultTerm
862306536Sjkim    : PARSEOP_DEFAULT '{'           {$<n>$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
863306536Sjkim        TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
864306536Sjkim    | PARSEOP_DEFAULT '{'
865306536Sjkim        error '}'                   {$$ = AslDoError(); yyclearin;}
866271440Sjkim    ;
867271440Sjkim
868306536SjkimDerefOfTerm
869306536Sjkim    : PARSEOP_DEREFOF '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DEREFOF);}
870306536Sjkim        TermArg
871306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
872306536Sjkim    | PARSEOP_DEREFOF '('
873271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
874271440Sjkim    ;
875271440Sjkim
876306536SjkimDeviceTerm
877306536Sjkim    : PARSEOP_DEVICE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
878271440Sjkim        NameString
879271440Sjkim        ')' '{'
880306536Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
881306536Sjkim    | PARSEOP_DEVICE '('
882271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
883271440Sjkim    ;
884271440Sjkim
885306536SjkimDivideTerm
886306536Sjkim    : PARSEOP_DIVIDE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
887306536Sjkim        TermArg
888271440Sjkim        TermArgItem
889306536Sjkim        Target
890306536Sjkim        Target
891306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
892306536Sjkim    | PARSEOP_DIVIDE '('
893271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
894271440Sjkim    ;
895271440Sjkim
896306536SjkimEISAIDTerm
897306536Sjkim    : PARSEOP_EISAID '('
898306536Sjkim        StringData ')'              {$$ = TrUpdateNode (PARSEOP_EISAID, $3);}
899306536Sjkim    | PARSEOP_EISAID '('
900271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
901271440Sjkim    ;
902271440Sjkim
903306536SjkimElseIfTerm
904271440Sjkim    : IfTerm ElseTerm               {$$ = TrLinkPeerNode ($1,$2);}
905271440Sjkim    ;
906271440Sjkim
907271440SjkimElseTerm
908271440Sjkim    :                               {$$ = NULL;}
909271440Sjkim    | PARSEOP_ELSE '{'              {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
910271440Sjkim        TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
911271440Sjkim
912271440Sjkim    | PARSEOP_ELSE '{'
913271440Sjkim        error '}'                   {$$ = AslDoError(); yyclearin;}
914271440Sjkim
915271440Sjkim    | PARSEOP_ELSE
916271440Sjkim        error                       {$$ = AslDoError(); yyclearin;}
917271440Sjkim
918271440Sjkim    | PARSEOP_ELSEIF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
919271440Sjkim        TermArg                     {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
920271440Sjkim        ')' '{'
921271440Sjkim            TermList '}'            {TrLinkChildren ($<n>5,2,$4,$8);}
922271440Sjkim        ElseTerm                    {TrLinkPeerNode ($<n>5,$11);}
923271440Sjkim                                    {$$ = TrLinkChildren ($<n>3,1,$<n>5);}
924271440Sjkim
925271440Sjkim    | PARSEOP_ELSEIF '('
926271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
927271440Sjkim
928271440Sjkim    | PARSEOP_ELSEIF
929271440Sjkim        error                       {$$ = AslDoError(); yyclearin;}
930271440Sjkim    ;
931271440Sjkim
932306536SjkimEventTerm
933306536Sjkim    : PARSEOP_EVENT '('             {$<n>$ = TrCreateLeafNode (PARSEOP_EVENT);}
934271440Sjkim        NameString
935306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION));}
936306536Sjkim    | PARSEOP_EVENT '('
937271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
938271440Sjkim    ;
939271440Sjkim
940306536SjkimExternalTerm
941306536Sjkim    : PARSEOP_EXTERNAL '('
942306536Sjkim        NameString
943306536Sjkim        OptionalObjectTypeKeyword
944306536Sjkim        OptionalParameterTypePackage
945306536Sjkim        OptionalParameterTypesPackage
946306536Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_EXTERNAL,4,$3,$4,$5,$6);}
947306536Sjkim    | PARSEOP_EXTERNAL '('
948306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
949271440Sjkim    ;
950271440Sjkim
951306536SjkimFatalTerm
952306536Sjkim    : PARSEOP_FATAL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FATAL);}
953306536Sjkim        ByteConstExpr
954306536Sjkim        ',' DWordConstExpr
955271440Sjkim        TermArgItem
956306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
957306536Sjkim    | PARSEOP_FATAL '('
958271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
959271440Sjkim    ;
960271440Sjkim
961306536SjkimFieldTerm
962306536Sjkim    : PARSEOP_FIELD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FIELD);}
963306536Sjkim        NameString
964306536Sjkim        ',' AccessTypeKeyword
965306536Sjkim        ',' LockRuleKeyword
966306536Sjkim        ',' UpdateRuleKeyword
967271440Sjkim        ')' '{'
968306536Sjkim            FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$10,$13);}
969306536Sjkim    | PARSEOP_FIELD '('
970306536Sjkim        error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
971271440Sjkim    ;
972271440Sjkim
973306536SjkimFindSetLeftBitTerm
974306536Sjkim    : PARSEOP_FINDSETLEFTBIT '('    {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETLEFTBIT);}
975271440Sjkim        TermArg
976306536Sjkim        Target
977306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
978306536Sjkim    | PARSEOP_FINDSETLEFTBIT '('
979271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
980271440Sjkim    ;
981271440Sjkim
982306536SjkimFindSetRightBitTerm
983306536Sjkim    : PARSEOP_FINDSETRIGHTBIT '('   {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETRIGHTBIT);}
984271440Sjkim        TermArg
985271440Sjkim        Target
986306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
987306536Sjkim    | PARSEOP_FINDSETRIGHTBIT '('
988271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
989271440Sjkim    ;
990271440Sjkim
991306536Sjkim    /* Convert a For() loop to a While() loop */
992306536SjkimForTerm
993306536Sjkim    : PARSEOP_FOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
994306536Sjkim        OptionalTermArg ','         {}
995306536Sjkim        OptionalPredicate ','
996306536Sjkim        OptionalTermArg             {$<n>$ = TrLinkPeerNode ($4,$<n>3);
997306536Sjkim                                        TrSetParent ($9,$<n>3);}                /* New parent is WHILE */
998306536Sjkim        ')' '{' TermList '}'        {$<n>$ = TrLinkChildren ($<n>3,2,$7,$13);}
999306536Sjkim                                    {$<n>$ = TrLinkPeerNode ($13,$9);
1000306536Sjkim                                        $$ = $<n>10;}
1001271440Sjkim    ;
1002271440Sjkim
1003306536SjkimOptionalPredicate
1004306536Sjkim    :                               {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, 1);}
1005306536Sjkim    | TermArg                       {$$ = $1;}
1006271440Sjkim    ;
1007271440Sjkim
1008306536SjkimFprintfTerm
1009306536Sjkim    : PARSEOP_FPRINTF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_FPRINTF);}
1010306536Sjkim        TermArg ','
1011306536Sjkim        StringData
1012306536Sjkim        PrintfArgList
1013306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
1014306536Sjkim    | PARSEOP_FPRINTF '('
1015271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1016271440Sjkim    ;
1017271440Sjkim
1018306536SjkimFromBCDTerm
1019306536Sjkim    : PARSEOP_FROMBCD '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FROMBCD);}
1020306536Sjkim        TermArg
1021271440Sjkim        Target
1022271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1023306536Sjkim    | PARSEOP_FROMBCD '('
1024271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1025271440Sjkim    ;
1026271440Sjkim
1027306536SjkimFunctionTerm
1028306536Sjkim    : PARSEOP_FUNCTION '('          {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
1029306536Sjkim        NameString
1030306536Sjkim        OptionalParameterTypePackage
1031306536Sjkim        OptionalParameterTypesPackage
1032306536Sjkim        ')' '{'
1033306536Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
1034306536Sjkim                                        TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
1035306536Sjkim                                        TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
1036306536Sjkim                                        TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$9);}
1037306536Sjkim    | PARSEOP_FUNCTION '('
1038271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1039271440Sjkim    ;
1040271440Sjkim
1041306536SjkimIfTerm
1042306536Sjkim    : PARSEOP_IF '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
1043271440Sjkim        TermArg
1044306536Sjkim        ')' '{'
1045306536Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1046271440Sjkim
1047306536Sjkim    | PARSEOP_IF '('
1048271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1049271440Sjkim    ;
1050271440Sjkim
1051306536SjkimIncludeTerm
1052306536Sjkim    : PARSEOP_INCLUDE '('
1053306536Sjkim        String  ')'                 {$$ = TrUpdateNode (PARSEOP_INCLUDE, $3);
1054306536Sjkim                                        FlOpenIncludeFile ($3);}
1055271440Sjkim    ;
1056271440Sjkim
1057306536SjkimIncludeEndTerm
1058306536Sjkim    : PARSEOP_INCLUDE_END           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE_END); TrSetCurrentFilename ($$);}
1059271440Sjkim    ;
1060271440Sjkim
1061271440SjkimIncTerm
1062271440Sjkim    : PARSEOP_INCREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
1063271440Sjkim        SuperName
1064271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1065271440Sjkim    | PARSEOP_INCREMENT '('
1066271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1067271440Sjkim    ;
1068271440Sjkim
1069306536SjkimIndexFieldTerm
1070306536Sjkim    : PARSEOP_INDEXFIELD '('        {$<n>$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
1071306536Sjkim        NameString
1072306536Sjkim        NameStringItem
1073306536Sjkim        ',' AccessTypeKeyword
1074306536Sjkim        ',' LockRuleKeyword
1075306536Sjkim        ',' UpdateRuleKeyword
1076306536Sjkim        ')' '{'
1077306536Sjkim            FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
1078306536Sjkim    | PARSEOP_INDEXFIELD '('
1079306536Sjkim        error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
1080306536Sjkim    ;
1081306536Sjkim
1082271440SjkimIndexTerm
1083271440Sjkim    : PARSEOP_INDEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_INDEX);}
1084271440Sjkim        TermArg
1085271440Sjkim        TermArgItem
1086271440Sjkim        Target
1087271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1088271440Sjkim    | PARSEOP_INDEX '('
1089271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1090271440Sjkim    ;
1091271440Sjkim
1092271440SjkimLAndTerm
1093271440Sjkim    : PARSEOP_LAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
1094271440Sjkim        TermArg
1095271440Sjkim        TermArgItem
1096271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1097271440Sjkim    | PARSEOP_LAND '('
1098271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1099271440Sjkim    ;
1100271440Sjkim
1101271440SjkimLEqualTerm
1102271440Sjkim    : PARSEOP_LEQUAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
1103271440Sjkim        TermArg
1104271440Sjkim        TermArgItem
1105271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1106271440Sjkim    | PARSEOP_LEQUAL '('
1107271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1108271440Sjkim    ;
1109271440Sjkim
1110306536SjkimLGreaterEqualTerm
1111306536Sjkim    : PARSEOP_LGREATEREQUAL '('     {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
1112306536Sjkim        TermArg
1113306536Sjkim        TermArgItem
1114306536Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1115306536Sjkim    | PARSEOP_LGREATEREQUAL '('
1116306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1117306536Sjkim    ;
1118306536Sjkim
1119271440SjkimLGreaterTerm
1120271440Sjkim    : PARSEOP_LGREATER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
1121271440Sjkim        TermArg
1122271440Sjkim        TermArgItem
1123271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1124271440Sjkim    | PARSEOP_LGREATER '('
1125271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1126271440Sjkim    ;
1127271440Sjkim
1128306536SjkimLLessEqualTerm
1129306536Sjkim    : PARSEOP_LLESSEQUAL '('        {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
1130271440Sjkim        TermArg
1131271440Sjkim        TermArgItem
1132271440Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1133306536Sjkim    | PARSEOP_LLESSEQUAL '('
1134271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1135271440Sjkim    ;
1136271440Sjkim
1137271440SjkimLLessTerm
1138271440Sjkim    : PARSEOP_LLESS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
1139271440Sjkim        TermArg
1140271440Sjkim        TermArgItem
1141271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1142271440Sjkim    | PARSEOP_LLESS '('
1143271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1144271440Sjkim    ;
1145271440Sjkim
1146306536SjkimLNotEqualTerm
1147306536Sjkim    : PARSEOP_LNOTEQUAL '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
1148271440Sjkim        TermArg
1149271440Sjkim        TermArgItem
1150271440Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1151306536Sjkim    | PARSEOP_LNOTEQUAL '('
1152271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1153271440Sjkim    ;
1154271440Sjkim
1155271440SjkimLNotTerm
1156271440Sjkim    : PARSEOP_LNOT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
1157271440Sjkim        TermArg
1158271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1159271440Sjkim    | PARSEOP_LNOT '('
1160271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1161271440Sjkim    ;
1162271440Sjkim
1163271440SjkimLoadTableTerm
1164271440Sjkim    : PARSEOP_LOADTABLE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LOADTABLE);}
1165271440Sjkim        TermArg
1166271440Sjkim        TermArgItem
1167271440Sjkim        TermArgItem
1168271440Sjkim        OptionalListString
1169271440Sjkim        OptionalListString
1170271440Sjkim        OptionalReference
1171271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$5,$6,$7,$8,$9);}
1172271440Sjkim    | PARSEOP_LOADTABLE '('
1173271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1174271440Sjkim    ;
1175271440Sjkim
1176306536SjkimLoadTerm
1177306536Sjkim    : PARSEOP_LOAD '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LOAD);}
1178306536Sjkim        NameString
1179306536Sjkim        RequiredTarget
1180306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1181306536Sjkim    | PARSEOP_LOAD '('
1182306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1183306536Sjkim    ;
1184306536Sjkim
1185306536SjkimLocalTerm
1186306536Sjkim    : PARSEOP_LOCAL0                {$$ = TrCreateLeafNode (PARSEOP_LOCAL0);}
1187306536Sjkim    | PARSEOP_LOCAL1                {$$ = TrCreateLeafNode (PARSEOP_LOCAL1);}
1188306536Sjkim    | PARSEOP_LOCAL2                {$$ = TrCreateLeafNode (PARSEOP_LOCAL2);}
1189306536Sjkim    | PARSEOP_LOCAL3                {$$ = TrCreateLeafNode (PARSEOP_LOCAL3);}
1190306536Sjkim    | PARSEOP_LOCAL4                {$$ = TrCreateLeafNode (PARSEOP_LOCAL4);}
1191306536Sjkim    | PARSEOP_LOCAL5                {$$ = TrCreateLeafNode (PARSEOP_LOCAL5);}
1192306536Sjkim    | PARSEOP_LOCAL6                {$$ = TrCreateLeafNode (PARSEOP_LOCAL6);}
1193306536Sjkim    | PARSEOP_LOCAL7                {$$ = TrCreateLeafNode (PARSEOP_LOCAL7);}
1194306536Sjkim    ;
1195306536Sjkim
1196271440SjkimLOrTerm
1197271440Sjkim    : PARSEOP_LOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
1198271440Sjkim        TermArg
1199271440Sjkim        TermArgItem
1200271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1201271440Sjkim    | PARSEOP_LOR '('
1202271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1203271440Sjkim    ;
1204271440Sjkim
1205271440SjkimMatchTerm
1206271440Sjkim    : PARSEOP_MATCH '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MATCH);}
1207271440Sjkim        TermArg
1208271440Sjkim        ',' MatchOpKeyword
1209271440Sjkim        TermArgItem
1210271440Sjkim        ',' MatchOpKeyword
1211271440Sjkim        TermArgItem
1212271440Sjkim        TermArgItem
1213271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$7,$9,$10,$11);}
1214271440Sjkim    | PARSEOP_MATCH '('
1215271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1216271440Sjkim    ;
1217271440Sjkim
1218306536SjkimMethodTerm
1219306536Sjkim    : PARSEOP_METHOD  '('           {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
1220306536Sjkim        NameString
1221306536Sjkim        OptionalByteConstExpr       {UtCheckIntegerRange ($5, 0, 7);}
1222306536Sjkim        OptionalSerializeRuleKeyword
1223306536Sjkim        OptionalByteConstExpr
1224306536Sjkim        OptionalParameterTypePackage
1225306536Sjkim        OptionalParameterTypesPackage
1226306536Sjkim        ')' '{'
1227306536Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$7,$8,$9,$10,$13);}
1228306536Sjkim    | PARSEOP_METHOD '('
1229306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1230306536Sjkim    ;
1231306536Sjkim
1232271440SjkimMidTerm
1233271440Sjkim    : PARSEOP_MID '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MID);}
1234271440Sjkim        TermArg
1235271440Sjkim        TermArgItem
1236271440Sjkim        TermArgItem
1237271440Sjkim        Target
1238271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
1239271440Sjkim    | PARSEOP_MID '('
1240271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1241271440Sjkim    ;
1242271440Sjkim
1243271440SjkimModTerm
1244271440Sjkim    : PARSEOP_MOD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
1245271440Sjkim        TermArg
1246271440Sjkim        TermArgItem
1247271440Sjkim        Target
1248271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1249271440Sjkim    | PARSEOP_MOD '('
1250271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1251271440Sjkim    ;
1252271440Sjkim
1253271440SjkimMultiplyTerm
1254271440Sjkim    : PARSEOP_MULTIPLY '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
1255271440Sjkim        TermArg
1256271440Sjkim        TermArgItem
1257271440Sjkim        Target
1258271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1259271440Sjkim    | PARSEOP_MULTIPLY '('
1260271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1261271440Sjkim    ;
1262271440Sjkim
1263306536SjkimMutexTerm
1264306536Sjkim    : PARSEOP_MUTEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MUTEX);}
1265306536Sjkim        NameString
1266306536Sjkim        ',' ByteConstExpr
1267306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
1268306536Sjkim    | PARSEOP_MUTEX '('
1269306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1270306536Sjkim    ;
1271306536Sjkim
1272306536SjkimNameTerm
1273306536Sjkim    : PARSEOP_NAME '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAME);}
1274306536Sjkim        NameString
1275306536Sjkim        ',' DataObject
1276306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
1277306536Sjkim    | PARSEOP_NAME '('
1278306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1279306536Sjkim    ;
1280306536Sjkim
1281271440SjkimNAndTerm
1282271440Sjkim    : PARSEOP_NAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAND);}
1283271440Sjkim        TermArg
1284271440Sjkim        TermArgItem
1285271440Sjkim        Target
1286271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1287271440Sjkim    | PARSEOP_NAND '('
1288271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1289271440Sjkim    ;
1290271440Sjkim
1291306536SjkimNoOpTerm
1292306536Sjkim    : PARSEOP_NOOP                  {$$ = TrCreateNode (PARSEOP_NOOP, 0);}
1293306536Sjkim    ;
1294306536Sjkim
1295271440SjkimNOrTerm
1296271440Sjkim    : PARSEOP_NOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOR);}
1297271440Sjkim        TermArg
1298271440Sjkim        TermArgItem
1299271440Sjkim        Target
1300271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1301271440Sjkim    | PARSEOP_NOR '('
1302271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1303271440Sjkim    ;
1304271440Sjkim
1305306536SjkimNotifyTerm
1306306536Sjkim    : PARSEOP_NOTIFY '('            {$<n>$ = TrCreateLeafNode (PARSEOP_NOTIFY);}
1307306536Sjkim        SuperName
1308306536Sjkim        TermArgItem
1309306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1310306536Sjkim    | PARSEOP_NOTIFY '('
1311306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1312306536Sjkim    ;
1313306536Sjkim
1314271440SjkimNotTerm
1315271440Sjkim    : PARSEOP_NOT '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
1316271440Sjkim        TermArg
1317271440Sjkim        Target
1318271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1319271440Sjkim    | PARSEOP_NOT '('
1320271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1321271440Sjkim    ;
1322271440Sjkim
1323271440SjkimObjectTypeTerm
1324271440Sjkim    : PARSEOP_OBJECTTYPE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE);}
1325271440Sjkim        ObjectTypeName
1326271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1327271440Sjkim    | PARSEOP_OBJECTTYPE '('
1328271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1329271440Sjkim    ;
1330271440Sjkim
1331306536SjkimOffsetTerm
1332306536Sjkim    : PARSEOP_OFFSET '('
1333306536Sjkim        AmlPackageLengthTerm
1334306536Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_OFFSET,1,$3);}
1335306536Sjkim    | PARSEOP_OFFSET '('
1336306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1337306536Sjkim    ;
1338306536Sjkim
1339306536SjkimOpRegionTerm
1340306536Sjkim    : PARSEOP_OPERATIONREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_OPERATIONREGION);}
1341306536Sjkim        NameString
1342306536Sjkim        ',' OpRegionSpaceIdTerm
1343306536Sjkim        TermArgItem
1344306536Sjkim        TermArgItem
1345306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8);}
1346306536Sjkim    | PARSEOP_OPERATIONREGION '('
1347306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1348306536Sjkim    ;
1349306536Sjkim
1350306536SjkimOpRegionSpaceIdTerm
1351306536Sjkim    : RegionSpaceKeyword            {}
1352306536Sjkim    | ByteConst                     {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
1353306536Sjkim    ;
1354306536Sjkim
1355271440SjkimOrTerm
1356271440Sjkim    : PARSEOP_OR '('                {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
1357271440Sjkim        TermArg
1358271440Sjkim        TermArgItem
1359271440Sjkim        Target
1360271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1361271440Sjkim    | PARSEOP_OR '('
1362271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1363271440Sjkim    ;
1364271440Sjkim
1365306536SjkimPackageTerm
1366306536Sjkim    : PARSEOP_PACKAGE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_VAR_PACKAGE);}
1367306536Sjkim        VarPackageLengthTerm
1368306536Sjkim        ')' '{'
1369306536Sjkim            PackageList '}'         {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1370306536Sjkim    | PARSEOP_PACKAGE '('
1371306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1372306536Sjkim    ;
1373306536Sjkim
1374306536SjkimPowerResTerm
1375306536Sjkim    : PARSEOP_POWERRESOURCE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_POWERRESOURCE);}
1376306536Sjkim        NameString
1377306536Sjkim        ',' ByteConstExpr
1378306536Sjkim        ',' WordConstExpr
1379306536Sjkim        ')' '{'
1380306536Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$8,$11);}
1381306536Sjkim    | PARSEOP_POWERRESOURCE '('
1382306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1383306536Sjkim    ;
1384306536Sjkim
1385306536SjkimPrintfTerm
1386306536Sjkim    : PARSEOP_PRINTF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_PRINTF);}
1387306536Sjkim        StringData
1388306536Sjkim        PrintfArgList
1389306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1390306536Sjkim    | PARSEOP_PRINTF '('
1391306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1392306536Sjkim    ;
1393306536Sjkim
1394306536SjkimPrintfArgList
1395306536Sjkim    :                               {$$ = NULL;}
1396306536Sjkim    | TermArg                       {$$ = $1;}
1397306536Sjkim    | PrintfArgList ','
1398306536Sjkim       TermArg                      {$$ = TrLinkPeerNode ($1, $3);}
1399306536Sjkim    ;
1400306536Sjkim
1401306536SjkimProcessorTerm
1402306536Sjkim    : PARSEOP_PROCESSOR '('         {$<n>$ = TrCreateLeafNode (PARSEOP_PROCESSOR);}
1403306536Sjkim        NameString
1404306536Sjkim        ',' ByteConstExpr
1405306536Sjkim        OptionalDWordConstExpr
1406306536Sjkim        OptionalByteConstExpr
1407306536Sjkim        ')' '{'
1408306536Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,5,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8,$11);}
1409306536Sjkim    | PARSEOP_PROCESSOR '('
1410306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1411306536Sjkim    ;
1412306536Sjkim
1413306536SjkimRawDataBufferTerm
1414306536Sjkim    : PARSEOP_DATABUFFER  '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DATABUFFER);}
1415306536Sjkim        OptionalWordConst
1416306536Sjkim        ')' '{'
1417306536Sjkim            ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1418306536Sjkim    | PARSEOP_DATABUFFER '('
1419306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1420306536Sjkim    ;
1421306536Sjkim
1422271440Sjkim/*
1423271440Sjkim * In RefOf, the node isn't really a target, but we can't keep track of it after
1424271440Sjkim * we've taken a pointer to it. (hard to tell if a local becomes initialized this way.)
1425271440Sjkim */
1426271440SjkimRefOfTerm
1427271440Sjkim    : PARSEOP_REFOF '('             {$<n>$ = TrCreateLeafNode (PARSEOP_REFOF);}
1428271440Sjkim        SuperName
1429271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_TARGET));}
1430271440Sjkim    | PARSEOP_REFOF '('
1431271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1432271440Sjkim    ;
1433271440Sjkim
1434306536SjkimReleaseTerm
1435306536Sjkim    : PARSEOP_RELEASE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_RELEASE);}
1436306536Sjkim        SuperName
1437306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1438306536Sjkim    | PARSEOP_RELEASE '('
1439306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1440306536Sjkim    ;
1441306536Sjkim
1442306536SjkimResetTerm
1443306536Sjkim    : PARSEOP_RESET '('             {$<n>$ = TrCreateLeafNode (PARSEOP_RESET);}
1444306536Sjkim        SuperName
1445306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1446306536Sjkim    | PARSEOP_RESET '('
1447306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1448306536Sjkim    ;
1449306536Sjkim
1450306536SjkimReturnTerm
1451306536Sjkim    : PARSEOP_RETURN '('            {$<n>$ = TrCreateLeafNode (PARSEOP_RETURN);}
1452306536Sjkim        OptionalReturnArg
1453306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1454306536Sjkim    | PARSEOP_RETURN                {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),1,TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN));}
1455306536Sjkim    | PARSEOP_RETURN '('
1456306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1457306536Sjkim    ;
1458306536Sjkim
1459306536SjkimScopeTerm
1460306536Sjkim    : PARSEOP_SCOPE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
1461306536Sjkim        NameString
1462306536Sjkim        ')' '{'
1463306536Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
1464306536Sjkim    | PARSEOP_SCOPE '('
1465306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1466306536Sjkim    ;
1467306536Sjkim
1468271440SjkimShiftLeftTerm
1469271440Sjkim    : PARSEOP_SHIFTLEFT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
1470271440Sjkim        TermArg
1471271440Sjkim        TermArgItem
1472271440Sjkim        Target
1473271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1474271440Sjkim    | PARSEOP_SHIFTLEFT '('
1475271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1476271440Sjkim    ;
1477271440Sjkim
1478271440SjkimShiftRightTerm
1479271440Sjkim    : PARSEOP_SHIFTRIGHT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
1480271440Sjkim        TermArg
1481271440Sjkim        TermArgItem
1482271440Sjkim        Target
1483271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1484271440Sjkim    | PARSEOP_SHIFTRIGHT '('
1485271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1486271440Sjkim    ;
1487271440Sjkim
1488306536SjkimSignalTerm
1489306536Sjkim    : PARSEOP_SIGNAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIGNAL);}
1490306536Sjkim        SuperName
1491306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1492306536Sjkim    | PARSEOP_SIGNAL '('
1493306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1494306536Sjkim    ;
1495306536Sjkim
1496271440SjkimSizeOfTerm
1497271440Sjkim    : PARSEOP_SIZEOF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIZEOF);}
1498271440Sjkim        SuperName
1499271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1500271440Sjkim    | PARSEOP_SIZEOF '('
1501271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1502271440Sjkim    ;
1503271440Sjkim
1504306536SjkimSleepTerm
1505306536Sjkim    : PARSEOP_SLEEP '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SLEEP);}
1506306536Sjkim        TermArg
1507306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1508306536Sjkim    | PARSEOP_SLEEP '('
1509306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1510306536Sjkim    ;
1511306536Sjkim
1512306536SjkimStallTerm
1513306536Sjkim    : PARSEOP_STALL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STALL);}
1514306536Sjkim        TermArg
1515306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1516306536Sjkim    | PARSEOP_STALL '('
1517306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1518306536Sjkim    ;
1519306536Sjkim
1520271440SjkimStoreTerm
1521271440Sjkim    : PARSEOP_STORE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STORE);}
1522271440Sjkim        TermArg
1523271440Sjkim        ',' SuperName
1524271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
1525271440Sjkim    | PARSEOP_STORE '('
1526271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1527271440Sjkim    ;
1528271440Sjkim
1529271440SjkimSubtractTerm
1530271440Sjkim    : PARSEOP_SUBTRACT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
1531271440Sjkim        TermArg
1532271440Sjkim        TermArgItem
1533271440Sjkim        Target
1534271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1535271440Sjkim    | PARSEOP_SUBTRACT '('
1536271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1537271440Sjkim    ;
1538306536SjkimSwitchTerm
1539306536Sjkim    : PARSEOP_SWITCH '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SWITCH);}
1540306536Sjkim        TermArg
1541306536Sjkim        ')' '{'
1542306536Sjkim            CaseDefaultTermList '}'
1543306536Sjkim                                    {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1544306536Sjkim    | PARSEOP_SWITCH '('
1545306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1546306536Sjkim    ;
1547271440Sjkim
1548306536SjkimThermalZoneTerm
1549306536Sjkim    : PARSEOP_THERMALZONE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
1550306536Sjkim        NameString
1551306536Sjkim        ')' '{'
1552306536Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
1553306536Sjkim    | PARSEOP_THERMALZONE '('
1554306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1555306536Sjkim    ;
1556306536Sjkim
1557271440SjkimTimerTerm
1558271440Sjkim    : PARSEOP_TIMER '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TIMER);}
1559271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,0);}
1560271440Sjkim    | PARSEOP_TIMER                 {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_TIMER),0);}
1561271440Sjkim    | PARSEOP_TIMER '('
1562271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1563271440Sjkim    ;
1564271440Sjkim
1565271440SjkimToBCDTerm
1566271440Sjkim    : PARSEOP_TOBCD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOBCD);}
1567271440Sjkim        TermArg
1568271440Sjkim        Target
1569271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1570271440Sjkim    | PARSEOP_TOBCD '('
1571271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1572271440Sjkim    ;
1573271440Sjkim
1574271440SjkimToBufferTerm
1575271440Sjkim    : PARSEOP_TOBUFFER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOBUFFER);}
1576271440Sjkim        TermArg
1577271440Sjkim        Target
1578271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1579271440Sjkim    | PARSEOP_TOBUFFER '('
1580271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1581271440Sjkim    ;
1582271440Sjkim
1583271440SjkimToDecimalStringTerm
1584271440Sjkim    : PARSEOP_TODECIMALSTRING '('   {$<n>$ = TrCreateLeafNode (PARSEOP_TODECIMALSTRING);}
1585271440Sjkim        TermArg
1586271440Sjkim        Target
1587271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1588271440Sjkim    | PARSEOP_TODECIMALSTRING '('
1589271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1590271440Sjkim    ;
1591271440Sjkim
1592271440SjkimToHexStringTerm
1593271440Sjkim    : PARSEOP_TOHEXSTRING '('       {$<n>$ = TrCreateLeafNode (PARSEOP_TOHEXSTRING);}
1594271440Sjkim        TermArg
1595271440Sjkim        Target
1596271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1597271440Sjkim    | PARSEOP_TOHEXSTRING '('
1598271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1599271440Sjkim    ;
1600271440Sjkim
1601271440SjkimToIntegerTerm
1602271440Sjkim    : PARSEOP_TOINTEGER '('         {$<n>$ = TrCreateLeafNode (PARSEOP_TOINTEGER);}
1603271440Sjkim        TermArg
1604271440Sjkim        Target
1605271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1606271440Sjkim    | PARSEOP_TOINTEGER '('
1607271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1608271440Sjkim    ;
1609271440Sjkim
1610306536SjkimToPLDTerm
1611306536Sjkim    : PARSEOP_TOPLD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOPLD);}
1612306536Sjkim        PldKeywordList
1613306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1614306536Sjkim    | PARSEOP_TOPLD '('
1615306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1616281075Sdim    ;
1617281075Sdim
1618281075SdimPldKeywordList
1619281075Sdim    :                               {$$ = NULL;}
1620281075Sdim    | PldKeyword
1621281075Sdim        PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkChildren ($1,1,$3);}
1622281075Sdim    | PldKeyword
1623281075Sdim        PARSEOP_EXP_EQUALS String   {$$ = TrLinkChildren ($1,1,$3);}
1624281075Sdim    | PldKeywordList ','            /* Allows a trailing comma at list end */
1625281075Sdim    | PldKeywordList ','
1626281075Sdim        PldKeyword
1627281075Sdim        PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
1628281075Sdim    | PldKeywordList ','
1629281075Sdim        PldKeyword
1630281075Sdim        PARSEOP_EXP_EQUALS String   {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
1631281075Sdim    ;
1632281075Sdim
1633281075Sdim
1634271440SjkimToStringTerm
1635271440Sjkim    : PARSEOP_TOSTRING '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOSTRING);}
1636271440Sjkim        TermArg
1637271440Sjkim        OptionalCount
1638271440Sjkim        Target
1639271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1640271440Sjkim    | PARSEOP_TOSTRING '('
1641271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1642271440Sjkim    ;
1643271440Sjkim
1644271440SjkimToUUIDTerm
1645271440Sjkim    : PARSEOP_TOUUID '('
1646271440Sjkim        StringData ')'              {$$ = TrUpdateNode (PARSEOP_TOUUID, $3);}
1647271440Sjkim    | PARSEOP_TOUUID '('
1648271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1649271440Sjkim    ;
1650271440Sjkim
1651306536SjkimUnicodeTerm
1652306536Sjkim    : PARSEOP_UNICODE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_UNICODE);}
1653306536Sjkim        StringData
1654306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,0,$4);}
1655306536Sjkim    | PARSEOP_UNICODE '('
1656306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1657306536Sjkim    ;
1658306536Sjkim
1659306536SjkimUnloadTerm
1660306536Sjkim    : PARSEOP_UNLOAD '('            {$<n>$ = TrCreateLeafNode (PARSEOP_UNLOAD);}
1661306536Sjkim        SuperName
1662306536Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1663306536Sjkim    | PARSEOP_UNLOAD '('
1664306536Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1665306536Sjkim    ;
1666306536Sjkim
1667271440SjkimWaitTerm
1668271440Sjkim    : PARSEOP_WAIT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_WAIT);}
1669271440Sjkim        SuperName
1670271440Sjkim        TermArgItem
1671271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1672271440Sjkim    | PARSEOP_WAIT '('
1673271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1674271440Sjkim    ;
1675271440Sjkim
1676271440SjkimXOrTerm
1677271440Sjkim    : PARSEOP_XOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
1678271440Sjkim        TermArg
1679271440Sjkim        TermArgItem
1680271440Sjkim        Target
1681271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1682271440Sjkim    | PARSEOP_XOR '('
1683271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1684271440Sjkim    ;
1685271440Sjkim
1686306536SjkimWhileTerm
1687306536Sjkim    : PARSEOP_WHILE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
1688306536Sjkim        TermArg
1689306536Sjkim        ')' '{' TermList '}'
1690306536Sjkim                                    {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1691306536Sjkim    | PARSEOP_WHILE '('
1692271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1693271440Sjkim    ;
1694271440Sjkim
1695271440Sjkim
1696306536Sjkim/*******************************************************************************
1697306536Sjkim *
1698306536Sjkim * ASL Helper Terms
1699306536Sjkim *
1700306536Sjkim ******************************************************************************/
1701271440Sjkim
1702271440SjkimAmlPackageLengthTerm
1703271440Sjkim    : Integer                       {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,(ACPI_PARSE_OBJECT *) $1);}
1704271440Sjkim    ;
1705271440Sjkim
1706271440SjkimNameStringItem
1707271440Sjkim    : ',' NameString                {$$ = $2;}
1708271440Sjkim    | ',' error                     {$$ = AslDoError (); yyclearin;}
1709271440Sjkim    ;
1710271440Sjkim
1711271440SjkimTermArgItem
1712271440Sjkim    : ',' TermArg                   {$$ = $2;}
1713271440Sjkim    | ',' error                     {$$ = AslDoError (); yyclearin;}
1714271440Sjkim    ;
1715271440Sjkim
1716271440SjkimOptionalReference
1717271440Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
1718271440Sjkim    | ','                           {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
1719271440Sjkim    | ',' TermArg                   {$$ = $2;}
1720271440Sjkim    ;
1721271440Sjkim
1722271440SjkimOptionalReturnArg
1723271440Sjkim    :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
1724271440Sjkim    | TermArg                       {$$ = $1;}
1725271440Sjkim    ;
1726271440Sjkim
1727271440SjkimOptionalSerializeRuleKeyword
1728271440Sjkim    :                               {$$ = NULL;}
1729271440Sjkim    | ','                           {$$ = NULL;}
1730271440Sjkim    | ',' SerializeRuleKeyword      {$$ = $2;}
1731271440Sjkim    ;
1732271440Sjkim
1733271440SjkimOptionalTermArg
1734306536Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
1735271440Sjkim    | TermArg                       {$$ = $1;}
1736271440Sjkim    ;
1737271440Sjkim
1738306536SjkimOptionalBufferLength
1739271440Sjkim    :                               {$$ = NULL;}
1740306536Sjkim    | TermArg                       {$$ = $1;}
1741271440Sjkim    ;
1742271440Sjkim
1743271440SjkimOptionalWordConst
1744271440Sjkim    :                               {$$ = NULL;}
1745271440Sjkim    | WordConst                     {$$ = $1;}
1746271440Sjkim    ;
1747