aslrules.y revision 281687
1271440SjkimNoEcho('
2271440Sjkim/******************************************************************************
3271440Sjkim *
4271440Sjkim * Module Name: aslrules.y - Bison/Yacc production rules
5271440Sjkim *
6271440Sjkim *****************************************************************************/
7271440Sjkim
8271440Sjkim/*
9281075Sdim * Copyright (C) 2000 - 2015, 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 *
49271440Sjkim * Production rules start here
50271440Sjkim *
51271440Sjkim ******************************************************************************/
52271440Sjkim
53271440Sjkim/*
54271440Sjkim * ASL Names
55271440Sjkim *
56271440Sjkim * Root rule. Allow multiple #line directives before the definition block
57271440Sjkim * to handle output from preprocessors
58271440Sjkim */
59271440SjkimASLCode
60271440Sjkim    : DefinitionBlockTerm
61271440Sjkim    | error                         {YYABORT; $$ = NULL;}
62271440Sjkim    ;
63271440Sjkim
64271440Sjkim/*
65271440Sjkim * Blocks, Data, and Opcodes
66271440Sjkim */
67271440Sjkim
68271440Sjkim/*
69271440Sjkim * Note concerning support for "module-level code".
70271440Sjkim *
71271440Sjkim * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
72271440Sjkim * methods (the so-called module-level code.) This support was explicitly
73271440Sjkim * removed in ACPI 2.0, but this type of code continues to be created by
74271440Sjkim * BIOS vendors. In order to support the disassembly and recompilation of
75271440Sjkim * such code (and the porting of ASL code to iASL), iASL supports this
76271440Sjkim * code in violation of the current ACPI specification.
77271440Sjkim *
78271440Sjkim * The grammar change to support module-level code is to revert the
79271440Sjkim * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
80271440Sjkim * original use of {TermList} instead (see below.) This allows the use
81271440Sjkim * of Type1 and Type2 opcodes at module level.
82271440Sjkim */
83271440SjkimDefinitionBlockTerm
84271440Sjkim    : PARSEOP_DEFINITIONBLOCK '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITIONBLOCK);}
85271440Sjkim        String ','
86271440Sjkim        String ','
87271440Sjkim        ByteConst ','
88271440Sjkim        String ','
89271440Sjkim        String ','
90271440Sjkim        DWordConst
91271440Sjkim        ')'                         {TrSetEndLineNumber ($<n>3);}
92271440Sjkim            '{' TermList '}'        {$$ = TrLinkChildren ($<n>3,7,$4,$6,$8,$10,$12,$14,$18);}
93271440Sjkim    ;
94271440Sjkim
95281075Sdim    /*
96281075Sdim     * ASL Extensions: C-style math/logical operators and expressions.
97281075Sdim     * The implementation transforms these operators into the standard
98281075Sdim     * AML opcodes and syntax.
99281075Sdim     *
100281075Sdim     * Supported operators and precedence rules (high-to-low)
101281075Sdim     *
102281075Sdim     * NOTE: The operator precedence and associativity rules are
103281075Sdim     * implemented by the tokens in asltokens.y
104281075Sdim     *
105281075Sdim     * (left-to-right):
106281075Sdim     *  1)      ( ) expr++ expr--
107281075Sdim     *
108281075Sdim     * (right-to-left):
109281075Sdim     *  2)      ! ~
110281075Sdim     *
111281075Sdim     * (left-to-right):
112281075Sdim     *  3)      *   /   %
113281075Sdim     *  4)      +   -
114281075Sdim     *  5)      >>  <<
115281075Sdim     *  6)      <   >   <=  >=
116281075Sdim     *  7)      ==  !=
117281075Sdim     *  8)      &
118281075Sdim     *  9)      ^
119281075Sdim     *  10)     |
120281075Sdim     *  11)     &&
121281075Sdim     *  12)     ||
122281075Sdim     *
123281075Sdim     * (right-to-left):
124281075Sdim     *  13)     = += -= *= /= %= <<= >>= &= ^= |=
125281075Sdim     */
126281075SdimExpression
127281075Sdim
128281075Sdim    /* Unary operators */
129281075Sdim
130281075Sdim    : PARSEOP_EXP_LOGICAL_NOT           {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
131281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>2,1,$3);}
132281075Sdim    | PARSEOP_EXP_NOT                   {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
133281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>2,2,$3,TrCreateNullTarget ());}
134281075Sdim
135281075Sdim    | SuperName PARSEOP_EXP_INCREMENT   {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
136281075Sdim                                        {$$ = TrLinkChildren ($<n>3,1,$1);}
137281075Sdim    | SuperName PARSEOP_EXP_DECREMENT   {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
138281075Sdim                                        {$$ = TrLinkChildren ($<n>3,1,$1);}
139281075Sdim
140281075Sdim    /* Binary operators: math and logical */
141281075Sdim
142281075Sdim    | TermArg PARSEOP_EXP_ADD           {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
143281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
144281075Sdim    | TermArg PARSEOP_EXP_DIVIDE        {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
145281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>3,4,$1,$4,TrCreateNullTarget (),
146281687Sjkim                                            TrCreateNullTarget ());}
147281075Sdim    | TermArg PARSEOP_EXP_MODULO        {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
148281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
149281075Sdim    | TermArg PARSEOP_EXP_MULTIPLY      {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
150281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
151281075Sdim    | TermArg PARSEOP_EXP_SHIFT_LEFT    {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
152281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
153281075Sdim    | TermArg PARSEOP_EXP_SHIFT_RIGHT   {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
154281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
155281075Sdim    | TermArg PARSEOP_EXP_SUBTRACT      {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
156281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
157281075Sdim
158281075Sdim    | TermArg PARSEOP_EXP_AND           {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
159281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
160281075Sdim    | TermArg PARSEOP_EXP_OR            {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
161281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
162281075Sdim    | TermArg PARSEOP_EXP_XOR           {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
163281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,TrCreateNullTarget ());}
164281075Sdim
165281075Sdim    | TermArg PARSEOP_EXP_GREATER       {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
166281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
167281075Sdim    | TermArg PARSEOP_EXP_GREATER_EQUAL {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATEREQUAL);}
168281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
169281075Sdim    | TermArg PARSEOP_EXP_LESS          {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
170281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
171281075Sdim    | TermArg PARSEOP_EXP_LESS_EQUAL    {$<n>$ = TrCreateLeafNode (PARSEOP_LLESSEQUAL);}
172281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
173281075Sdim
174281075Sdim    | TermArg PARSEOP_EXP_EQUAL         {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
175281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
176281075Sdim    | TermArg PARSEOP_EXP_NOT_EQUAL     {$<n>$ = TrCreateLeafNode (PARSEOP_LNOTEQUAL);}
177281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
178281075Sdim
179281075Sdim    | TermArg PARSEOP_EXP_LOGICAL_AND   {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
180281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
181281075Sdim    | TermArg PARSEOP_EXP_LOGICAL_OR    {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
182281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,2,$1,$4);}
183281075Sdim
184281075Sdim      /* Parentheses */
185281075Sdim
186281075Sdim    | '(' TermArg ')'                   { $$ = $2;}
187281075Sdim    ;
188281075Sdim
189281075SdimEqualsTerm
190281075Sdim
191281075Sdim    /* All assignment-type operations */
192281075Sdim
193281075Sdim    : SuperName PARSEOP_EXP_EQUALS
194281075Sdim        TermArg                         {$$ = TrCreateAssignmentNode ($1, $3);}
195281075Sdim
196281075Sdim    | TermArg PARSEOP_EXP_ADD_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
197281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
198281075Sdim                                            TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
199281075Sdim
200281075Sdim    | TermArg PARSEOP_EXP_DIV_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
201281687Sjkim        TermArg                         {$$ = TrLinkChildren ($<n>3,4,$1,$4,TrCreateNullTarget (),
202281075Sdim                                            TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
203281075Sdim
204281075Sdim    | TermArg PARSEOP_EXP_MOD_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
205281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
206281075Sdim                                            TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
207281075Sdim
208281075Sdim    | TermArg PARSEOP_EXP_MUL_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
209281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
210281075Sdim                                            TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
211281075Sdim
212281075Sdim    | TermArg PARSEOP_EXP_SHL_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
213281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
214281075Sdim                                            TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
215281075Sdim
216281075Sdim    | TermArg PARSEOP_EXP_SHR_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
217281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
218281075Sdim                                            TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
219281075Sdim
220281075Sdim    | TermArg PARSEOP_EXP_SUB_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
221281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
222281075Sdim                                            TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
223281075Sdim
224281075Sdim    | TermArg PARSEOP_EXP_AND_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
225281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
226281075Sdim                                            TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
227281075Sdim
228281075Sdim    | TermArg PARSEOP_EXP_OR_EQ         {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
229281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
230281075Sdim                                            TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
231281075Sdim
232281075Sdim    | TermArg PARSEOP_EXP_XOR_EQ        {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
233281075Sdim        TermArg                         {$$ = TrLinkChildren ($<n>3,3,$1,$4,
234281075Sdim                                            TrSetNodeFlags (TrCreateTargetOperand ($1, NULL), NODE_IS_TARGET));}
235281075Sdim    ;
236281075Sdim
237281075Sdim
238271440Sjkim/* ACPI 3.0 -- allow semicolons between terms */
239271440Sjkim
240271440SjkimTermList
241271440Sjkim    :                               {$$ = NULL;}
242271440Sjkim    | TermList Term                 {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
243271440Sjkim    | TermList Term ';'             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
244271440Sjkim    | TermList ';' Term             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
245271440Sjkim    | TermList ';' Term ';'         {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
246271440Sjkim    ;
247271440Sjkim
248271440SjkimTerm
249271440Sjkim    : Object                        {}
250271440Sjkim    | Type1Opcode                   {}
251271440Sjkim    | Type2Opcode                   {}
252281687Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
253281687Sjkim    | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
254271440Sjkim    | Type2BufferOpcode             {}
255271440Sjkim    | Type2BufferOrStringOpcode     {}
256271440Sjkim    | error                         {$$ = AslDoError(); yyclearin;}
257271440Sjkim    ;
258271440Sjkim
259271440SjkimCompilerDirective
260271440Sjkim    : IncludeTerm                   {}
261271440Sjkim    | ExternalTerm                  {}
262271440Sjkim    ;
263271440Sjkim
264271440SjkimObjectList
265271440Sjkim    :                               {$$ = NULL;}
266271440Sjkim    | ObjectList Object             {$$ = TrLinkPeerNode ($1,$2);}
267271440Sjkim    | error                         {$$ = AslDoError(); yyclearin;}
268271440Sjkim    ;
269271440Sjkim
270271440SjkimObject
271271440Sjkim    : CompilerDirective             {}
272271440Sjkim    | NamedObject                   {}
273271440Sjkim    | NameSpaceModifier             {}
274271440Sjkim    ;
275271440Sjkim
276271440SjkimDataObject
277271440Sjkim    : BufferData                    {}
278271440Sjkim    | PackageData                   {}
279271440Sjkim    | IntegerData                   {}
280271440Sjkim    | StringData                    {}
281271440Sjkim    ;
282271440Sjkim
283271440SjkimBufferData
284271440Sjkim    : Type5Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
285271440Sjkim    | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
286271440Sjkim    | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
287271440Sjkim    | BufferTerm                    {}
288271440Sjkim    ;
289271440Sjkim
290271440SjkimPackageData
291271440Sjkim    : PackageTerm                   {}
292271440Sjkim    ;
293271440Sjkim
294271440SjkimIntegerData
295271440Sjkim    : Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
296271440Sjkim    | Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
297271440Sjkim    | Integer                       {}
298271440Sjkim    | ConstTerm                     {}
299271440Sjkim    ;
300271440Sjkim
301271440SjkimStringData
302271440Sjkim    : Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
303271440Sjkim    | String                        {}
304271440Sjkim    ;
305271440Sjkim
306271440SjkimNamedObject
307271440Sjkim    : BankFieldTerm                 {}
308271440Sjkim    | CreateBitFieldTerm            {}
309271440Sjkim    | CreateByteFieldTerm           {}
310271440Sjkim    | CreateDWordFieldTerm          {}
311271440Sjkim    | CreateFieldTerm               {}
312271440Sjkim    | CreateQWordFieldTerm          {}
313271440Sjkim    | CreateWordFieldTerm           {}
314271440Sjkim    | DataRegionTerm                {}
315271440Sjkim    | DeviceTerm                    {}
316271440Sjkim    | EventTerm                     {}
317271440Sjkim    | FieldTerm                     {}
318271440Sjkim    | FunctionTerm                  {}
319271440Sjkim    | IndexFieldTerm                {}
320271440Sjkim    | MethodTerm                    {}
321271440Sjkim    | MutexTerm                     {}
322271440Sjkim    | OpRegionTerm                  {}
323271440Sjkim    | PowerResTerm                  {}
324271440Sjkim    | ProcessorTerm                 {}
325271440Sjkim    | ThermalZoneTerm               {}
326271440Sjkim    ;
327271440Sjkim
328271440SjkimNameSpaceModifier
329271440Sjkim    : AliasTerm                     {}
330271440Sjkim    | NameTerm                      {}
331271440Sjkim    | ScopeTerm                     {}
332271440Sjkim    ;
333271440Sjkim
334281687SjkimMethodInvocationTerm
335271440Sjkim    : NameString '('                {TrUpdateNode (PARSEOP_METHODCALL, $1);}
336271440Sjkim        ArgList ')'                 {$$ = TrLinkChildNode ($1,$4);}
337271440Sjkim    ;
338271440Sjkim
339271440SjkimArgList
340271440Sjkim    :                               {$$ = NULL;}
341271440Sjkim    | TermArg
342271440Sjkim    | ArgList ','                   /* Allows a trailing comma at list end */
343271440Sjkim    | ArgList ','
344271440Sjkim        TermArg                     {$$ = TrLinkPeerNode ($1,$3);}
345271440Sjkim    ;
346271440Sjkim
347271440Sjkim/*
348271440SjkimRemoved from TermArg due to reduce/reduce conflicts
349271440Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
350271440Sjkim    | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
351271440Sjkim    | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
352271440Sjkim    | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
353271440Sjkim
354271440Sjkim*/
355271440Sjkim
356271440SjkimTermArg
357281687Sjkim    : Type2Opcode                   {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
358271440Sjkim    | DataObject                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
359271440Sjkim    | NameString                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
360271440Sjkim    | ArgTerm                       {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
361271440Sjkim    | LocalTerm                     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
362271440Sjkim    ;
363271440Sjkim
364271440SjkimTarget
365281687Sjkim    :                               {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
366281687Sjkim    | ','                           {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
367271440Sjkim    | ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
368271440Sjkim    ;
369271440Sjkim
370271440SjkimRequiredTarget
371271440Sjkim    : ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
372271440Sjkim    ;
373271440Sjkim
374271440SjkimSimpleTarget
375271440Sjkim    : NameString                    {}
376271440Sjkim    | LocalTerm                     {}
377271440Sjkim    | ArgTerm                       {}
378271440Sjkim    ;
379271440Sjkim
380271440Sjkim/* Rules for specifying the type of one method argument or return value */
381271440Sjkim
382271440SjkimParameterTypePackage
383271440Sjkim    :                               {$$ = NULL;}
384271440Sjkim    | ObjectTypeKeyword             {$$ = $1;}
385271440Sjkim    | ParameterTypePackage ','
386271440Sjkim        ObjectTypeKeyword           {$$ = TrLinkPeerNodes (2,$1,$3);}
387271440Sjkim    ;
388271440Sjkim
389271440SjkimParameterTypePackageList
390271440Sjkim    :                               {$$ = NULL;}
391271440Sjkim    | ObjectTypeKeyword             {$$ = $1;}
392271440Sjkim    | '{' ParameterTypePackage '}'  {$$ = $2;}
393271440Sjkim    ;
394271440Sjkim
395271440SjkimOptionalParameterTypePackage
396271440Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
397271440Sjkim    | ',' ParameterTypePackageList  {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
398271440Sjkim    ;
399271440Sjkim
400271440Sjkim/* Rules for specifying the types for method arguments */
401271440Sjkim
402271440SjkimParameterTypesPackage
403271440Sjkim    : ParameterTypePackageList      {$$ = $1;}
404271440Sjkim    | ParameterTypesPackage ','
405271440Sjkim        ParameterTypePackageList    {$$ = TrLinkPeerNodes (2,$1,$3);}
406271440Sjkim    ;
407271440Sjkim
408271440SjkimParameterTypesPackageList
409271440Sjkim    :                               {$$ = NULL;}
410271440Sjkim    | ObjectTypeKeyword             {$$ = $1;}
411271440Sjkim    | '{' ParameterTypesPackage '}' {$$ = $2;}
412271440Sjkim    ;
413271440Sjkim
414271440SjkimOptionalParameterTypesPackage
415271440Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
416271440Sjkim    | ',' ParameterTypesPackageList {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
417271440Sjkim    ;
418271440Sjkim
419271440Sjkim
420271440Sjkim/* Opcode types */
421271440Sjkim
422271440SjkimType1Opcode
423271440Sjkim    : BreakTerm                     {}
424271440Sjkim    | BreakPointTerm                {}
425271440Sjkim    | ContinueTerm                  {}
426271440Sjkim    | FatalTerm                     {}
427271440Sjkim    | IfElseTerm                    {}
428271440Sjkim    | LoadTerm                      {}
429271440Sjkim    | NoOpTerm                      {}
430271440Sjkim    | NotifyTerm                    {}
431271440Sjkim    | ReleaseTerm                   {}
432271440Sjkim    | ResetTerm                     {}
433271440Sjkim    | ReturnTerm                    {}
434271440Sjkim    | SignalTerm                    {}
435271440Sjkim    | SleepTerm                     {}
436271440Sjkim    | StallTerm                     {}
437271440Sjkim    | SwitchTerm                    {}
438271440Sjkim    | UnloadTerm                    {}
439271440Sjkim    | WhileTerm                     {}
440271440Sjkim    ;
441271440Sjkim
442271440SjkimType2Opcode
443271440Sjkim    : AcquireTerm                   {}
444271440Sjkim    | CondRefOfTerm                 {}
445271440Sjkim    | CopyObjectTerm                {}
446271440Sjkim    | DerefOfTerm                   {}
447271440Sjkim    | ObjectTypeTerm                {}
448271440Sjkim    | RefOfTerm                     {}
449271440Sjkim    | SizeOfTerm                    {}
450271440Sjkim    | StoreTerm                     {}
451281075Sdim    | EqualsTerm                    {}
452271440Sjkim    | TimerTerm                     {}
453271440Sjkim    | WaitTerm                      {}
454281687Sjkim    | MethodInvocationTerm          {}
455271440Sjkim    ;
456271440Sjkim
457271440Sjkim/*
458271440Sjkim * Type 3/4/5 opcodes
459271440Sjkim */
460271440Sjkim
461271440SjkimType2IntegerOpcode                  /* "Type3" opcodes */
462281687Sjkim    : Expression                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
463281687Sjkim    | AddTerm                       {}
464271440Sjkim    | AndTerm                       {}
465271440Sjkim    | DecTerm                       {}
466271440Sjkim    | DivideTerm                    {}
467271440Sjkim    | FindSetLeftBitTerm            {}
468271440Sjkim    | FindSetRightBitTerm           {}
469271440Sjkim    | FromBCDTerm                   {}
470271440Sjkim    | IncTerm                       {}
471271440Sjkim    | IndexTerm                     {}
472271440Sjkim    | LAndTerm                      {}
473271440Sjkim    | LEqualTerm                    {}
474271440Sjkim    | LGreaterTerm                  {}
475271440Sjkim    | LGreaterEqualTerm             {}
476271440Sjkim    | LLessTerm                     {}
477271440Sjkim    | LLessEqualTerm                {}
478271440Sjkim    | LNotTerm                      {}
479271440Sjkim    | LNotEqualTerm                 {}
480271440Sjkim    | LoadTableTerm                 {}
481271440Sjkim    | LOrTerm                       {}
482271440Sjkim    | MatchTerm                     {}
483271440Sjkim    | ModTerm                       {}
484271440Sjkim    | MultiplyTerm                  {}
485271440Sjkim    | NAndTerm                      {}
486271440Sjkim    | NOrTerm                       {}
487271440Sjkim    | NotTerm                       {}
488271440Sjkim    | OrTerm                        {}
489271440Sjkim    | ShiftLeftTerm                 {}
490271440Sjkim    | ShiftRightTerm                {}
491271440Sjkim    | SubtractTerm                  {}
492271440Sjkim    | ToBCDTerm                     {}
493271440Sjkim    | ToIntegerTerm                 {}
494271440Sjkim    | XOrTerm                       {}
495271440Sjkim    ;
496271440Sjkim
497271440SjkimType2StringOpcode                   /* "Type4" Opcodes */
498271440Sjkim    : ToDecimalStringTerm           {}
499271440Sjkim    | ToHexStringTerm               {}
500271440Sjkim    | ToStringTerm                  {}
501271440Sjkim    ;
502271440Sjkim
503271440SjkimType2BufferOpcode                   /* "Type5" Opcodes */
504271440Sjkim    : ToBufferTerm                  {}
505271440Sjkim    | ConcatResTerm                 {}
506271440Sjkim    ;
507271440Sjkim
508271440SjkimType2BufferOrStringOpcode
509281687Sjkim    : ConcatTerm                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
510281075Sdim    | PrintfTerm                    {}
511281075Sdim    | FprintfTerm                   {}
512271440Sjkim    | MidTerm                       {}
513271440Sjkim    ;
514271440Sjkim
515271440Sjkim/*
516271440Sjkim * A type 3 opcode evaluates to an Integer and cannot have a destination operand
517271440Sjkim */
518271440Sjkim
519271440SjkimType3Opcode
520271440Sjkim    : EISAIDTerm                    {}
521271440Sjkim    ;
522271440Sjkim
523271440Sjkim/* Obsolete
524271440SjkimType4Opcode
525271440Sjkim    : ConcatTerm                    {}
526271440Sjkim    | ToDecimalStringTerm           {}
527271440Sjkim    | ToHexStringTerm               {}
528271440Sjkim    | MidTerm                       {}
529271440Sjkim    | ToStringTerm                  {}
530271440Sjkim    ;
531271440Sjkim*/
532271440Sjkim
533271440Sjkim
534271440SjkimType5Opcode
535271440Sjkim    : ResourceTemplateTerm          {}
536271440Sjkim    | UnicodeTerm                   {}
537281075Sdim    | ToPLDTerm                     {}
538271440Sjkim    | ToUUIDTerm                    {}
539271440Sjkim    ;
540271440Sjkim
541271440SjkimType6Opcode
542271440Sjkim    : RefOfTerm                     {}
543271440Sjkim    | DerefOfTerm                   {}
544271440Sjkim    | IndexTerm                     {}
545281687Sjkim    | MethodInvocationTerm          {}
546271440Sjkim    ;
547271440Sjkim
548271440SjkimIncludeTerm
549271440Sjkim    : PARSEOP_INCLUDE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE);}
550271440Sjkim        String  ')'                 {TrLinkChildren ($<n>3,1,$4);FlOpenIncludeFile ($4);}
551271440Sjkim        TermList
552271440Sjkim        IncludeEndTerm              {$$ = TrLinkPeerNodes (3,$<n>3,$7,$8);}
553271440Sjkim    ;
554271440Sjkim
555271440SjkimIncludeEndTerm
556271440Sjkim    : PARSEOP_INCLUDE_END           {$$ = TrCreateLeafNode (PARSEOP_INCLUDE_END);}
557271440Sjkim    ;
558271440Sjkim
559271440SjkimExternalTerm
560271440Sjkim    : PARSEOP_EXTERNAL '('
561271440Sjkim        NameString
562271440Sjkim        OptionalObjectTypeKeyword
563271440Sjkim        OptionalParameterTypePackage
564271440Sjkim        OptionalParameterTypesPackage
565271440Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_EXTERNAL,4,$3,$4,$5,$6);}
566271440Sjkim    | PARSEOP_EXTERNAL '('
567271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
568271440Sjkim    ;
569271440Sjkim
570271440Sjkim
571271440Sjkim/******* Named Objects *******************************************************/
572271440Sjkim
573271440Sjkim
574271440SjkimBankFieldTerm
575271440Sjkim    : PARSEOP_BANKFIELD '('         {$<n>$ = TrCreateLeafNode (PARSEOP_BANKFIELD);}
576271440Sjkim        NameString
577271440Sjkim        NameStringItem
578271440Sjkim        TermArgItem
579271440Sjkim        ',' AccessTypeKeyword
580271440Sjkim        ',' LockRuleKeyword
581271440Sjkim        ',' UpdateRuleKeyword
582271440Sjkim        ')' '{'
583271440Sjkim            FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,7,$4,$5,$6,$8,$10,$12,$15);}
584271440Sjkim    | PARSEOP_BANKFIELD '('
585271440Sjkim        error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
586271440Sjkim    ;
587271440Sjkim
588271440SjkimFieldUnitList
589271440Sjkim    :                               {$$ = NULL;}
590271440Sjkim    | FieldUnit
591271440Sjkim    | FieldUnitList ','             /* Allows a trailing comma at list end */
592271440Sjkim    | FieldUnitList ','
593271440Sjkim        FieldUnit                   {$$ = TrLinkPeerNode ($1,$3);}
594271440Sjkim    ;
595271440Sjkim
596271440SjkimFieldUnit
597271440Sjkim    : FieldUnitEntry                {}
598271440Sjkim    | OffsetTerm                    {}
599271440Sjkim    | AccessAsTerm                  {}
600271440Sjkim    | ConnectionTerm                {}
601271440Sjkim    ;
602271440Sjkim
603271440SjkimFieldUnitEntry
604271440Sjkim    : ',' AmlPackageLengthTerm      {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);}
605271440Sjkim    | NameSeg ','
606271440Sjkim        AmlPackageLengthTerm        {$$ = TrLinkChildNode ($1,$3);}
607271440Sjkim    ;
608271440Sjkim
609271440SjkimOffsetTerm
610271440Sjkim    : PARSEOP_OFFSET '('
611271440Sjkim        AmlPackageLengthTerm
612271440Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_OFFSET,1,$3);}
613271440Sjkim    | PARSEOP_OFFSET '('
614271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
615271440Sjkim    ;
616271440Sjkim
617271440SjkimAccessAsTerm
618271440Sjkim    : PARSEOP_ACCESSAS '('
619271440Sjkim        AccessTypeKeyword
620271440Sjkim        OptionalAccessAttribTerm
621271440Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_ACCESSAS,2,$3,$4);}
622271440Sjkim    | PARSEOP_ACCESSAS '('
623271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
624271440Sjkim    ;
625271440Sjkim
626271440SjkimConnectionTerm
627271440Sjkim    : PARSEOP_CONNECTION '('
628271440Sjkim        NameString
629271440Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_CONNECTION,1,$3);}
630271440Sjkim    | PARSEOP_CONNECTION '('        {$<n>$ = TrCreateLeafNode (PARSEOP_CONNECTION);}
631271440Sjkim        ResourceMacroTerm
632271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3, 1,
633271440Sjkim                                            TrLinkChildren (TrCreateLeafNode (PARSEOP_RESOURCETEMPLATE), 3,
634271440Sjkim                                                TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
635271440Sjkim                                                TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
636271440Sjkim                                                $4));}
637271440Sjkim    | PARSEOP_CONNECTION '('
638271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
639271440Sjkim    ;
640271440Sjkim
641271440SjkimCreateBitFieldTerm
642271440Sjkim    : PARSEOP_CREATEBITFIELD '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBITFIELD);}
643271440Sjkim        TermArg
644271440Sjkim        TermArgItem
645271440Sjkim        NameStringItem
646271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
647271440Sjkim    | PARSEOP_CREATEBITFIELD '('
648271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
649271440Sjkim    ;
650271440Sjkim
651271440SjkimCreateByteFieldTerm
652271440Sjkim    : PARSEOP_CREATEBYTEFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBYTEFIELD);}
653271440Sjkim        TermArg
654271440Sjkim        TermArgItem
655271440Sjkim        NameStringItem
656271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
657271440Sjkim    | PARSEOP_CREATEBYTEFIELD '('
658271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
659271440Sjkim    ;
660271440Sjkim
661271440SjkimCreateDWordFieldTerm
662271440Sjkim    : PARSEOP_CREATEDWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEDWORDFIELD);}
663271440Sjkim        TermArg
664271440Sjkim        TermArgItem
665271440Sjkim        NameStringItem
666271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
667271440Sjkim    | PARSEOP_CREATEDWORDFIELD '('
668271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
669271440Sjkim    ;
670271440Sjkim
671271440SjkimCreateFieldTerm
672271440Sjkim    : PARSEOP_CREATEFIELD '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEFIELD);}
673271440Sjkim        TermArg
674271440Sjkim        TermArgItem
675271440Sjkim        TermArgItem
676271440Sjkim        NameStringItem
677271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,TrSetNodeFlags ($7, NODE_IS_NAME_DECLARATION));}
678271440Sjkim    | PARSEOP_CREATEFIELD '('
679271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
680271440Sjkim    ;
681271440Sjkim
682271440SjkimCreateQWordFieldTerm
683271440Sjkim    : PARSEOP_CREATEQWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEQWORDFIELD);}
684271440Sjkim        TermArg
685271440Sjkim        TermArgItem
686271440Sjkim        NameStringItem
687271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
688271440Sjkim    | PARSEOP_CREATEQWORDFIELD '('
689271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
690271440Sjkim    ;
691271440Sjkim
692271440SjkimCreateWordFieldTerm
693271440Sjkim    : PARSEOP_CREATEWORDFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEWORDFIELD);}
694271440Sjkim        TermArg
695271440Sjkim        TermArgItem
696271440Sjkim        NameStringItem
697271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
698271440Sjkim    | PARSEOP_CREATEWORDFIELD '('
699271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
700271440Sjkim    ;
701271440Sjkim
702271440SjkimDataRegionTerm
703271440Sjkim    : PARSEOP_DATATABLEREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DATATABLEREGION);}
704271440Sjkim        NameString
705271440Sjkim        TermArgItem
706271440Sjkim        TermArgItem
707271440Sjkim        TermArgItem
708271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$6,$7);}
709271440Sjkim    | PARSEOP_DATATABLEREGION '('
710271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
711271440Sjkim    ;
712271440Sjkim
713271440SjkimDeviceTerm
714271440Sjkim    : PARSEOP_DEVICE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
715271440Sjkim        NameString
716271440Sjkim        ')' '{'
717271440Sjkim            ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
718271440Sjkim    | PARSEOP_DEVICE '('
719271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
720271440Sjkim    ;
721271440Sjkim
722271440SjkimEventTerm
723271440Sjkim    : PARSEOP_EVENT '('             {$<n>$ = TrCreateLeafNode (PARSEOP_EVENT);}
724271440Sjkim        NameString
725271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION));}
726271440Sjkim    | PARSEOP_EVENT '('
727271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
728271440Sjkim    ;
729271440Sjkim
730271440SjkimFieldTerm
731271440Sjkim    : PARSEOP_FIELD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FIELD);}
732271440Sjkim        NameString
733271440Sjkim        ',' AccessTypeKeyword
734271440Sjkim        ',' LockRuleKeyword
735271440Sjkim        ',' UpdateRuleKeyword
736271440Sjkim        ')' '{'
737271440Sjkim            FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$10,$13);}
738271440Sjkim    | PARSEOP_FIELD '('
739271440Sjkim        error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
740271440Sjkim    ;
741271440Sjkim
742271440SjkimFunctionTerm
743271440Sjkim    : PARSEOP_FUNCTION '('          {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
744271440Sjkim        NameString
745271440Sjkim        OptionalParameterTypePackage
746271440Sjkim        OptionalParameterTypesPackage
747271440Sjkim        ')' '{'
748271440Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
749271440Sjkim                                        TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
750271440Sjkim                                        TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
751271440Sjkim                                        TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$9);}
752271440Sjkim    | PARSEOP_FUNCTION '('
753271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
754271440Sjkim    ;
755271440Sjkim
756271440SjkimIndexFieldTerm
757271440Sjkim    : PARSEOP_INDEXFIELD '('        {$<n>$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
758271440Sjkim        NameString
759271440Sjkim        NameStringItem
760271440Sjkim        ',' AccessTypeKeyword
761271440Sjkim        ',' LockRuleKeyword
762271440Sjkim        ',' UpdateRuleKeyword
763271440Sjkim        ')' '{'
764271440Sjkim            FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
765271440Sjkim    | PARSEOP_INDEXFIELD '('
766271440Sjkim        error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
767271440Sjkim    ;
768271440Sjkim
769271440SjkimMethodTerm
770271440Sjkim    : PARSEOP_METHOD  '('           {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
771271440Sjkim        NameString
772271440Sjkim        OptionalByteConstExpr       {UtCheckIntegerRange ($5, 0, 7);}
773271440Sjkim        OptionalSerializeRuleKeyword
774271440Sjkim        OptionalByteConstExpr
775271440Sjkim        OptionalParameterTypePackage
776271440Sjkim        OptionalParameterTypesPackage
777271440Sjkim        ')' '{'
778271440Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$7,$8,$9,$10,$13);}
779271440Sjkim    | PARSEOP_METHOD '('
780271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
781271440Sjkim    ;
782271440Sjkim
783271440SjkimMutexTerm
784271440Sjkim    : PARSEOP_MUTEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MUTEX);}
785271440Sjkim        NameString
786271440Sjkim        ',' ByteConstExpr
787271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
788271440Sjkim    | PARSEOP_MUTEX '('
789271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
790271440Sjkim    ;
791271440Sjkim
792271440SjkimOpRegionTerm
793271440Sjkim    : PARSEOP_OPERATIONREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_OPERATIONREGION);}
794271440Sjkim        NameString
795271440Sjkim        ',' OpRegionSpaceIdTerm
796271440Sjkim        TermArgItem
797271440Sjkim        TermArgItem
798271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8);}
799271440Sjkim    | PARSEOP_OPERATIONREGION '('
800271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
801271440Sjkim    ;
802271440Sjkim
803271440SjkimOpRegionSpaceIdTerm
804271440Sjkim    : RegionSpaceKeyword            {}
805271440Sjkim    | ByteConst                     {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
806271440Sjkim    ;
807271440Sjkim
808271440SjkimPowerResTerm
809271440Sjkim    : PARSEOP_POWERRESOURCE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_POWERRESOURCE);}
810271440Sjkim        NameString
811271440Sjkim        ',' ByteConstExpr
812271440Sjkim        ',' WordConstExpr
813271440Sjkim        ')' '{'
814271440Sjkim            ObjectList '}'          {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$8,$11);}
815271440Sjkim    | PARSEOP_POWERRESOURCE '('
816271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
817271440Sjkim    ;
818271440Sjkim
819271440SjkimProcessorTerm
820271440Sjkim    : PARSEOP_PROCESSOR '('         {$<n>$ = TrCreateLeafNode (PARSEOP_PROCESSOR);}
821271440Sjkim        NameString
822271440Sjkim        ',' ByteConstExpr
823271440Sjkim        OptionalDWordConstExpr
824271440Sjkim        OptionalByteConstExpr
825271440Sjkim        ')' '{'
826271440Sjkim            ObjectList '}'          {$$ = TrLinkChildren ($<n>3,5,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8,$11);}
827271440Sjkim    | PARSEOP_PROCESSOR '('
828271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
829271440Sjkim    ;
830271440Sjkim
831271440SjkimThermalZoneTerm
832271440Sjkim    : PARSEOP_THERMALZONE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
833271440Sjkim        NameString
834271440Sjkim        ')' '{'
835271440Sjkim            ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
836271440Sjkim    | PARSEOP_THERMALZONE '('
837271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
838271440Sjkim    ;
839271440Sjkim
840271440Sjkim
841271440Sjkim/******* Namespace modifiers *************************************************/
842271440Sjkim
843271440Sjkim
844271440SjkimAliasTerm
845271440Sjkim    : PARSEOP_ALIAS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_ALIAS);}
846271440Sjkim        NameString
847271440Sjkim        NameStringItem
848271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($5, NODE_IS_NAME_DECLARATION));}
849271440Sjkim    | PARSEOP_ALIAS '('
850271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
851271440Sjkim    ;
852271440Sjkim
853271440SjkimNameTerm
854271440Sjkim    : PARSEOP_NAME '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAME);}
855271440Sjkim        NameString
856271440Sjkim        ',' DataObject
857271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
858271440Sjkim    | PARSEOP_NAME '('
859271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
860271440Sjkim    ;
861271440Sjkim
862271440SjkimScopeTerm
863271440Sjkim    : PARSEOP_SCOPE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
864271440Sjkim        NameString
865271440Sjkim        ')' '{'
866271440Sjkim            ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
867271440Sjkim    | PARSEOP_SCOPE '('
868271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
869271440Sjkim    ;
870271440Sjkim
871271440Sjkim
872271440Sjkim/******* Type 1 opcodes *******************************************************/
873271440Sjkim
874271440Sjkim
875271440SjkimBreakTerm
876271440Sjkim    : PARSEOP_BREAK                 {$$ = TrCreateNode (PARSEOP_BREAK, 0);}
877271440Sjkim    ;
878271440Sjkim
879271440SjkimBreakPointTerm
880271440Sjkim    : PARSEOP_BREAKPOINT            {$$ = TrCreateNode (PARSEOP_BREAKPOINT, 0);}
881271440Sjkim    ;
882271440Sjkim
883271440SjkimContinueTerm
884271440Sjkim    : PARSEOP_CONTINUE              {$$ = TrCreateNode (PARSEOP_CONTINUE, 0);}
885271440Sjkim    ;
886271440Sjkim
887271440SjkimFatalTerm
888271440Sjkim    : PARSEOP_FATAL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FATAL);}
889271440Sjkim        ByteConstExpr
890271440Sjkim        ',' DWordConstExpr
891271440Sjkim        TermArgItem
892271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
893271440Sjkim    | PARSEOP_FATAL '('
894271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
895271440Sjkim    ;
896271440Sjkim
897271440SjkimIfElseTerm
898271440Sjkim    : IfTerm ElseTerm               {$$ = TrLinkPeerNode ($1,$2);}
899271440Sjkim    ;
900271440Sjkim
901271440SjkimIfTerm
902271440Sjkim    : PARSEOP_IF '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
903271440Sjkim        TermArg
904271440Sjkim        ')' '{'
905271440Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
906271440Sjkim
907271440Sjkim    | PARSEOP_IF '('
908271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
909271440Sjkim    ;
910271440Sjkim
911271440SjkimElseTerm
912271440Sjkim    :                               {$$ = NULL;}
913271440Sjkim    | PARSEOP_ELSE '{'              {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
914271440Sjkim        TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
915271440Sjkim
916271440Sjkim    | PARSEOP_ELSE '{'
917271440Sjkim        error '}'                   {$$ = AslDoError(); yyclearin;}
918271440Sjkim
919271440Sjkim    | PARSEOP_ELSE
920271440Sjkim        error                       {$$ = AslDoError(); yyclearin;}
921271440Sjkim
922271440Sjkim    | PARSEOP_ELSEIF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
923271440Sjkim        TermArg                     {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
924271440Sjkim        ')' '{'
925271440Sjkim            TermList '}'            {TrLinkChildren ($<n>5,2,$4,$8);}
926271440Sjkim        ElseTerm                    {TrLinkPeerNode ($<n>5,$11);}
927271440Sjkim                                    {$$ = TrLinkChildren ($<n>3,1,$<n>5);}
928271440Sjkim
929271440Sjkim    | PARSEOP_ELSEIF '('
930271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
931271440Sjkim
932271440Sjkim    | PARSEOP_ELSEIF
933271440Sjkim        error                       {$$ = AslDoError(); yyclearin;}
934271440Sjkim    ;
935271440Sjkim
936271440SjkimLoadTerm
937271440Sjkim    : PARSEOP_LOAD '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LOAD);}
938271440Sjkim        NameString
939271440Sjkim        RequiredTarget
940271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
941271440Sjkim    | PARSEOP_LOAD '('
942271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
943271440Sjkim    ;
944271440Sjkim
945271440SjkimNoOpTerm
946271440Sjkim    : PARSEOP_NOOP                  {$$ = TrCreateNode (PARSEOP_NOOP, 0);}
947271440Sjkim    ;
948271440Sjkim
949271440SjkimNotifyTerm
950271440Sjkim    : PARSEOP_NOTIFY '('            {$<n>$ = TrCreateLeafNode (PARSEOP_NOTIFY);}
951271440Sjkim        SuperName
952271440Sjkim        TermArgItem
953271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
954271440Sjkim    | PARSEOP_NOTIFY '('
955271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
956271440Sjkim    ;
957271440Sjkim
958271440SjkimReleaseTerm
959271440Sjkim    : PARSEOP_RELEASE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_RELEASE);}
960271440Sjkim        SuperName
961271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
962271440Sjkim    | PARSEOP_RELEASE '('
963271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
964271440Sjkim    ;
965271440Sjkim
966271440SjkimResetTerm
967271440Sjkim    : PARSEOP_RESET '('             {$<n>$ = TrCreateLeafNode (PARSEOP_RESET);}
968271440Sjkim        SuperName
969271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
970271440Sjkim    | PARSEOP_RESET '('
971271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
972271440Sjkim    ;
973271440Sjkim
974271440SjkimReturnTerm
975271440Sjkim    : PARSEOP_RETURN '('            {$<n>$ = TrCreateLeafNode (PARSEOP_RETURN);}
976271440Sjkim        OptionalReturnArg
977271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
978271440Sjkim    | PARSEOP_RETURN                {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),1,TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN));}
979271440Sjkim    | PARSEOP_RETURN '('
980271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
981271440Sjkim    ;
982271440Sjkim
983271440SjkimSignalTerm
984271440Sjkim    : PARSEOP_SIGNAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIGNAL);}
985271440Sjkim        SuperName
986271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
987271440Sjkim    | PARSEOP_SIGNAL '('
988271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
989271440Sjkim    ;
990271440Sjkim
991271440SjkimSleepTerm
992271440Sjkim    : PARSEOP_SLEEP '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SLEEP);}
993271440Sjkim        TermArg
994271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
995271440Sjkim    | PARSEOP_SLEEP '('
996271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
997271440Sjkim    ;
998271440Sjkim
999271440SjkimStallTerm
1000271440Sjkim    : PARSEOP_STALL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STALL);}
1001271440Sjkim        TermArg
1002271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1003271440Sjkim    | PARSEOP_STALL '('
1004271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1005271440Sjkim    ;
1006271440Sjkim
1007271440SjkimSwitchTerm
1008271440Sjkim    : PARSEOP_SWITCH '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SWITCH);}
1009271440Sjkim        TermArg
1010271440Sjkim        ')' '{'
1011271440Sjkim            CaseDefaultTermList '}'
1012271440Sjkim                                    {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1013271440Sjkim    | PARSEOP_SWITCH '('
1014271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1015271440Sjkim    ;
1016271440Sjkim
1017271440Sjkim/*
1018271440Sjkim * Case-Default list; allow only one Default term and unlimited Case terms
1019271440Sjkim */
1020271440Sjkim
1021271440SjkimCaseDefaultTermList
1022271440Sjkim    :                               {$$ = NULL;}
1023271440Sjkim    | CaseTerm  {}
1024271440Sjkim    | DefaultTerm   {}
1025271440Sjkim    | CaseDefaultTermList
1026271440Sjkim        CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
1027271440Sjkim    | CaseDefaultTermList
1028271440Sjkim        DefaultTerm                 {$$ = TrLinkPeerNode ($1,$2);}
1029271440Sjkim
1030271440Sjkim/* Original - attempts to force zero or one default term within the switch */
1031271440Sjkim
1032271440Sjkim/*
1033271440SjkimCaseDefaultTermList
1034271440Sjkim    :                               {$$ = NULL;}
1035271440Sjkim    | CaseTermList
1036271440Sjkim        DefaultTerm
1037271440Sjkim        CaseTermList                {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));}
1038271440Sjkim    | CaseTermList
1039271440Sjkim        CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
1040271440Sjkim    ;
1041271440Sjkim
1042271440SjkimCaseTermList
1043271440Sjkim    :                               {$$ = NULL;}
1044271440Sjkim    | CaseTerm                      {}
1045271440Sjkim    | CaseTermList
1046271440Sjkim        CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
1047271440Sjkim    ;
1048271440Sjkim*/
1049271440Sjkim
1050271440SjkimCaseTerm
1051271440Sjkim    : PARSEOP_CASE '('              {$<n>$ = TrCreateLeafNode (PARSEOP_CASE);}
1052271440Sjkim        DataObject
1053271440Sjkim        ')' '{'
1054271440Sjkim            TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1055271440Sjkim    | PARSEOP_CASE '('
1056271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1057271440Sjkim    ;
1058271440Sjkim
1059271440SjkimDefaultTerm
1060271440Sjkim    : PARSEOP_DEFAULT '{'           {$<n>$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
1061271440Sjkim        TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
1062271440Sjkim    | PARSEOP_DEFAULT '{'
1063271440Sjkim        error '}'                   {$$ = AslDoError(); yyclearin;}
1064271440Sjkim    ;
1065271440Sjkim
1066271440SjkimUnloadTerm
1067271440Sjkim    : PARSEOP_UNLOAD '('            {$<n>$ = TrCreateLeafNode (PARSEOP_UNLOAD);}
1068271440Sjkim        SuperName
1069271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1070271440Sjkim    | PARSEOP_UNLOAD '('
1071271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1072271440Sjkim    ;
1073271440Sjkim
1074271440SjkimWhileTerm
1075271440Sjkim    : PARSEOP_WHILE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
1076271440Sjkim        TermArg
1077271440Sjkim        ')' '{' TermList '}'
1078271440Sjkim                                    {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1079271440Sjkim    | PARSEOP_WHILE '('
1080271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1081271440Sjkim    ;
1082271440Sjkim
1083271440Sjkim
1084271440Sjkim/******* Type 2 opcodes *******************************************************/
1085271440Sjkim
1086271440SjkimAcquireTerm
1087271440Sjkim    : PARSEOP_ACQUIRE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_ACQUIRE);}
1088271440Sjkim        SuperName
1089271440Sjkim        ',' WordConstExpr
1090271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$6);}
1091271440Sjkim    | PARSEOP_ACQUIRE '('
1092271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1093271440Sjkim    ;
1094271440Sjkim
1095271440SjkimAddTerm
1096271440Sjkim    : PARSEOP_ADD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
1097271440Sjkim        TermArg
1098271440Sjkim        TermArgItem
1099271440Sjkim        Target
1100271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1101271440Sjkim    | PARSEOP_ADD '('
1102271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1103271440Sjkim    ;
1104271440Sjkim
1105271440SjkimAndTerm
1106271440Sjkim    : PARSEOP_AND '('               {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
1107271440Sjkim        TermArg
1108271440Sjkim        TermArgItem
1109271440Sjkim        Target
1110271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1111271440Sjkim    | PARSEOP_AND '('
1112271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1113271440Sjkim    ;
1114271440Sjkim
1115271440SjkimConcatTerm
1116271440Sjkim    : PARSEOP_CONCATENATE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATE);}
1117271440Sjkim        TermArg
1118271440Sjkim        TermArgItem
1119271440Sjkim        Target
1120271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1121271440Sjkim    | PARSEOP_CONCATENATE '('
1122271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1123271440Sjkim    ;
1124271440Sjkim
1125271440SjkimConcatResTerm
1126271440Sjkim    : PARSEOP_CONCATENATERESTEMPLATE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATERESTEMPLATE);}
1127271440Sjkim        TermArg
1128271440Sjkim        TermArgItem
1129271440Sjkim        Target
1130271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1131271440Sjkim    | PARSEOP_CONCATENATERESTEMPLATE '('
1132271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1133271440Sjkim    ;
1134271440Sjkim
1135271440SjkimCondRefOfTerm
1136271440Sjkim    : PARSEOP_CONDREFOF '('         {$<n>$ = TrCreateLeafNode (PARSEOP_CONDREFOF);}
1137271440Sjkim        SuperName
1138271440Sjkim        Target
1139271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1140271440Sjkim    | PARSEOP_CONDREFOF '('
1141271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1142271440Sjkim    ;
1143271440Sjkim
1144271440SjkimCopyObjectTerm
1145271440Sjkim    : PARSEOP_COPYOBJECT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_COPYOBJECT);}
1146271440Sjkim        TermArg
1147271440Sjkim        ',' SimpleTarget
1148271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
1149271440Sjkim    | PARSEOP_COPYOBJECT '('
1150271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1151271440Sjkim    ;
1152271440Sjkim
1153271440SjkimDecTerm
1154271440Sjkim    : PARSEOP_DECREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
1155271440Sjkim        SuperName
1156271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1157271440Sjkim    | PARSEOP_DECREMENT '('
1158271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1159271440Sjkim    ;
1160271440Sjkim
1161271440SjkimDerefOfTerm
1162271440Sjkim    : PARSEOP_DEREFOF '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DEREFOF);}
1163271440Sjkim        TermArg
1164271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1165271440Sjkim    | PARSEOP_DEREFOF '('
1166271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1167271440Sjkim    ;
1168271440Sjkim
1169271440SjkimDivideTerm
1170271440Sjkim    : PARSEOP_DIVIDE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
1171271440Sjkim        TermArg
1172271440Sjkim        TermArgItem
1173271440Sjkim        Target
1174271440Sjkim        Target
1175271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
1176271440Sjkim    | PARSEOP_DIVIDE '('
1177271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1178271440Sjkim    ;
1179271440Sjkim
1180271440SjkimFindSetLeftBitTerm
1181271440Sjkim    : PARSEOP_FINDSETLEFTBIT '('    {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETLEFTBIT);}
1182271440Sjkim        TermArg
1183271440Sjkim        Target
1184271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1185271440Sjkim    | PARSEOP_FINDSETLEFTBIT '('
1186271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1187271440Sjkim    ;
1188271440Sjkim
1189271440SjkimFindSetRightBitTerm
1190271440Sjkim    : PARSEOP_FINDSETRIGHTBIT '('   {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETRIGHTBIT);}
1191271440Sjkim        TermArg
1192271440Sjkim        Target
1193271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1194271440Sjkim    | PARSEOP_FINDSETRIGHTBIT '('
1195271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1196271440Sjkim    ;
1197271440Sjkim
1198271440SjkimFromBCDTerm
1199271440Sjkim    : PARSEOP_FROMBCD '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FROMBCD);}
1200271440Sjkim        TermArg
1201271440Sjkim        Target
1202271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1203271440Sjkim    | PARSEOP_FROMBCD '('
1204271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1205271440Sjkim    ;
1206271440Sjkim
1207271440SjkimIncTerm
1208271440Sjkim    : PARSEOP_INCREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
1209271440Sjkim        SuperName
1210271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1211271440Sjkim    | PARSEOP_INCREMENT '('
1212271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1213271440Sjkim    ;
1214271440Sjkim
1215271440SjkimIndexTerm
1216271440Sjkim    : PARSEOP_INDEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_INDEX);}
1217271440Sjkim        TermArg
1218271440Sjkim        TermArgItem
1219271440Sjkim        Target
1220271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1221271440Sjkim    | PARSEOP_INDEX '('
1222271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1223271440Sjkim    ;
1224271440Sjkim
1225271440SjkimLAndTerm
1226271440Sjkim    : PARSEOP_LAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
1227271440Sjkim        TermArg
1228271440Sjkim        TermArgItem
1229271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1230271440Sjkim    | PARSEOP_LAND '('
1231271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1232271440Sjkim    ;
1233271440Sjkim
1234271440SjkimLEqualTerm
1235271440Sjkim    : PARSEOP_LEQUAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
1236271440Sjkim        TermArg
1237271440Sjkim        TermArgItem
1238271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1239271440Sjkim    | PARSEOP_LEQUAL '('
1240271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1241271440Sjkim    ;
1242271440Sjkim
1243271440SjkimLGreaterTerm
1244271440Sjkim    : PARSEOP_LGREATER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
1245271440Sjkim        TermArg
1246271440Sjkim        TermArgItem
1247271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1248271440Sjkim    | PARSEOP_LGREATER '('
1249271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1250271440Sjkim    ;
1251271440Sjkim
1252271440SjkimLGreaterEqualTerm
1253271440Sjkim    : PARSEOP_LGREATEREQUAL '('     {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
1254271440Sjkim        TermArg
1255271440Sjkim        TermArgItem
1256271440Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1257271440Sjkim    | PARSEOP_LGREATEREQUAL '('
1258271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1259271440Sjkim    ;
1260271440Sjkim
1261271440SjkimLLessTerm
1262271440Sjkim    : PARSEOP_LLESS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
1263271440Sjkim        TermArg
1264271440Sjkim        TermArgItem
1265271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1266271440Sjkim    | PARSEOP_LLESS '('
1267271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1268271440Sjkim    ;
1269271440Sjkim
1270271440SjkimLLessEqualTerm
1271271440Sjkim    : PARSEOP_LLESSEQUAL '('        {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
1272271440Sjkim        TermArg
1273271440Sjkim        TermArgItem
1274271440Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1275271440Sjkim    | PARSEOP_LLESSEQUAL '('
1276271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1277271440Sjkim    ;
1278271440Sjkim
1279271440SjkimLNotTerm
1280271440Sjkim    : PARSEOP_LNOT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
1281271440Sjkim        TermArg
1282271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1283271440Sjkim    | PARSEOP_LNOT '('
1284271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1285271440Sjkim    ;
1286271440Sjkim
1287271440SjkimLNotEqualTerm
1288271440Sjkim    : PARSEOP_LNOTEQUAL '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
1289271440Sjkim        TermArg
1290271440Sjkim        TermArgItem
1291271440Sjkim        ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1292271440Sjkim    | PARSEOP_LNOTEQUAL '('
1293271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1294271440Sjkim    ;
1295271440Sjkim
1296271440SjkimLoadTableTerm
1297271440Sjkim    : PARSEOP_LOADTABLE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LOADTABLE);}
1298271440Sjkim        TermArg
1299271440Sjkim        TermArgItem
1300271440Sjkim        TermArgItem
1301271440Sjkim        OptionalListString
1302271440Sjkim        OptionalListString
1303271440Sjkim        OptionalReference
1304271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$5,$6,$7,$8,$9);}
1305271440Sjkim    | PARSEOP_LOADTABLE '('
1306271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1307271440Sjkim    ;
1308271440Sjkim
1309271440SjkimLOrTerm
1310271440Sjkim    : PARSEOP_LOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
1311271440Sjkim        TermArg
1312271440Sjkim        TermArgItem
1313271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1314271440Sjkim    | PARSEOP_LOR '('
1315271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1316271440Sjkim    ;
1317271440Sjkim
1318271440SjkimMatchTerm
1319271440Sjkim    : PARSEOP_MATCH '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MATCH);}
1320271440Sjkim        TermArg
1321271440Sjkim        ',' MatchOpKeyword
1322271440Sjkim        TermArgItem
1323271440Sjkim        ',' MatchOpKeyword
1324271440Sjkim        TermArgItem
1325271440Sjkim        TermArgItem
1326271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$7,$9,$10,$11);}
1327271440Sjkim    | PARSEOP_MATCH '('
1328271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1329271440Sjkim    ;
1330271440Sjkim
1331271440SjkimMidTerm
1332271440Sjkim    : PARSEOP_MID '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MID);}
1333271440Sjkim        TermArg
1334271440Sjkim        TermArgItem
1335271440Sjkim        TermArgItem
1336271440Sjkim        Target
1337271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
1338271440Sjkim    | PARSEOP_MID '('
1339271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1340271440Sjkim    ;
1341271440Sjkim
1342271440SjkimModTerm
1343271440Sjkim    : PARSEOP_MOD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
1344271440Sjkim        TermArg
1345271440Sjkim        TermArgItem
1346271440Sjkim        Target
1347271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1348271440Sjkim    | PARSEOP_MOD '('
1349271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1350271440Sjkim    ;
1351271440Sjkim
1352271440SjkimMultiplyTerm
1353271440Sjkim    : PARSEOP_MULTIPLY '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
1354271440Sjkim        TermArg
1355271440Sjkim        TermArgItem
1356271440Sjkim        Target
1357271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1358271440Sjkim    | PARSEOP_MULTIPLY '('
1359271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1360271440Sjkim    ;
1361271440Sjkim
1362271440SjkimNAndTerm
1363271440Sjkim    : PARSEOP_NAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAND);}
1364271440Sjkim        TermArg
1365271440Sjkim        TermArgItem
1366271440Sjkim        Target
1367271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1368271440Sjkim    | PARSEOP_NAND '('
1369271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1370271440Sjkim    ;
1371271440Sjkim
1372271440SjkimNOrTerm
1373271440Sjkim    : PARSEOP_NOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOR);}
1374271440Sjkim        TermArg
1375271440Sjkim        TermArgItem
1376271440Sjkim        Target
1377271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1378271440Sjkim    | PARSEOP_NOR '('
1379271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1380271440Sjkim    ;
1381271440Sjkim
1382271440SjkimNotTerm
1383271440Sjkim    : PARSEOP_NOT '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
1384271440Sjkim        TermArg
1385271440Sjkim        Target
1386271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1387271440Sjkim    | PARSEOP_NOT '('
1388271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1389271440Sjkim    ;
1390271440Sjkim
1391271440SjkimObjectTypeTerm
1392271440Sjkim    : PARSEOP_OBJECTTYPE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE);}
1393271440Sjkim        ObjectTypeName
1394271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1395271440Sjkim    | PARSEOP_OBJECTTYPE '('
1396271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1397271440Sjkim    ;
1398271440Sjkim
1399271440SjkimOrTerm
1400271440Sjkim    : PARSEOP_OR '('                {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
1401271440Sjkim        TermArg
1402271440Sjkim        TermArgItem
1403271440Sjkim        Target
1404271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1405271440Sjkim    | PARSEOP_OR '('
1406271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1407271440Sjkim    ;
1408271440Sjkim
1409271440Sjkim/*
1410271440Sjkim * In RefOf, the node isn't really a target, but we can't keep track of it after
1411271440Sjkim * we've taken a pointer to it. (hard to tell if a local becomes initialized this way.)
1412271440Sjkim */
1413271440SjkimRefOfTerm
1414271440Sjkim    : PARSEOP_REFOF '('             {$<n>$ = TrCreateLeafNode (PARSEOP_REFOF);}
1415271440Sjkim        SuperName
1416271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_TARGET));}
1417271440Sjkim    | PARSEOP_REFOF '('
1418271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1419271440Sjkim    ;
1420271440Sjkim
1421271440SjkimShiftLeftTerm
1422271440Sjkim    : PARSEOP_SHIFTLEFT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
1423271440Sjkim        TermArg
1424271440Sjkim        TermArgItem
1425271440Sjkim        Target
1426271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1427271440Sjkim    | PARSEOP_SHIFTLEFT '('
1428271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1429271440Sjkim    ;
1430271440Sjkim
1431271440SjkimShiftRightTerm
1432271440Sjkim    : PARSEOP_SHIFTRIGHT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
1433271440Sjkim        TermArg
1434271440Sjkim        TermArgItem
1435271440Sjkim        Target
1436271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1437271440Sjkim    | PARSEOP_SHIFTRIGHT '('
1438271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1439271440Sjkim    ;
1440271440Sjkim
1441271440SjkimSizeOfTerm
1442271440Sjkim    : PARSEOP_SIZEOF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIZEOF);}
1443271440Sjkim        SuperName
1444271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1445271440Sjkim    | PARSEOP_SIZEOF '('
1446271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1447271440Sjkim    ;
1448271440Sjkim
1449271440SjkimStoreTerm
1450271440Sjkim    : PARSEOP_STORE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STORE);}
1451271440Sjkim        TermArg
1452271440Sjkim        ',' SuperName
1453271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
1454271440Sjkim    | PARSEOP_STORE '('
1455271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1456271440Sjkim    ;
1457271440Sjkim
1458271440SjkimSubtractTerm
1459271440Sjkim    : PARSEOP_SUBTRACT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
1460271440Sjkim        TermArg
1461271440Sjkim        TermArgItem
1462271440Sjkim        Target
1463271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1464271440Sjkim    | PARSEOP_SUBTRACT '('
1465271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1466271440Sjkim    ;
1467271440Sjkim
1468271440SjkimTimerTerm
1469271440Sjkim    : PARSEOP_TIMER '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TIMER);}
1470271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,0);}
1471271440Sjkim    | PARSEOP_TIMER                 {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_TIMER),0);}
1472271440Sjkim    | PARSEOP_TIMER '('
1473271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1474271440Sjkim    ;
1475271440Sjkim
1476271440SjkimToBCDTerm
1477271440Sjkim    : PARSEOP_TOBCD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOBCD);}
1478271440Sjkim        TermArg
1479271440Sjkim        Target
1480271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1481271440Sjkim    | PARSEOP_TOBCD '('
1482271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1483271440Sjkim    ;
1484271440Sjkim
1485271440SjkimToBufferTerm
1486271440Sjkim    : PARSEOP_TOBUFFER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOBUFFER);}
1487271440Sjkim        TermArg
1488271440Sjkim        Target
1489271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1490271440Sjkim    | PARSEOP_TOBUFFER '('
1491271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1492271440Sjkim    ;
1493271440Sjkim
1494271440SjkimToDecimalStringTerm
1495271440Sjkim    : PARSEOP_TODECIMALSTRING '('   {$<n>$ = TrCreateLeafNode (PARSEOP_TODECIMALSTRING);}
1496271440Sjkim        TermArg
1497271440Sjkim        Target
1498271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1499271440Sjkim    | PARSEOP_TODECIMALSTRING '('
1500271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1501271440Sjkim    ;
1502271440Sjkim
1503271440SjkimToHexStringTerm
1504271440Sjkim    : PARSEOP_TOHEXSTRING '('       {$<n>$ = TrCreateLeafNode (PARSEOP_TOHEXSTRING);}
1505271440Sjkim        TermArg
1506271440Sjkim        Target
1507271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1508271440Sjkim    | PARSEOP_TOHEXSTRING '('
1509271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1510271440Sjkim    ;
1511271440Sjkim
1512271440SjkimToIntegerTerm
1513271440Sjkim    : PARSEOP_TOINTEGER '('         {$<n>$ = TrCreateLeafNode (PARSEOP_TOINTEGER);}
1514271440Sjkim        TermArg
1515271440Sjkim        Target
1516271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1517271440Sjkim    | PARSEOP_TOINTEGER '('
1518271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1519271440Sjkim    ;
1520271440Sjkim
1521281075SdimPldKeyword
1522281075Sdim    : PARSEOP_PLD_REVISION          {$$ = TrCreateLeafNode (PARSEOP_PLD_REVISION);}
1523281075Sdim    | PARSEOP_PLD_IGNORECOLOR       {$$ = TrCreateLeafNode (PARSEOP_PLD_IGNORECOLOR);}
1524281075Sdim    | PARSEOP_PLD_RED               {$$ = TrCreateLeafNode (PARSEOP_PLD_RED);}
1525281075Sdim    | PARSEOP_PLD_GREEN             {$$ = TrCreateLeafNode (PARSEOP_PLD_GREEN);}
1526281075Sdim    | PARSEOP_PLD_BLUE              {$$ = TrCreateLeafNode (PARSEOP_PLD_BLUE);}
1527281075Sdim    | PARSEOP_PLD_WIDTH             {$$ = TrCreateLeafNode (PARSEOP_PLD_WIDTH);}
1528281075Sdim    | PARSEOP_PLD_HEIGHT            {$$ = TrCreateLeafNode (PARSEOP_PLD_HEIGHT);}
1529281075Sdim    | PARSEOP_PLD_USERVISIBLE       {$$ = TrCreateLeafNode (PARSEOP_PLD_USERVISIBLE);}
1530281075Sdim    | PARSEOP_PLD_DOCK              {$$ = TrCreateLeafNode (PARSEOP_PLD_DOCK);}
1531281075Sdim    | PARSEOP_PLD_LID               {$$ = TrCreateLeafNode (PARSEOP_PLD_LID);}
1532281075Sdim    | PARSEOP_PLD_PANEL             {$$ = TrCreateLeafNode (PARSEOP_PLD_PANEL);}
1533281075Sdim    | PARSEOP_PLD_VERTICALPOSITION  {$$ = TrCreateLeafNode (PARSEOP_PLD_VERTICALPOSITION);}
1534281075Sdim    | PARSEOP_PLD_HORIZONTALPOSITION {$$ = TrCreateLeafNode (PARSEOP_PLD_HORIZONTALPOSITION);}
1535281075Sdim    | PARSEOP_PLD_SHAPE             {$$ = TrCreateLeafNode (PARSEOP_PLD_SHAPE);}
1536281075Sdim    | PARSEOP_PLD_GROUPORIENTATION  {$$ = TrCreateLeafNode (PARSEOP_PLD_GROUPORIENTATION);}
1537281075Sdim    | PARSEOP_PLD_GROUPTOKEN        {$$ = TrCreateLeafNode (PARSEOP_PLD_GROUPTOKEN);}
1538281075Sdim    | PARSEOP_PLD_GROUPPOSITION     {$$ = TrCreateLeafNode (PARSEOP_PLD_GROUPPOSITION);}
1539281075Sdim    | PARSEOP_PLD_BAY               {$$ = TrCreateLeafNode (PARSEOP_PLD_BAY);}
1540281075Sdim    | PARSEOP_PLD_EJECTABLE         {$$ = TrCreateLeafNode (PARSEOP_PLD_EJECTABLE);}
1541281075Sdim    | PARSEOP_PLD_EJECTREQUIRED     {$$ = TrCreateLeafNode (PARSEOP_PLD_EJECTREQUIRED);}
1542281075Sdim    | PARSEOP_PLD_CABINETNUMBER     {$$ = TrCreateLeafNode (PARSEOP_PLD_CABINETNUMBER);}
1543281075Sdim    | PARSEOP_PLD_CARDCAGENUMBER    {$$ = TrCreateLeafNode (PARSEOP_PLD_CARDCAGENUMBER);}
1544281075Sdim    | PARSEOP_PLD_REFERENCE         {$$ = TrCreateLeafNode (PARSEOP_PLD_REFERENCE);}
1545281075Sdim    | PARSEOP_PLD_ROTATION          {$$ = TrCreateLeafNode (PARSEOP_PLD_ROTATION);}
1546281075Sdim    | PARSEOP_PLD_ORDER             {$$ = TrCreateLeafNode (PARSEOP_PLD_ORDER);}
1547281075Sdim    | PARSEOP_PLD_RESERVED          {$$ = TrCreateLeafNode (PARSEOP_PLD_RESERVED);}
1548281075Sdim    | PARSEOP_PLD_VERTICALOFFSET    {$$ = TrCreateLeafNode (PARSEOP_PLD_VERTICALOFFSET);}
1549281075Sdim    | PARSEOP_PLD_HORIZONTALOFFSET  {$$ = TrCreateLeafNode (PARSEOP_PLD_HORIZONTALOFFSET);}
1550281075Sdim    ;
1551281075Sdim
1552281075SdimPldKeywordList
1553281075Sdim    :                               {$$ = NULL;}
1554281075Sdim    | PldKeyword
1555281075Sdim        PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkChildren ($1,1,$3);}
1556281075Sdim    | PldKeyword
1557281075Sdim        PARSEOP_EXP_EQUALS String   {$$ = TrLinkChildren ($1,1,$3);}
1558281075Sdim    | PldKeywordList ','            /* Allows a trailing comma at list end */
1559281075Sdim    | PldKeywordList ','
1560281075Sdim        PldKeyword
1561281075Sdim        PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
1562281075Sdim    | PldKeywordList ','
1563281075Sdim        PldKeyword
1564281075Sdim        PARSEOP_EXP_EQUALS String   {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
1565281075Sdim    ;
1566281075Sdim
1567281075SdimToPLDTerm
1568281075Sdim    : PARSEOP_TOPLD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOPLD);}
1569281075Sdim        PldKeywordList
1570281075Sdim        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1571281075Sdim    | PARSEOP_TOPLD '('
1572281075Sdim        error ')'                   {$$ = AslDoError(); yyclearin;}
1573281075Sdim    ;
1574281075Sdim
1575281075SdimPrintfArgList
1576281075Sdim    :                               {$$ = NULL;}
1577281075Sdim    | TermArg                       {$$ = $1;}
1578281075Sdim    | PrintfArgList ','
1579281075Sdim       TermArg                      {$$ = TrLinkPeerNode ($1, $3);}
1580281075Sdim    ;
1581281075Sdim
1582281075SdimPrintfTerm
1583281075Sdim    : PARSEOP_PRINTF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_PRINTF);}
1584281075Sdim        StringData
1585281075Sdim        PrintfArgList
1586281075Sdim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1587281075Sdim    | PARSEOP_PRINTF '('
1588281075Sdim        error ')'                   {$$ = AslDoError(); yyclearin;}
1589281075Sdim    ;
1590281075Sdim
1591281075SdimFprintfTerm
1592281075Sdim    : PARSEOP_FPRINTF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_FPRINTF);}
1593281075Sdim        TermArg ','
1594281075Sdim        StringData
1595281075Sdim        PrintfArgList
1596281075Sdim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
1597281075Sdim    | PARSEOP_FPRINTF '('
1598281075Sdim        error ')'                   {$$ = AslDoError(); yyclearin;}
1599281075Sdim    ;
1600281075Sdim
1601271440SjkimToStringTerm
1602271440Sjkim    : PARSEOP_TOSTRING '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOSTRING);}
1603271440Sjkim        TermArg
1604271440Sjkim        OptionalCount
1605271440Sjkim        Target
1606271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1607271440Sjkim    | PARSEOP_TOSTRING '('
1608271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1609271440Sjkim    ;
1610271440Sjkim
1611271440SjkimToUUIDTerm
1612271440Sjkim    : PARSEOP_TOUUID '('
1613271440Sjkim        StringData ')'              {$$ = TrUpdateNode (PARSEOP_TOUUID, $3);}
1614271440Sjkim    | PARSEOP_TOUUID '('
1615271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1616271440Sjkim    ;
1617271440Sjkim
1618271440SjkimWaitTerm
1619271440Sjkim    : PARSEOP_WAIT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_WAIT);}
1620271440Sjkim        SuperName
1621271440Sjkim        TermArgItem
1622271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1623271440Sjkim    | PARSEOP_WAIT '('
1624271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1625271440Sjkim    ;
1626271440Sjkim
1627271440SjkimXOrTerm
1628271440Sjkim    : PARSEOP_XOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
1629271440Sjkim        TermArg
1630271440Sjkim        TermArgItem
1631271440Sjkim        Target
1632271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1633271440Sjkim    | PARSEOP_XOR '('
1634271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
1635271440Sjkim    ;
1636271440Sjkim
1637271440Sjkim
1638271440Sjkim/******* Keywords *************************************************************/
1639271440Sjkim
1640271440Sjkim
1641271440SjkimAccessAttribKeyword
1642271440Sjkim    : PARSEOP_ACCESSATTRIB_BLOCK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK);}
1643271440Sjkim    | PARSEOP_ACCESSATTRIB_BLOCK_CALL       {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK_CALL);}
1644271440Sjkim    | PARSEOP_ACCESSATTRIB_BYTE             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BYTE);}
1645271440Sjkim    | PARSEOP_ACCESSATTRIB_QUICK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_QUICK );}
1646271440Sjkim    | PARSEOP_ACCESSATTRIB_SND_RCV          {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_SND_RCV);}
1647271440Sjkim    | PARSEOP_ACCESSATTRIB_WORD             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD);}
1648271440Sjkim    | PARSEOP_ACCESSATTRIB_WORD_CALL        {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD_CALL);}
1649271440Sjkim    | PARSEOP_ACCESSATTRIB_MULTIBYTE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_MULTIBYTE);}
1650271440Sjkim        ByteConst
1651271440Sjkim        ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
1652271440Sjkim    | PARSEOP_ACCESSATTRIB_RAW_BYTES '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_BYTES);}
1653271440Sjkim        ByteConst
1654271440Sjkim        ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
1655271440Sjkim    | PARSEOP_ACCESSATTRIB_RAW_PROCESS '('  {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_PROCESS);}
1656271440Sjkim        ByteConst
1657271440Sjkim        ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
1658271440Sjkim    ;
1659271440Sjkim
1660271440SjkimAccessTypeKeyword
1661271440Sjkim    : PARSEOP_ACCESSTYPE_ANY                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_ANY);}
1662271440Sjkim    | PARSEOP_ACCESSTYPE_BYTE               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BYTE);}
1663271440Sjkim    | PARSEOP_ACCESSTYPE_WORD               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_WORD);}
1664271440Sjkim    | PARSEOP_ACCESSTYPE_DWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_DWORD);}
1665271440Sjkim    | PARSEOP_ACCESSTYPE_QWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_QWORD);}
1666271440Sjkim    | PARSEOP_ACCESSTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BUF);}
1667271440Sjkim    ;
1668271440Sjkim
1669271440SjkimAddressingModeKeyword
1670271440Sjkim    : PARSEOP_ADDRESSINGMODE_7BIT           {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_7BIT);}
1671271440Sjkim    | PARSEOP_ADDRESSINGMODE_10BIT          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_10BIT);}
1672271440Sjkim    ;
1673271440Sjkim
1674271440SjkimAddressKeyword
1675271440Sjkim    : PARSEOP_ADDRESSTYPE_MEMORY            {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_MEMORY);}
1676271440Sjkim    | PARSEOP_ADDRESSTYPE_RESERVED          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_RESERVED);}
1677271440Sjkim    | PARSEOP_ADDRESSTYPE_NVS               {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_NVS);}
1678271440Sjkim    | PARSEOP_ADDRESSTYPE_ACPI              {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_ACPI);}
1679271440Sjkim    ;
1680271440Sjkim
1681271440SjkimAddressSpaceKeyword
1682271440Sjkim    : ByteConst                             {$$ = UtCheckIntegerRange ($1, 0x0A, 0xFF);}
1683271440Sjkim    | RegionSpaceKeyword                    {}
1684271440Sjkim    ;
1685271440Sjkim
1686271440SjkimBitsPerByteKeyword
1687271440Sjkim    : PARSEOP_BITSPERBYTE_FIVE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_FIVE);}
1688271440Sjkim    | PARSEOP_BITSPERBYTE_SIX               {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SIX);}
1689271440Sjkim    | PARSEOP_BITSPERBYTE_SEVEN             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SEVEN);}
1690271440Sjkim    | PARSEOP_BITSPERBYTE_EIGHT             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_EIGHT);}
1691271440Sjkim    | PARSEOP_BITSPERBYTE_NINE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_NINE);}
1692271440Sjkim    ;
1693271440Sjkim
1694271440SjkimClockPhaseKeyword
1695271440Sjkim    : PARSEOP_CLOCKPHASE_FIRST              {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_FIRST);}
1696271440Sjkim    | PARSEOP_CLOCKPHASE_SECOND             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_SECOND);}
1697271440Sjkim    ;
1698271440Sjkim
1699271440SjkimClockPolarityKeyword
1700271440Sjkim    : PARSEOP_CLOCKPOLARITY_LOW             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_LOW);}
1701271440Sjkim    | PARSEOP_CLOCKPOLARITY_HIGH            {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_HIGH);}
1702271440Sjkim    ;
1703271440Sjkim
1704271440SjkimDecodeKeyword
1705271440Sjkim    : PARSEOP_DECODETYPE_POS                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_POS);}
1706271440Sjkim    | PARSEOP_DECODETYPE_SUB                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_SUB);}
1707271440Sjkim    ;
1708271440Sjkim
1709271440SjkimDevicePolarityKeyword
1710271440Sjkim    : PARSEOP_DEVICEPOLARITY_LOW            {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_LOW);}
1711271440Sjkim    | PARSEOP_DEVICEPOLARITY_HIGH           {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_HIGH);}
1712271440Sjkim    ;
1713271440Sjkim
1714271440SjkimDMATypeKeyword
1715271440Sjkim    : PARSEOP_DMATYPE_A                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_A);}
1716271440Sjkim    | PARSEOP_DMATYPE_COMPATIBILITY         {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_COMPATIBILITY);}
1717271440Sjkim    | PARSEOP_DMATYPE_B                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_B);}
1718271440Sjkim    | PARSEOP_DMATYPE_F                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_F);}
1719271440Sjkim    ;
1720271440Sjkim
1721271440SjkimEndianKeyword
1722271440Sjkim    : PARSEOP_ENDIAN_LITTLE                 {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_LITTLE);}
1723271440Sjkim    | PARSEOP_ENDIAN_BIG                    {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_BIG);}
1724271440Sjkim    ;
1725271440Sjkim
1726271440SjkimFlowControlKeyword
1727271440Sjkim    : PARSEOP_FLOWCONTROL_HW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_HW);}
1728271440Sjkim    | PARSEOP_FLOWCONTROL_NONE              {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_NONE);}
1729271440Sjkim    | PARSEOP_FLOWCONTROL_SW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_SW);}
1730271440Sjkim    ;
1731271440Sjkim
1732271440SjkimInterruptLevel
1733271440Sjkim    : PARSEOP_INTLEVEL_ACTIVEBOTH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEBOTH);}
1734271440Sjkim    | PARSEOP_INTLEVEL_ACTIVEHIGH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEHIGH);}
1735271440Sjkim    | PARSEOP_INTLEVEL_ACTIVELOW            {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVELOW);}
1736271440Sjkim    ;
1737271440Sjkim
1738271440SjkimInterruptTypeKeyword
1739271440Sjkim    : PARSEOP_INTTYPE_EDGE                  {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_EDGE);}
1740271440Sjkim    | PARSEOP_INTTYPE_LEVEL                 {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_LEVEL);}
1741271440Sjkim    ;
1742271440Sjkim
1743271440SjkimIODecodeKeyword
1744271440Sjkim    : PARSEOP_IODECODETYPE_16               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_16);}
1745271440Sjkim    | PARSEOP_IODECODETYPE_10               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_10);}
1746271440Sjkim    ;
1747271440Sjkim
1748271440SjkimIoRestrictionKeyword
1749271440Sjkim    : PARSEOP_IORESTRICT_IN                 {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_IN);}
1750271440Sjkim    | PARSEOP_IORESTRICT_OUT                {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_OUT);}
1751271440Sjkim    | PARSEOP_IORESTRICT_NONE               {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_NONE);}
1752271440Sjkim    | PARSEOP_IORESTRICT_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_PRESERVE);}
1753271440Sjkim    ;
1754271440Sjkim
1755271440SjkimLockRuleKeyword
1756271440Sjkim    : PARSEOP_LOCKRULE_LOCK                 {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_LOCK);}
1757271440Sjkim    | PARSEOP_LOCKRULE_NOLOCK               {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_NOLOCK);}
1758271440Sjkim    ;
1759271440Sjkim
1760271440SjkimMatchOpKeyword
1761271440Sjkim    : PARSEOP_MATCHTYPE_MTR                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MTR);}
1762271440Sjkim    | PARSEOP_MATCHTYPE_MEQ                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MEQ);}
1763271440Sjkim    | PARSEOP_MATCHTYPE_MLE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLE);}
1764271440Sjkim    | PARSEOP_MATCHTYPE_MLT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLT);}
1765271440Sjkim    | PARSEOP_MATCHTYPE_MGE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGE);}
1766271440Sjkim    | PARSEOP_MATCHTYPE_MGT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGT);}
1767271440Sjkim    ;
1768271440Sjkim
1769271440SjkimMaxKeyword
1770271440Sjkim    : PARSEOP_MAXTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_FIXED);}
1771271440Sjkim    | PARSEOP_MAXTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_NOTFIXED);}
1772271440Sjkim    ;
1773271440Sjkim
1774271440SjkimMemTypeKeyword
1775271440Sjkim    : PARSEOP_MEMTYPE_CACHEABLE             {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_CACHEABLE);}
1776271440Sjkim    | PARSEOP_MEMTYPE_WRITECOMBINING        {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_WRITECOMBINING);}
1777271440Sjkim    | PARSEOP_MEMTYPE_PREFETCHABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_PREFETCHABLE);}
1778271440Sjkim    | PARSEOP_MEMTYPE_NONCACHEABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_NONCACHEABLE);}
1779271440Sjkim    ;
1780271440Sjkim
1781271440SjkimMinKeyword
1782271440Sjkim    : PARSEOP_MINTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_FIXED);}
1783271440Sjkim    | PARSEOP_MINTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_NOTFIXED);}
1784271440Sjkim    ;
1785271440Sjkim
1786271440SjkimObjectTypeKeyword
1787271440Sjkim    : PARSEOP_OBJECTTYPE_UNK                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
1788271440Sjkim    | PARSEOP_OBJECTTYPE_INT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_INT);}
1789271440Sjkim    | PARSEOP_OBJECTTYPE_STR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_STR);}
1790271440Sjkim    | PARSEOP_OBJECTTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BUF);}
1791271440Sjkim    | PARSEOP_OBJECTTYPE_PKG                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PKG);}
1792271440Sjkim    | PARSEOP_OBJECTTYPE_FLD                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_FLD);}
1793271440Sjkim    | PARSEOP_OBJECTTYPE_DEV                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DEV);}
1794271440Sjkim    | PARSEOP_OBJECTTYPE_EVT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_EVT);}
1795271440Sjkim    | PARSEOP_OBJECTTYPE_MTH                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTH);}
1796271440Sjkim    | PARSEOP_OBJECTTYPE_MTX                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTX);}
1797271440Sjkim    | PARSEOP_OBJECTTYPE_OPR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_OPR);}
1798271440Sjkim    | PARSEOP_OBJECTTYPE_POW                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_POW);}
1799271440Sjkim    | PARSEOP_OBJECTTYPE_PRO                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PRO);}
1800271440Sjkim    | PARSEOP_OBJECTTYPE_THZ                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_THZ);}
1801271440Sjkim    | PARSEOP_OBJECTTYPE_BFF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BFF);}
1802271440Sjkim    | PARSEOP_OBJECTTYPE_DDB                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DDB);}
1803271440Sjkim    ;
1804271440Sjkim
1805271440SjkimParityTypeKeyword
1806271440Sjkim    : PARSEOP_PARITYTYPE_SPACE              {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_SPACE);}
1807271440Sjkim    | PARSEOP_PARITYTYPE_MARK               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_MARK);}
1808271440Sjkim    | PARSEOP_PARITYTYPE_ODD                {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_ODD);}
1809271440Sjkim    | PARSEOP_PARITYTYPE_EVEN               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_EVEN);}
1810271440Sjkim    | PARSEOP_PARITYTYPE_NONE               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_NONE);}
1811271440Sjkim    ;
1812271440Sjkim
1813271440SjkimPinConfigByte
1814271440Sjkim    : PinConfigKeyword                      {$$ = $1;}
1815271440Sjkim    | ByteConstExpr                         {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
1816271440Sjkim    ;
1817271440Sjkim
1818271440SjkimPinConfigKeyword
1819271440Sjkim    : PARSEOP_PIN_NOPULL                    {$$ = TrCreateLeafNode (PARSEOP_PIN_NOPULL);}
1820271440Sjkim    | PARSEOP_PIN_PULLDOWN                  {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDOWN);}
1821271440Sjkim    | PARSEOP_PIN_PULLUP                    {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLUP);}
1822271440Sjkim    | PARSEOP_PIN_PULLDEFAULT               {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDEFAULT);}
1823271440Sjkim    ;
1824271440Sjkim
1825271440SjkimRangeTypeKeyword
1826271440Sjkim    : PARSEOP_RANGETYPE_ISAONLY             {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ISAONLY);}
1827271440Sjkim    | PARSEOP_RANGETYPE_NONISAONLY          {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_NONISAONLY);}
1828271440Sjkim    | PARSEOP_RANGETYPE_ENTIRE              {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ENTIRE);}
1829271440Sjkim    ;
1830271440Sjkim
1831271440SjkimRegionSpaceKeyword
1832271440Sjkim    : PARSEOP_REGIONSPACE_IO                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IO);}
1833271440Sjkim    | PARSEOP_REGIONSPACE_MEM               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_MEM);}
1834271440Sjkim    | PARSEOP_REGIONSPACE_PCI               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCI);}
1835271440Sjkim    | PARSEOP_REGIONSPACE_EC                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_EC);}
1836271440Sjkim    | PARSEOP_REGIONSPACE_SMBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_SMBUS);}
1837271440Sjkim    | PARSEOP_REGIONSPACE_CMOS              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_CMOS);}
1838271440Sjkim    | PARSEOP_REGIONSPACE_PCIBAR            {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCIBAR);}
1839271440Sjkim    | PARSEOP_REGIONSPACE_IPMI              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IPMI);}
1840271440Sjkim    | PARSEOP_REGIONSPACE_GPIO              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GPIO);}
1841271440Sjkim    | PARSEOP_REGIONSPACE_GSBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GSBUS);}
1842271440Sjkim    | PARSEOP_REGIONSPACE_PCC               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCC);}
1843271440Sjkim    | PARSEOP_REGIONSPACE_FFIXEDHW          {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_FFIXEDHW);}
1844271440Sjkim    ;
1845271440Sjkim
1846271440SjkimResourceTypeKeyword
1847271440Sjkim    : PARSEOP_RESOURCETYPE_CONSUMER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
1848271440Sjkim    | PARSEOP_RESOURCETYPE_PRODUCER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_PRODUCER);}
1849271440Sjkim    ;
1850271440Sjkim
1851271440SjkimSerializeRuleKeyword
1852271440Sjkim    : PARSEOP_SERIALIZERULE_SERIAL          {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_SERIAL);}
1853271440Sjkim    | PARSEOP_SERIALIZERULE_NOTSERIAL       {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL);}
1854271440Sjkim    ;
1855271440Sjkim
1856271440SjkimShareTypeKeyword
1857271440Sjkim    : PARSEOP_SHARETYPE_SHARED              {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHARED);}
1858271440Sjkim    | PARSEOP_SHARETYPE_EXCLUSIVE           {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVE);}
1859271440Sjkim    | PARSEOP_SHARETYPE_SHAREDWAKE          {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHAREDWAKE);}
1860271440Sjkim    | PARSEOP_SHARETYPE_EXCLUSIVEWAKE       {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVEWAKE);}
1861271440Sjkim   ;
1862271440Sjkim
1863271440SjkimSlaveModeKeyword
1864271440Sjkim    : PARSEOP_SLAVEMODE_CONTROLLERINIT      {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_CONTROLLERINIT);}
1865271440Sjkim    | PARSEOP_SLAVEMODE_DEVICEINIT          {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_DEVICEINIT);}
1866271440Sjkim    ;
1867271440Sjkim
1868271440SjkimStopBitsKeyword
1869271440Sjkim    : PARSEOP_STOPBITS_TWO                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_TWO);}
1870271440Sjkim    | PARSEOP_STOPBITS_ONEPLUSHALF          {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONEPLUSHALF);}
1871271440Sjkim    | PARSEOP_STOPBITS_ONE                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONE);}
1872271440Sjkim    | PARSEOP_STOPBITS_ZERO                 {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ZERO);}
1873271440Sjkim    ;
1874271440Sjkim
1875271440SjkimTranslationKeyword
1876271440Sjkim    : PARSEOP_TRANSLATIONTYPE_SPARSE        {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_SPARSE);}
1877271440Sjkim    | PARSEOP_TRANSLATIONTYPE_DENSE         {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_DENSE);}
1878271440Sjkim    ;
1879271440Sjkim
1880271440SjkimTypeKeyword
1881271440Sjkim    : PARSEOP_TYPE_TRANSLATION              {$$ = TrCreateLeafNode (PARSEOP_TYPE_TRANSLATION);}
1882271440Sjkim    | PARSEOP_TYPE_STATIC                   {$$ = TrCreateLeafNode (PARSEOP_TYPE_STATIC);}
1883271440Sjkim    ;
1884271440Sjkim
1885271440SjkimUpdateRuleKeyword
1886271440Sjkim    : PARSEOP_UPDATERULE_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_PRESERVE);}
1887271440Sjkim    | PARSEOP_UPDATERULE_ONES               {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ONES);}
1888271440Sjkim    | PARSEOP_UPDATERULE_ZEROS              {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ZEROS);}
1889271440Sjkim    ;
1890271440Sjkim
1891271440SjkimWireModeKeyword
1892271440Sjkim    : PARSEOP_WIREMODE_FOUR                 {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_FOUR);}
1893271440Sjkim    | PARSEOP_WIREMODE_THREE                {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_THREE);}
1894271440Sjkim    ;
1895271440Sjkim
1896271440SjkimXferSizeKeyword
1897271440Sjkim    : PARSEOP_XFERSIZE_8                    {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_8,   0);}
1898271440Sjkim    | PARSEOP_XFERSIZE_16                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_16,  1);}
1899271440Sjkim    | PARSEOP_XFERSIZE_32                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32,  2);}
1900271440Sjkim    | PARSEOP_XFERSIZE_64                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_64,  3);}
1901271440Sjkim    | PARSEOP_XFERSIZE_128                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_128, 4);}
1902271440Sjkim    | PARSEOP_XFERSIZE_256                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_256, 5);}
1903271440Sjkim    ;
1904271440Sjkim
1905271440SjkimXferTypeKeyword
1906271440Sjkim    : PARSEOP_XFERTYPE_8                    {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8);}
1907271440Sjkim    | PARSEOP_XFERTYPE_8_16                 {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8_16);}
1908271440Sjkim    | PARSEOP_XFERTYPE_16                   {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_16);}
1909271440Sjkim    ;
1910271440Sjkim
1911271440Sjkim
1912271440Sjkim/******* Miscellaneous Types **************************************************/
1913271440Sjkim
1914271440Sjkim
1915271440SjkimSuperName
1916271440Sjkim    : NameString                    {}
1917271440Sjkim    | ArgTerm                       {}
1918271440Sjkim    | LocalTerm                     {}
1919271440Sjkim    | DebugTerm                     {}
1920271440Sjkim    | Type6Opcode                   {}
1921271440Sjkim
1922281687Sjkim/* For ObjectType: SuperName except for MethodInvocationTerm */
1923271440Sjkim
1924271440SjkimObjectTypeName
1925271440Sjkim    : NameString                    {}
1926271440Sjkim    | ArgTerm                       {}
1927271440Sjkim    | LocalTerm                     {}
1928271440Sjkim    | DebugTerm                     {}
1929271440Sjkim    | RefOfTerm                     {}
1930271440Sjkim    | DerefOfTerm                   {}
1931271440Sjkim    | IndexTerm                     {}
1932271440Sjkim
1933281687Sjkim/*    | MethodInvocationTerm          {} */  /* Caused reduce/reduce with Type6Opcode->MethodInvocationTerm */
1934271440Sjkim    ;
1935271440Sjkim
1936271440SjkimArgTerm
1937271440Sjkim    : PARSEOP_ARG0                  {$$ = TrCreateLeafNode (PARSEOP_ARG0);}
1938271440Sjkim    | PARSEOP_ARG1                  {$$ = TrCreateLeafNode (PARSEOP_ARG1);}
1939271440Sjkim    | PARSEOP_ARG2                  {$$ = TrCreateLeafNode (PARSEOP_ARG2);}
1940271440Sjkim    | PARSEOP_ARG3                  {$$ = TrCreateLeafNode (PARSEOP_ARG3);}
1941271440Sjkim    | PARSEOP_ARG4                  {$$ = TrCreateLeafNode (PARSEOP_ARG4);}
1942271440Sjkim    | PARSEOP_ARG5                  {$$ = TrCreateLeafNode (PARSEOP_ARG5);}
1943271440Sjkim    | PARSEOP_ARG6                  {$$ = TrCreateLeafNode (PARSEOP_ARG6);}
1944271440Sjkim    ;
1945271440Sjkim
1946271440SjkimLocalTerm
1947271440Sjkim    : PARSEOP_LOCAL0                {$$ = TrCreateLeafNode (PARSEOP_LOCAL0);}
1948271440Sjkim    | PARSEOP_LOCAL1                {$$ = TrCreateLeafNode (PARSEOP_LOCAL1);}
1949271440Sjkim    | PARSEOP_LOCAL2                {$$ = TrCreateLeafNode (PARSEOP_LOCAL2);}
1950271440Sjkim    | PARSEOP_LOCAL3                {$$ = TrCreateLeafNode (PARSEOP_LOCAL3);}
1951271440Sjkim    | PARSEOP_LOCAL4                {$$ = TrCreateLeafNode (PARSEOP_LOCAL4);}
1952271440Sjkim    | PARSEOP_LOCAL5                {$$ = TrCreateLeafNode (PARSEOP_LOCAL5);}
1953271440Sjkim    | PARSEOP_LOCAL6                {$$ = TrCreateLeafNode (PARSEOP_LOCAL6);}
1954271440Sjkim    | PARSEOP_LOCAL7                {$$ = TrCreateLeafNode (PARSEOP_LOCAL7);}
1955271440Sjkim    ;
1956271440Sjkim
1957271440SjkimDebugTerm
1958271440Sjkim    : PARSEOP_DEBUG                 {$$ = TrCreateLeafNode (PARSEOP_DEBUG);}
1959271440Sjkim    ;
1960271440Sjkim
1961271440Sjkim
1962271440SjkimByteConst
1963271440Sjkim    : Integer                       {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
1964271440Sjkim    ;
1965271440Sjkim
1966271440SjkimWordConst
1967271440Sjkim    : Integer                       {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
1968271440Sjkim    ;
1969271440Sjkim
1970271440SjkimDWordConst
1971271440Sjkim    : Integer                       {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
1972271440Sjkim    ;
1973271440Sjkim
1974271440SjkimQWordConst
1975271440Sjkim    : Integer                       {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
1976271440Sjkim    ;
1977271440Sjkim
1978271440SjkimInteger
1979271440Sjkim    : PARSEOP_INTEGER               {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, AslCompilerlval.i);}
1980271440Sjkim    ;
1981271440Sjkim
1982271440SjkimString
1983271440Sjkim    : PARSEOP_STRING_LITERAL        {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, (ACPI_NATIVE_INT) AslCompilerlval.s);}
1984271440Sjkim    ;
1985271440Sjkim
1986271440SjkimConstTerm
1987271440Sjkim    : ConstExprTerm                 {}
1988271440Sjkim    | PARSEOP_REVISION              {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
1989271440Sjkim    ;
1990271440Sjkim
1991271440SjkimConstExprTerm
1992271440Sjkim    : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
1993271440Sjkim    | PARSEOP_ONE                   {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
1994271440Sjkim    | PARSEOP_ONES                  {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
1995271440Sjkim    | PARSEOP___DATE__              {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
1996271440Sjkim    | PARSEOP___FILE__              {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
1997271440Sjkim    | PARSEOP___LINE__              {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
1998271440Sjkim    | PARSEOP___PATH__              {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);}
1999271440Sjkim    ;
2000271440Sjkim
2001271440Sjkim/*
2002271440Sjkim * The NODE_COMPILE_TIME_CONST flag in the following constant expressions
2003271440Sjkim * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes
2004271440Sjkim * to simple integers. It is an error if these types of expressions cannot be
2005271440Sjkim * reduced, since the AML grammar for ****ConstExpr requires a simple constant.
2006271440Sjkim * Note: The required byte length of the constant is passed through to the
2007271440Sjkim * constant folding code in the node AmlLength field.
2008271440Sjkim */
2009271440SjkimByteConstExpr
2010271440Sjkim    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
2011271440Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
2012271440Sjkim    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
2013271440Sjkim    | ByteConst                     {}
2014271440Sjkim    ;
2015271440Sjkim
2016271440SjkimWordConstExpr
2017271440Sjkim    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
2018271440Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
2019271440Sjkim    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
2020271440Sjkim    | WordConst                     {}
2021271440Sjkim    ;
2022271440Sjkim
2023271440SjkimDWordConstExpr
2024271440Sjkim    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
2025271440Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
2026271440Sjkim    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
2027271440Sjkim    | DWordConst                    {}
2028271440Sjkim    ;
2029271440Sjkim
2030271440SjkimQWordConstExpr
2031271440Sjkim    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
2032271440Sjkim    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
2033271440Sjkim    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
2034271440Sjkim    | QWordConst                    {}
2035271440Sjkim    ;
2036271440Sjkim
2037271440Sjkim/* OptionalCount must appear before ByteList or an incorrect reduction will result */
2038271440Sjkim
2039271440SjkimOptionalCount
2040271440Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
2041271440Sjkim    | ','                           {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
2042271440Sjkim    | ',' TermArg                   {$$ = $2;}
2043271440Sjkim    ;
2044271440Sjkim
2045271440SjkimBufferTerm
2046271440Sjkim    : PARSEOP_BUFFER '('            {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
2047271440Sjkim        OptionalTermArg
2048271440Sjkim        ')' '{'
2049271440Sjkim            BufferTermData '}'      {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2050271440Sjkim    | PARSEOP_BUFFER '('
2051271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2052271440Sjkim    ;
2053271440Sjkim
2054271440SjkimBufferTermData
2055271440Sjkim    : ByteList                      {}
2056271440Sjkim    | StringData                    {}
2057271440Sjkim    ;
2058271440Sjkim
2059271440SjkimByteList
2060271440Sjkim    :                               {$$ = NULL;}
2061271440Sjkim    | ByteConstExpr
2062271440Sjkim    | ByteList ','                  /* Allows a trailing comma at list end */
2063271440Sjkim    | ByteList ','
2064271440Sjkim        ByteConstExpr               {$$ = TrLinkPeerNode ($1,$3);}
2065271440Sjkim    ;
2066271440Sjkim
2067271440SjkimDataBufferTerm
2068271440Sjkim    : PARSEOP_DATABUFFER  '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DATABUFFER);}
2069271440Sjkim        OptionalWordConst
2070271440Sjkim        ')' '{'
2071271440Sjkim            ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2072271440Sjkim    | PARSEOP_DATABUFFER '('
2073271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2074271440Sjkim    ;
2075271440Sjkim
2076271440SjkimDWordList
2077271440Sjkim    :                               {$$ = NULL;}
2078271440Sjkim    | DWordConstExpr
2079271440Sjkim    | DWordList ','                 /* Allows a trailing comma at list end */
2080271440Sjkim    | DWordList ','
2081271440Sjkim        DWordConstExpr              {$$ = TrLinkPeerNode ($1,$3);}
2082271440Sjkim    ;
2083271440Sjkim
2084271440SjkimPackageTerm
2085271440Sjkim    : PARSEOP_PACKAGE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_VAR_PACKAGE);}
2086271440Sjkim        VarPackageLengthTerm
2087271440Sjkim        ')' '{'
2088271440Sjkim            PackageList '}'         {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2089271440Sjkim    | PARSEOP_PACKAGE '('
2090271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2091271440Sjkim    ;
2092271440Sjkim
2093271440SjkimPackageList
2094271440Sjkim    :                               {$$ = NULL;}
2095271440Sjkim    | PackageElement
2096271440Sjkim    | PackageList ','               /* Allows a trailing comma at list end */
2097271440Sjkim    | PackageList ','
2098271440Sjkim        PackageElement              {$$ = TrLinkPeerNode ($1,$3);}
2099271440Sjkim    ;
2100271440Sjkim
2101271440SjkimPackageElement
2102271440Sjkim    : DataObject                    {}
2103271440Sjkim    | NameString                    {}
2104271440Sjkim    ;
2105271440Sjkim
2106271440SjkimVarPackageLengthTerm
2107271440Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
2108271440Sjkim    | TermArg                       {$$ = $1;}
2109271440Sjkim    ;
2110271440Sjkim
2111271440Sjkim
2112271440Sjkim/******* Macros ***********************************************/
2113271440Sjkim
2114271440Sjkim
2115271440SjkimEISAIDTerm
2116271440Sjkim    : PARSEOP_EISAID '('
2117271440Sjkim        StringData ')'              {$$ = TrUpdateNode (PARSEOP_EISAID, $3);}
2118271440Sjkim    | PARSEOP_EISAID '('
2119271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2120271440Sjkim    ;
2121271440Sjkim
2122271440SjkimUnicodeTerm
2123271440Sjkim    : PARSEOP_UNICODE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_UNICODE);}
2124271440Sjkim        StringData
2125271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,2,0,$4);}
2126271440Sjkim    | PARSEOP_UNICODE '('
2127271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2128271440Sjkim    ;
2129271440Sjkim
2130271440Sjkim
2131271440Sjkim/******* Resources and Memory ***********************************************/
2132271440Sjkim
2133271440Sjkim
2134271440Sjkim/*
2135271440Sjkim * Note: Create two default nodes to allow conversion to a Buffer AML opcode
2136271440Sjkim * Also, insert the EndTag at the end of the template.
2137271440Sjkim */
2138271440SjkimResourceTemplateTerm
2139271440Sjkim    : PARSEOP_RESOURCETEMPLATE '(' ')'
2140271440Sjkim        '{'
2141271440Sjkim        ResourceMacroList '}'       {$$ = TrCreateNode (PARSEOP_RESOURCETEMPLATE,4,
2142271440Sjkim                                          TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
2143271440Sjkim                                          TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
2144271440Sjkim                                          $5,
2145271440Sjkim                                          TrCreateLeafNode (PARSEOP_ENDTAG));}
2146271440Sjkim    ;
2147271440Sjkim
2148271440SjkimResourceMacroList
2149271440Sjkim    :                               {$$ = NULL;}
2150271440Sjkim    | ResourceMacroList
2151271440Sjkim        ResourceMacroTerm           {$$ = TrLinkPeerNode ($1,$2);}
2152271440Sjkim    ;
2153271440Sjkim
2154271440SjkimResourceMacroTerm
2155271440Sjkim    : DMATerm                       {}
2156271440Sjkim    | DWordIOTerm                   {}
2157271440Sjkim    | DWordMemoryTerm               {}
2158271440Sjkim    | DWordSpaceTerm                {}
2159271440Sjkim    | EndDependentFnTerm            {}
2160271440Sjkim    | ExtendedIOTerm                {}
2161271440Sjkim    | ExtendedMemoryTerm            {}
2162271440Sjkim    | ExtendedSpaceTerm             {}
2163271440Sjkim    | FixedDmaTerm                  {}
2164271440Sjkim    | FixedIOTerm                   {}
2165271440Sjkim    | GpioIntTerm                   {}
2166271440Sjkim    | GpioIoTerm                    {}
2167271440Sjkim    | I2cSerialBusTerm              {}
2168271440Sjkim    | InterruptTerm                 {}
2169271440Sjkim    | IOTerm                        {}
2170271440Sjkim    | IRQNoFlagsTerm                {}
2171271440Sjkim    | IRQTerm                       {}
2172271440Sjkim    | Memory24Term                  {}
2173271440Sjkim    | Memory32FixedTerm             {}
2174271440Sjkim    | Memory32Term                  {}
2175271440Sjkim    | QWordIOTerm                   {}
2176271440Sjkim    | QWordMemoryTerm               {}
2177271440Sjkim    | QWordSpaceTerm                {}
2178271440Sjkim    | RegisterTerm                  {}
2179271440Sjkim    | SpiSerialBusTerm              {}
2180271440Sjkim    | StartDependentFnNoPriTerm     {}
2181271440Sjkim    | StartDependentFnTerm          {}
2182271440Sjkim    | UartSerialBusTerm             {}
2183271440Sjkim    | VendorLongTerm                {}
2184271440Sjkim    | VendorShortTerm               {}
2185271440Sjkim    | WordBusNumberTerm             {}
2186271440Sjkim    | WordIOTerm                    {}
2187271440Sjkim    | WordSpaceTerm                 {}
2188271440Sjkim    ;
2189271440Sjkim
2190271440SjkimDMATerm
2191271440Sjkim    : PARSEOP_DMA '('               {$<n>$ = TrCreateLeafNode (PARSEOP_DMA);}
2192271440Sjkim        DMATypeKeyword
2193271440Sjkim        OptionalBusMasterKeyword
2194271440Sjkim        ',' XferTypeKeyword
2195271440Sjkim        OptionalNameString_Last
2196271440Sjkim        ')' '{'
2197271440Sjkim            ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$5,$7,$8,$11);}
2198271440Sjkim    | PARSEOP_DMA '('
2199271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2200271440Sjkim    ;
2201271440Sjkim
2202271440SjkimDWordIOTerm
2203271440Sjkim    : PARSEOP_DWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDIO);}
2204271440Sjkim        OptionalResourceType_First
2205271440Sjkim        OptionalMinType
2206271440Sjkim        OptionalMaxType
2207271440Sjkim        OptionalDecodeType
2208271440Sjkim        OptionalRangeType
2209271440Sjkim        ',' DWordConstExpr
2210271440Sjkim        ',' DWordConstExpr
2211271440Sjkim        ',' DWordConstExpr
2212271440Sjkim        ',' DWordConstExpr
2213271440Sjkim        ',' DWordConstExpr
2214271440Sjkim        OptionalByteConstExpr
2215271440Sjkim        OptionalStringData
2216271440Sjkim        OptionalNameString
2217271440Sjkim        OptionalType
2218271440Sjkim        OptionalTranslationType_Last
2219271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
2220271440Sjkim    | PARSEOP_DWORDIO '('
2221271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2222271440Sjkim    ;
2223271440Sjkim
2224271440SjkimDWordMemoryTerm
2225271440Sjkim    : PARSEOP_DWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDMEMORY);}
2226271440Sjkim        OptionalResourceType_First
2227271440Sjkim        OptionalDecodeType
2228271440Sjkim        OptionalMinType
2229271440Sjkim        OptionalMaxType
2230271440Sjkim        OptionalMemType
2231271440Sjkim        ',' OptionalReadWriteKeyword
2232271440Sjkim        ',' DWordConstExpr
2233271440Sjkim        ',' DWordConstExpr
2234271440Sjkim        ',' DWordConstExpr
2235271440Sjkim        ',' DWordConstExpr
2236271440Sjkim        ',' DWordConstExpr
2237271440Sjkim        OptionalByteConstExpr
2238271440Sjkim        OptionalStringData
2239271440Sjkim        OptionalNameString
2240271440Sjkim        OptionalAddressRange
2241271440Sjkim        OptionalType_Last
2242271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
2243271440Sjkim    | PARSEOP_DWORDMEMORY '('
2244271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2245271440Sjkim    ;
2246271440Sjkim
2247271440SjkimDWordSpaceTerm
2248271440Sjkim    : PARSEOP_DWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDSPACE);}
2249271440Sjkim        ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
2250271440Sjkim        OptionalResourceType
2251271440Sjkim        OptionalDecodeType
2252271440Sjkim        OptionalMinType
2253271440Sjkim        OptionalMaxType
2254271440Sjkim        ',' ByteConstExpr
2255271440Sjkim        ',' DWordConstExpr
2256271440Sjkim        ',' DWordConstExpr
2257271440Sjkim        ',' DWordConstExpr
2258271440Sjkim        ',' DWordConstExpr
2259271440Sjkim        ',' DWordConstExpr
2260271440Sjkim        OptionalByteConstExpr
2261271440Sjkim        OptionalStringData
2262271440Sjkim        OptionalNameString_Last
2263271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
2264271440Sjkim    | PARSEOP_DWORDSPACE '('
2265271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2266271440Sjkim    ;
2267271440Sjkim
2268271440Sjkim
2269271440SjkimEndDependentFnTerm
2270271440Sjkim    : PARSEOP_ENDDEPENDENTFN '('
2271271440Sjkim        ')'                         {$$ = TrCreateLeafNode (PARSEOP_ENDDEPENDENTFN);}
2272271440Sjkim    | PARSEOP_ENDDEPENDENTFN '('
2273271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2274271440Sjkim    ;
2275271440Sjkim
2276271440SjkimExtendedIOTerm
2277271440Sjkim    : PARSEOP_EXTENDEDIO '('        {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDIO);}
2278271440Sjkim        OptionalResourceType_First
2279271440Sjkim        OptionalMinType
2280271440Sjkim        OptionalMaxType
2281271440Sjkim        OptionalDecodeType
2282271440Sjkim        OptionalRangeType
2283271440Sjkim        ',' QWordConstExpr
2284271440Sjkim        ',' QWordConstExpr
2285271440Sjkim        ',' QWordConstExpr
2286271440Sjkim        ',' QWordConstExpr
2287271440Sjkim        ',' QWordConstExpr
2288271440Sjkim        OptionalQWordConstExpr
2289271440Sjkim        OptionalNameString
2290271440Sjkim        OptionalType
2291271440Sjkim        OptionalTranslationType_Last
2292271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22);}
2293271440Sjkim    | PARSEOP_EXTENDEDIO '('
2294271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2295271440Sjkim    ;
2296271440Sjkim
2297271440SjkimExtendedMemoryTerm
2298271440Sjkim    : PARSEOP_EXTENDEDMEMORY '('    {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDMEMORY);}
2299271440Sjkim        OptionalResourceType_First
2300271440Sjkim        OptionalDecodeType
2301271440Sjkim        OptionalMinType
2302271440Sjkim        OptionalMaxType
2303271440Sjkim        OptionalMemType
2304271440Sjkim        ',' OptionalReadWriteKeyword
2305271440Sjkim        ',' QWordConstExpr
2306271440Sjkim        ',' QWordConstExpr
2307271440Sjkim        ',' QWordConstExpr
2308271440Sjkim        ',' QWordConstExpr
2309271440Sjkim        ',' QWordConstExpr
2310271440Sjkim        OptionalQWordConstExpr
2311271440Sjkim        OptionalNameString
2312271440Sjkim        OptionalAddressRange
2313271440Sjkim        OptionalType_Last
2314271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24);}
2315271440Sjkim    | PARSEOP_EXTENDEDMEMORY '('
2316271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2317271440Sjkim    ;
2318271440Sjkim
2319271440SjkimExtendedSpaceTerm
2320271440Sjkim    : PARSEOP_EXTENDEDSPACE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDSPACE);}
2321271440Sjkim        ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
2322271440Sjkim        OptionalResourceType
2323271440Sjkim        OptionalDecodeType
2324271440Sjkim        OptionalMinType
2325271440Sjkim        OptionalMaxType
2326271440Sjkim        ',' ByteConstExpr
2327271440Sjkim        ',' QWordConstExpr
2328271440Sjkim        ',' QWordConstExpr
2329271440Sjkim        ',' QWordConstExpr
2330271440Sjkim        ',' QWordConstExpr
2331271440Sjkim        ',' QWordConstExpr
2332271440Sjkim        OptionalQWordConstExpr
2333271440Sjkim        OptionalNameString_Last
2334271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23);}
2335271440Sjkim    | PARSEOP_EXTENDEDSPACE '('
2336271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2337271440Sjkim    ;
2338271440Sjkim
2339271440SjkimFixedDmaTerm
2340271440Sjkim    : PARSEOP_FIXEDDMA '('          {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDDMA);}
2341271440Sjkim        WordConstExpr               /* 04: DMA RequestLines */
2342271440Sjkim        ',' WordConstExpr           /* 06: DMA Channels */
2343271440Sjkim        OptionalXferSize            /* 07: DMA TransferSize */
2344271440Sjkim        OptionalNameString          /* 08: DescriptorName */
2345271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$7,$8);}
2346271440Sjkim    | PARSEOP_FIXEDDMA '('
2347271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2348271440Sjkim    ;
2349271440Sjkim
2350271440SjkimFixedIOTerm
2351271440Sjkim    : PARSEOP_FIXEDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDIO);}
2352271440Sjkim        WordConstExpr
2353271440Sjkim        ',' ByteConstExpr
2354271440Sjkim        OptionalNameString_Last
2355271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
2356271440Sjkim    | PARSEOP_FIXEDIO '('
2357271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2358271440Sjkim    ;
2359271440Sjkim
2360271440SjkimGpioIntTerm
2361271440Sjkim    : PARSEOP_GPIO_INT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_INT);}
2362271440Sjkim        InterruptTypeKeyword        /* 04: InterruptType */
2363271440Sjkim        ',' InterruptLevel          /* 06: InterruptLevel */
2364271440Sjkim        OptionalShareType           /* 07: SharedType */
2365271440Sjkim        ',' PinConfigByte           /* 09: PinConfig */
2366271440Sjkim        OptionalWordConstExpr       /* 10: DebounceTimeout */
2367271440Sjkim        ',' StringData              /* 12: ResourceSource */
2368271440Sjkim        OptionalByteConstExpr       /* 13: ResourceSourceIndex */
2369271440Sjkim        OptionalResourceType        /* 14: ResourceType */
2370271440Sjkim        OptionalNameString          /* 15: DescriptorName */
2371271440Sjkim        OptionalBuffer_Last         /* 16: VendorData */
2372271440Sjkim        ')' '{'
2373271440Sjkim            DWordConstExpr '}'      {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$9,$10,$12,$13,$14,$15,$16,$19);}
2374271440Sjkim    | PARSEOP_GPIO_INT '('
2375271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2376271440Sjkim    ;
2377271440Sjkim
2378271440SjkimGpioIoTerm
2379271440Sjkim    : PARSEOP_GPIO_IO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_IO);}
2380271440Sjkim        OptionalShareType_First     /* 04: SharedType */
2381271440Sjkim        ',' PinConfigByte           /* 06: PinConfig */
2382271440Sjkim        OptionalWordConstExpr       /* 07: DebounceTimeout */
2383271440Sjkim        OptionalWordConstExpr       /* 08: DriveStrength */
2384271440Sjkim        OptionalIoRestriction       /* 09: IoRestriction */
2385271440Sjkim        ',' StringData              /* 11: ResourceSource */
2386271440Sjkim        OptionalByteConstExpr       /* 12: ResourceSourceIndex */
2387271440Sjkim        OptionalResourceType        /* 13: ResourceType */
2388271440Sjkim        OptionalNameString          /* 14: DescriptorName */
2389271440Sjkim        OptionalBuffer_Last         /* 15: VendorData */
2390271440Sjkim        ')' '{'
2391271440Sjkim            DWordList '}'           {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$8,$9,$11,$12,$13,$14,$15,$18);}
2392271440Sjkim    | PARSEOP_GPIO_IO '('
2393271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2394271440Sjkim    ;
2395271440Sjkim
2396271440SjkimI2cSerialBusTerm
2397271440Sjkim    : PARSEOP_I2C_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS);}
2398271440Sjkim        WordConstExpr               /* 04: SlaveAddress */
2399271440Sjkim        OptionalSlaveMode           /* 05: SlaveMode */
2400271440Sjkim        ',' DWordConstExpr          /* 07: ConnectionSpeed */
2401271440Sjkim        OptionalAddressingMode      /* 08: AddressingMode */
2402271440Sjkim        ',' StringData              /* 10: ResourceSource */
2403271440Sjkim        OptionalByteConstExpr       /* 11: ResourceSourceIndex */
2404271440Sjkim        OptionalResourceType        /* 12: ResourceType */
2405271440Sjkim        OptionalNameString          /* 13: DescriptorName */
2406271440Sjkim        OptionalBuffer_Last         /* 14: VendorData */
2407271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,9,$4,$5,$7,$8,$10,$11,$12,$13,$14);}
2408271440Sjkim    | PARSEOP_I2C_SERIALBUS '('
2409271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2410271440Sjkim    ;
2411271440Sjkim
2412271440SjkimInterruptTerm
2413271440Sjkim    : PARSEOP_INTERRUPT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INTERRUPT);}
2414271440Sjkim        OptionalResourceType_First
2415271440Sjkim        ',' InterruptTypeKeyword
2416271440Sjkim        ',' InterruptLevel
2417271440Sjkim        OptionalShareType
2418271440Sjkim        OptionalByteConstExpr
2419271440Sjkim        OptionalStringData
2420271440Sjkim        OptionalNameString_Last
2421271440Sjkim        ')' '{'
2422271440Sjkim            DWordList '}'           {$$ = TrLinkChildren ($<n>3,8,$4,$6,$8,$9,$10,$11,$12,$15);}
2423271440Sjkim    | PARSEOP_INTERRUPT '('
2424271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2425271440Sjkim    ;
2426271440Sjkim
2427271440SjkimIOTerm
2428271440Sjkim    : PARSEOP_IO '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IO);}
2429271440Sjkim        IODecodeKeyword
2430271440Sjkim        ',' WordConstExpr
2431271440Sjkim        ',' WordConstExpr
2432271440Sjkim        ',' ByteConstExpr
2433271440Sjkim        ',' ByteConstExpr
2434271440Sjkim        OptionalNameString_Last
2435271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
2436271440Sjkim    | PARSEOP_IO '('
2437271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2438271440Sjkim    ;
2439271440Sjkim
2440271440SjkimIRQNoFlagsTerm
2441271440Sjkim    : PARSEOP_IRQNOFLAGS '('        {$<n>$ = TrCreateLeafNode (PARSEOP_IRQNOFLAGS);}
2442271440Sjkim        OptionalNameString_First
2443271440Sjkim        ')' '{'
2444271440Sjkim            ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2445271440Sjkim    | PARSEOP_IRQNOFLAGS '('
2446271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2447271440Sjkim    ;
2448271440Sjkim
2449271440SjkimIRQTerm
2450271440Sjkim    : PARSEOP_IRQ '('               {$<n>$ = TrCreateLeafNode (PARSEOP_IRQ);}
2451271440Sjkim        InterruptTypeKeyword
2452271440Sjkim        ',' InterruptLevel
2453271440Sjkim        OptionalShareType
2454271440Sjkim        OptionalNameString_Last
2455271440Sjkim        ')' '{'
2456271440Sjkim            ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$6,$7,$8,$11);}
2457271440Sjkim    | PARSEOP_IRQ '('
2458271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2459271440Sjkim    ;
2460271440Sjkim
2461271440SjkimMemory24Term
2462271440Sjkim    : PARSEOP_MEMORY24 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY24);}
2463271440Sjkim        OptionalReadWriteKeyword
2464271440Sjkim        ',' WordConstExpr
2465271440Sjkim        ',' WordConstExpr
2466271440Sjkim        ',' WordConstExpr
2467271440Sjkim        ',' WordConstExpr
2468271440Sjkim        OptionalNameString_Last
2469271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
2470271440Sjkim    | PARSEOP_MEMORY24 '('
2471271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2472271440Sjkim    ;
2473271440Sjkim
2474271440SjkimMemory32FixedTerm
2475271440Sjkim    : PARSEOP_MEMORY32FIXED '('     {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32FIXED);}
2476271440Sjkim        OptionalReadWriteKeyword
2477271440Sjkim        ',' DWordConstExpr
2478271440Sjkim        ',' DWordConstExpr
2479271440Sjkim        OptionalNameString_Last
2480271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$8,$9);}
2481271440Sjkim    | PARSEOP_MEMORY32FIXED '('
2482271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2483271440Sjkim    ;
2484271440Sjkim
2485271440SjkimMemory32Term
2486271440Sjkim    : PARSEOP_MEMORY32 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32);}
2487271440Sjkim        OptionalReadWriteKeyword
2488271440Sjkim        ',' DWordConstExpr
2489271440Sjkim        ',' DWordConstExpr
2490271440Sjkim        ',' DWordConstExpr
2491271440Sjkim        ',' DWordConstExpr
2492271440Sjkim        OptionalNameString_Last
2493271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
2494271440Sjkim    | PARSEOP_MEMORY32 '('
2495271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2496271440Sjkim    ;
2497271440Sjkim
2498271440SjkimQWordIOTerm
2499271440Sjkim    : PARSEOP_QWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDIO);}
2500271440Sjkim        OptionalResourceType_First
2501271440Sjkim        OptionalMinType
2502271440Sjkim        OptionalMaxType
2503271440Sjkim        OptionalDecodeType
2504271440Sjkim        OptionalRangeType
2505271440Sjkim        ',' QWordConstExpr
2506271440Sjkim        ',' QWordConstExpr
2507271440Sjkim        ',' QWordConstExpr
2508271440Sjkim        ',' QWordConstExpr
2509271440Sjkim        ',' QWordConstExpr
2510271440Sjkim        OptionalByteConstExpr
2511271440Sjkim        OptionalStringData
2512271440Sjkim        OptionalNameString
2513271440Sjkim        OptionalType
2514271440Sjkim        OptionalTranslationType_Last
2515271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
2516271440Sjkim    | PARSEOP_QWORDIO '('
2517271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2518271440Sjkim    ;
2519271440Sjkim
2520271440SjkimQWordMemoryTerm
2521271440Sjkim    : PARSEOP_QWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDMEMORY);}
2522271440Sjkim        OptionalResourceType_First
2523271440Sjkim        OptionalDecodeType
2524271440Sjkim        OptionalMinType
2525271440Sjkim        OptionalMaxType
2526271440Sjkim        OptionalMemType
2527271440Sjkim        ',' OptionalReadWriteKeyword
2528271440Sjkim        ',' QWordConstExpr
2529271440Sjkim        ',' QWordConstExpr
2530271440Sjkim        ',' QWordConstExpr
2531271440Sjkim        ',' QWordConstExpr
2532271440Sjkim        ',' QWordConstExpr
2533271440Sjkim        OptionalByteConstExpr
2534271440Sjkim        OptionalStringData
2535271440Sjkim        OptionalNameString
2536271440Sjkim        OptionalAddressRange
2537271440Sjkim        OptionalType_Last
2538271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
2539271440Sjkim    | PARSEOP_QWORDMEMORY '('
2540271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2541271440Sjkim    ;
2542271440Sjkim
2543271440SjkimQWordSpaceTerm
2544271440Sjkim    : PARSEOP_QWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDSPACE);}
2545271440Sjkim        ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
2546271440Sjkim        OptionalResourceType
2547271440Sjkim        OptionalDecodeType
2548271440Sjkim        OptionalMinType
2549271440Sjkim        OptionalMaxType
2550271440Sjkim        ',' ByteConstExpr
2551271440Sjkim        ',' QWordConstExpr
2552271440Sjkim        ',' QWordConstExpr
2553271440Sjkim        ',' QWordConstExpr
2554271440Sjkim        ',' QWordConstExpr
2555271440Sjkim        ',' QWordConstExpr
2556271440Sjkim        OptionalByteConstExpr
2557271440Sjkim        OptionalStringData
2558271440Sjkim        OptionalNameString_Last
2559271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
2560271440Sjkim    | PARSEOP_QWORDSPACE '('
2561271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2562271440Sjkim    ;
2563271440Sjkim
2564271440SjkimRegisterTerm
2565271440Sjkim    : PARSEOP_REGISTER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_REGISTER);}
2566271440Sjkim        AddressSpaceKeyword
2567271440Sjkim        ',' ByteConstExpr
2568271440Sjkim        ',' ByteConstExpr
2569271440Sjkim        ',' QWordConstExpr
2570271440Sjkim        OptionalAccessSize
2571271440Sjkim        OptionalNameString_Last
2572271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$11,$12);}
2573271440Sjkim    | PARSEOP_REGISTER '('
2574271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2575271440Sjkim    ;
2576271440Sjkim
2577271440SjkimSpiSerialBusTerm
2578271440Sjkim    : PARSEOP_SPI_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS);}
2579271440Sjkim        WordConstExpr               /* 04: DeviceSelection */
2580271440Sjkim        OptionalDevicePolarity      /* 05: DevicePolarity */
2581271440Sjkim        OptionalWireMode            /* 06: WireMode */
2582271440Sjkim        ',' ByteConstExpr           /* 08: DataBitLength */
2583271440Sjkim        OptionalSlaveMode           /* 09: SlaveMode */
2584271440Sjkim        ',' DWordConstExpr          /* 11: ConnectionSpeed */
2585271440Sjkim        ',' ClockPolarityKeyword    /* 13: ClockPolarity */
2586271440Sjkim        ',' ClockPhaseKeyword       /* 15: ClockPhase */
2587271440Sjkim        ',' StringData              /* 17: ResourceSource */
2588271440Sjkim        OptionalByteConstExpr       /* 18: ResourceSourceIndex */
2589271440Sjkim        OptionalResourceType        /* 19: ResourceType */
2590271440Sjkim        OptionalNameString          /* 20: DescriptorName */
2591271440Sjkim        OptionalBuffer_Last         /* 21: VendorData */
2592271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,$21);}
2593271440Sjkim    | PARSEOP_SPI_SERIALBUS '('
2594271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2595271440Sjkim    ;
2596271440Sjkim
2597271440SjkimStartDependentFnNoPriTerm
2598271440Sjkim    : PARSEOP_STARTDEPENDENTFN_NOPRI '('    {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
2599271440Sjkim        ')' '{'
2600271440Sjkim        ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,1,$6);}
2601271440Sjkim    | PARSEOP_STARTDEPENDENTFN_NOPRI '('
2602271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2603271440Sjkim    ;
2604271440Sjkim
2605271440SjkimStartDependentFnTerm
2606271440Sjkim    : PARSEOP_STARTDEPENDENTFN '('  {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN);}
2607271440Sjkim        ByteConstExpr
2608271440Sjkim        ',' ByteConstExpr
2609271440Sjkim        ')' '{'
2610271440Sjkim        ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,3,$4,$6,$9);}
2611271440Sjkim    | PARSEOP_STARTDEPENDENTFN '('
2612271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2613271440Sjkim    ;
2614271440Sjkim
2615271440SjkimUartSerialBusTerm
2616271440Sjkim    : PARSEOP_UART_SERIALBUS '('    {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS);}
2617271440Sjkim        DWordConstExpr              /* 04: ConnectionSpeed */
2618271440Sjkim        OptionalBitsPerByte         /* 05: BitsPerByte */
2619271440Sjkim        OptionalStopBits            /* 06: StopBits */
2620271440Sjkim        ',' ByteConstExpr           /* 08: LinesInUse */
2621271440Sjkim        OptionalEndian              /* 09: Endianess */
2622271440Sjkim        OptionalParityType          /* 10: Parity */
2623271440Sjkim        OptionalFlowControl         /* 11: FlowControl */
2624271440Sjkim        ',' WordConstExpr           /* 13: Rx BufferSize */
2625271440Sjkim        ',' WordConstExpr           /* 15: Tx BufferSize */
2626271440Sjkim        ',' StringData              /* 17: ResourceSource */
2627271440Sjkim        OptionalByteConstExpr       /* 18: ResourceSourceIndex */
2628271440Sjkim        OptionalResourceType        /* 19: ResourceType */
2629271440Sjkim        OptionalNameString          /* 20: DescriptorName */
2630271440Sjkim        OptionalBuffer_Last         /* 21: VendorData */
2631271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,$21);}
2632271440Sjkim    | PARSEOP_UART_SERIALBUS '('
2633271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2634271440Sjkim    ;
2635271440Sjkim
2636271440SjkimVendorLongTerm
2637271440Sjkim    : PARSEOP_VENDORLONG '('        {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORLONG);}
2638271440Sjkim        OptionalNameString_First
2639271440Sjkim        ')' '{'
2640271440Sjkim            ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2641271440Sjkim    | PARSEOP_VENDORLONG '('
2642271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2643271440Sjkim    ;
2644271440Sjkim
2645271440SjkimVendorShortTerm
2646271440Sjkim    : PARSEOP_VENDORSHORT '('       {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORSHORT);}
2647271440Sjkim        OptionalNameString_First
2648271440Sjkim        ')' '{'
2649271440Sjkim            ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2650271440Sjkim    | PARSEOP_VENDORSHORT '('
2651271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2652271440Sjkim    ;
2653271440Sjkim
2654271440SjkimWordBusNumberTerm
2655271440Sjkim    : PARSEOP_WORDBUSNUMBER '('     {$<n>$ = TrCreateLeafNode (PARSEOP_WORDBUSNUMBER);}
2656271440Sjkim        OptionalResourceType_First
2657271440Sjkim        OptionalMinType
2658271440Sjkim        OptionalMaxType
2659271440Sjkim        OptionalDecodeType
2660271440Sjkim        ',' WordConstExpr
2661271440Sjkim        ',' WordConstExpr
2662271440Sjkim        ',' WordConstExpr
2663271440Sjkim        ',' WordConstExpr
2664271440Sjkim        ',' WordConstExpr
2665271440Sjkim        OptionalByteConstExpr
2666271440Sjkim        OptionalStringData
2667271440Sjkim        OptionalNameString_Last
2668271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,12,$4,$5,$6,$7,$9,$11,$13,$15,$17,$18,$19,$20);}
2669271440Sjkim    | PARSEOP_WORDBUSNUMBER '('
2670271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2671271440Sjkim    ;
2672271440Sjkim
2673271440SjkimWordIOTerm
2674271440Sjkim    : PARSEOP_WORDIO '('            {$<n>$ = TrCreateLeafNode (PARSEOP_WORDIO);}
2675271440Sjkim        OptionalResourceType_First
2676271440Sjkim        OptionalMinType
2677271440Sjkim        OptionalMaxType
2678271440Sjkim        OptionalDecodeType
2679271440Sjkim        OptionalRangeType
2680271440Sjkim        ',' WordConstExpr
2681271440Sjkim        ',' WordConstExpr
2682271440Sjkim        ',' WordConstExpr
2683271440Sjkim        ',' WordConstExpr
2684271440Sjkim        ',' WordConstExpr
2685271440Sjkim        OptionalByteConstExpr
2686271440Sjkim        OptionalStringData
2687271440Sjkim        OptionalNameString
2688271440Sjkim        OptionalType
2689271440Sjkim        OptionalTranslationType_Last
2690271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
2691271440Sjkim    | PARSEOP_WORDIO '('
2692271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2693271440Sjkim    ;
2694271440Sjkim
2695271440SjkimWordSpaceTerm
2696271440Sjkim    : PARSEOP_WORDSPACE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_WORDSPACE);}
2697271440Sjkim        ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
2698271440Sjkim        OptionalResourceType
2699271440Sjkim        OptionalDecodeType
2700271440Sjkim        OptionalMinType
2701271440Sjkim        OptionalMaxType
2702271440Sjkim        ',' ByteConstExpr
2703271440Sjkim        ',' WordConstExpr
2704271440Sjkim        ',' WordConstExpr
2705271440Sjkim        ',' WordConstExpr
2706271440Sjkim        ',' WordConstExpr
2707271440Sjkim        ',' WordConstExpr
2708271440Sjkim        OptionalByteConstExpr
2709271440Sjkim        OptionalStringData
2710271440Sjkim        OptionalNameString_Last
2711271440Sjkim        ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
2712271440Sjkim    | PARSEOP_WORDSPACE '('
2713271440Sjkim        error ')'                   {$$ = AslDoError(); yyclearin;}
2714271440Sjkim    ;
2715271440Sjkim
2716271440Sjkim
2717271440Sjkim/******* Object References ***********************************************/
2718271440Sjkim
2719271440Sjkim/* Allow IO, DMA, IRQ Resource macro names to also be used as identifiers */
2720271440Sjkim
2721271440SjkimNameString
2722271440Sjkim    : NameSeg                       {}
2723271440Sjkim    | PARSEOP_NAMESTRING            {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) AslCompilerlval.s);}
2724271440Sjkim    | PARSEOP_IO                    {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
2725271440Sjkim    | PARSEOP_DMA                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
2726271440Sjkim    | PARSEOP_IRQ                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
2727271440Sjkim    ;
2728271440Sjkim
2729271440SjkimNameSeg
2730271440Sjkim    : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT) AslCompilerlval.s);}
2731271440Sjkim    ;
2732271440Sjkim
2733271440Sjkim
2734271440Sjkim/******* Helper rules ****************************************************/
2735271440Sjkim
2736271440Sjkim
2737271440SjkimAmlPackageLengthTerm
2738271440Sjkim    : Integer                       {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,(ACPI_PARSE_OBJECT *) $1);}
2739271440Sjkim    ;
2740271440Sjkim
2741271440SjkimNameStringItem
2742271440Sjkim    : ',' NameString                {$$ = $2;}
2743271440Sjkim    | ',' error                     {$$ = AslDoError (); yyclearin;}
2744271440Sjkim    ;
2745271440Sjkim
2746271440SjkimTermArgItem
2747271440Sjkim    : ',' TermArg                   {$$ = $2;}
2748271440Sjkim    | ',' error                     {$$ = AslDoError (); yyclearin;}
2749271440Sjkim    ;
2750271440Sjkim
2751271440SjkimOptionalBusMasterKeyword
2752271440Sjkim    : ','                                       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
2753271440Sjkim    | ',' PARSEOP_BUSMASTERTYPE_MASTER          {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
2754271440Sjkim    | ',' PARSEOP_BUSMASTERTYPE_NOTMASTER       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_NOTMASTER);}
2755271440Sjkim    ;
2756271440Sjkim
2757271440SjkimOptionalAccessAttribTerm
2758271440Sjkim    :                               {$$ = NULL;}
2759271440Sjkim    | ','                           {$$ = NULL;}
2760271440Sjkim    | ',' ByteConstExpr             {$$ = $2;}
2761271440Sjkim    | ',' AccessAttribKeyword       {$$ = $2;}
2762271440Sjkim    ;
2763271440Sjkim
2764271440SjkimOptionalAccessSize
2765271440Sjkim    :                               {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
2766271440Sjkim    | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
2767271440Sjkim    | ',' ByteConstExpr             {$$ = $2;}
2768271440Sjkim    ;
2769271440Sjkim
2770271440SjkimOptionalAddressingMode
2771271440Sjkim    : ','                           {$$ = NULL;}
2772271440Sjkim    | ',' AddressingModeKeyword     {$$ = $2;}
2773271440Sjkim    ;
2774271440Sjkim
2775271440SjkimOptionalAddressRange
2776271440Sjkim    :                               {$$ = NULL;}
2777271440Sjkim    | ','                           {$$ = NULL;}
2778271440Sjkim    | ',' AddressKeyword            {$$ = $2;}
2779271440Sjkim    ;
2780271440Sjkim
2781271440SjkimOptionalBitsPerByte
2782271440Sjkim    : ','                           {$$ = NULL;}
2783271440Sjkim    | ',' BitsPerByteKeyword        {$$ = $2;}
2784271440Sjkim    ;
2785271440Sjkim
2786271440SjkimOptionalBuffer_Last
2787271440Sjkim    :                               {$$ = NULL;}
2788271440Sjkim    | ','                           {$$ = NULL;}
2789271440Sjkim    | ',' DataBufferTerm            {$$ = $2;}
2790271440Sjkim    ;
2791271440Sjkim
2792271440SjkimOptionalByteConstExpr
2793271440Sjkim    :                               {$$ = NULL;}
2794271440Sjkim    | ','                           {$$ = NULL;}
2795271440Sjkim    | ',' ByteConstExpr             {$$ = $2;}
2796271440Sjkim    ;
2797271440Sjkim
2798271440SjkimOptionalDecodeType
2799271440Sjkim    : ','                           {$$ = NULL;}
2800271440Sjkim    | ',' DecodeKeyword             {$$ = $2;}
2801271440Sjkim    ;
2802271440Sjkim
2803271440SjkimOptionalDevicePolarity
2804271440Sjkim    : ','                           {$$ = NULL;}
2805271440Sjkim    | ',' DevicePolarityKeyword     {$$ = $2;}
2806271440Sjkim    ;
2807271440Sjkim
2808271440SjkimOptionalDWordConstExpr
2809271440Sjkim    :                               {$$ = NULL;}
2810271440Sjkim    | ','                           {$$ = NULL;}
2811271440Sjkim    | ',' DWordConstExpr            {$$ = $2;}
2812271440Sjkim    ;
2813271440Sjkim
2814271440SjkimOptionalEndian
2815271440Sjkim    : ','                           {$$ = NULL;}
2816271440Sjkim    | ',' EndianKeyword             {$$ = $2;}
2817271440Sjkim    ;
2818271440Sjkim
2819271440SjkimOptionalFlowControl
2820271440Sjkim    : ','                           {$$ = NULL;}
2821271440Sjkim    | ',' FlowControlKeyword        {$$ = $2;}
2822271440Sjkim    ;
2823271440Sjkim
2824271440SjkimOptionalIoRestriction
2825271440Sjkim    : ','                           {$$ = NULL;}
2826271440Sjkim    | ',' IoRestrictionKeyword      {$$ = $2;}
2827271440Sjkim    ;
2828271440Sjkim
2829271440SjkimOptionalListString
2830271440Sjkim    :                               {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
2831271440Sjkim    | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
2832271440Sjkim    | ',' TermArg                   {$$ = $2;}
2833271440Sjkim    ;
2834271440Sjkim
2835271440SjkimOptionalMaxType
2836271440Sjkim    : ','                           {$$ = NULL;}
2837271440Sjkim    | ',' MaxKeyword                {$$ = $2;}
2838271440Sjkim    ;
2839271440Sjkim
2840271440SjkimOptionalMemType
2841271440Sjkim    : ','                           {$$ = NULL;}
2842271440Sjkim    | ',' MemTypeKeyword            {$$ = $2;}
2843271440Sjkim    ;
2844271440Sjkim
2845271440SjkimOptionalMinType
2846271440Sjkim    : ','                           {$$ = NULL;}
2847271440Sjkim    | ',' MinKeyword                {$$ = $2;}
2848271440Sjkim    ;
2849271440Sjkim
2850271440SjkimOptionalNameString
2851271440Sjkim    :                               {$$ = NULL;}
2852271440Sjkim    | ','                           {$$ = NULL;}
2853271440Sjkim    | ',' NameString                {$$ = $2;}
2854271440Sjkim    ;
2855271440Sjkim
2856271440SjkimOptionalNameString_Last
2857271440Sjkim    :                               {$$ = NULL;}
2858271440Sjkim    | ','                           {$$ = NULL;}
2859271440Sjkim    | ',' NameString                {$$ = $2;}
2860271440Sjkim    ;
2861271440Sjkim
2862271440SjkimOptionalNameString_First
2863271440Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}
2864271440Sjkim    | NameString                    {$$ = $1;}
2865271440Sjkim    ;
2866271440Sjkim
2867271440SjkimOptionalObjectTypeKeyword
2868271440Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
2869271440Sjkim    | ',' ObjectTypeKeyword         {$$ = $2;}
2870271440Sjkim    ;
2871271440Sjkim
2872271440SjkimOptionalParityType
2873271440Sjkim    : ','                           {$$ = NULL;}
2874271440Sjkim    | ',' ParityTypeKeyword         {$$ = $2;}
2875271440Sjkim    ;
2876271440Sjkim
2877271440SjkimOptionalQWordConstExpr
2878271440Sjkim    :                               {$$ = NULL;}
2879271440Sjkim    | ','                           {$$ = NULL;}
2880271440Sjkim    | ',' QWordConstExpr            {$$ = $2;}
2881271440Sjkim    ;
2882271440Sjkim
2883271440SjkimOptionalRangeType
2884271440Sjkim    : ','                           {$$ = NULL;}
2885271440Sjkim    | ',' RangeTypeKeyword          {$$ = $2;}
2886271440Sjkim    ;
2887271440Sjkim
2888271440SjkimOptionalReadWriteKeyword
2889271440Sjkim    :                                   {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
2890271440Sjkim    | PARSEOP_READWRITETYPE_BOTH        {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
2891271440Sjkim    | PARSEOP_READWRITETYPE_READONLY    {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_READONLY);}
2892271440Sjkim    ;
2893271440Sjkim
2894271440SjkimOptionalReference
2895271440Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
2896271440Sjkim    | ','                           {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
2897271440Sjkim    | ',' TermArg                   {$$ = $2;}
2898271440Sjkim    ;
2899271440Sjkim
2900271440SjkimOptionalResourceType_First
2901271440Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
2902271440Sjkim    | ResourceTypeKeyword           {$$ = $1;}
2903271440Sjkim    ;
2904271440Sjkim
2905271440SjkimOptionalResourceType
2906271440Sjkim    :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
2907271440Sjkim    | ','                           {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
2908271440Sjkim    | ',' ResourceTypeKeyword       {$$ = $2;}
2909271440Sjkim    ;
2910271440Sjkim
2911271440SjkimOptionalReturnArg
2912271440Sjkim    :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
2913271440Sjkim    | TermArg                       {$$ = $1;}
2914271440Sjkim    ;
2915271440Sjkim
2916271440SjkimOptionalSerializeRuleKeyword
2917271440Sjkim    :                               {$$ = NULL;}
2918271440Sjkim    | ','                           {$$ = NULL;}
2919271440Sjkim    | ',' SerializeRuleKeyword      {$$ = $2;}
2920271440Sjkim    ;
2921271440Sjkim
2922271440SjkimOptionalSlaveMode
2923271440Sjkim    : ','                           {$$ = NULL;}
2924271440Sjkim    | ',' SlaveModeKeyword          {$$ = $2;}
2925271440Sjkim    ;
2926271440Sjkim
2927271440SjkimOptionalShareType
2928271440Sjkim    :                               {$$ = NULL;}
2929271440Sjkim    | ','                           {$$ = NULL;}
2930271440Sjkim    | ',' ShareTypeKeyword          {$$ = $2;}
2931271440Sjkim    ;
2932271440Sjkim
2933271440SjkimOptionalShareType_First
2934271440Sjkim    :                               {$$ = NULL;}
2935271440Sjkim    | ShareTypeKeyword              {$$ = $1;}
2936271440Sjkim    ;
2937271440Sjkim
2938271440SjkimOptionalStopBits
2939271440Sjkim    : ','                           {$$ = NULL;}
2940271440Sjkim    | ',' StopBitsKeyword           {$$ = $2;}
2941271440Sjkim    ;
2942271440Sjkim
2943271440SjkimOptionalStringData
2944271440Sjkim    :                               {$$ = NULL;}
2945271440Sjkim    | ','                           {$$ = NULL;}
2946271440Sjkim    | ',' StringData                {$$ = $2;}
2947271440Sjkim    ;
2948271440Sjkim
2949271440SjkimOptionalTermArg
2950271440Sjkim    :                               {$$ = NULL;}
2951271440Sjkim    | TermArg                       {$$ = $1;}
2952271440Sjkim    ;
2953271440Sjkim
2954271440SjkimOptionalType
2955271440Sjkim    :                               {$$ = NULL;}
2956271440Sjkim    | ','                           {$$ = NULL;}
2957271440Sjkim    | ',' TypeKeyword               {$$ = $2;}
2958271440Sjkim    ;
2959271440Sjkim
2960271440SjkimOptionalType_Last
2961271440Sjkim    :                               {$$ = NULL;}
2962271440Sjkim    | ','                           {$$ = NULL;}
2963271440Sjkim    | ',' TypeKeyword               {$$ = $2;}
2964271440Sjkim    ;
2965271440Sjkim
2966271440SjkimOptionalTranslationType_Last
2967271440Sjkim    :                               {$$ = NULL;}
2968271440Sjkim    | ','                           {$$ = NULL;}
2969271440Sjkim    | ',' TranslationKeyword        {$$ = $2;}
2970271440Sjkim    ;
2971271440Sjkim
2972271440SjkimOptionalWireMode
2973271440Sjkim    : ','                           {$$ = NULL;}
2974271440Sjkim    | ',' WireModeKeyword           {$$ = $2;}
2975271440Sjkim    ;
2976271440Sjkim
2977271440SjkimOptionalWordConst
2978271440Sjkim    :                               {$$ = NULL;}
2979271440Sjkim    | WordConst                     {$$ = $1;}
2980271440Sjkim    ;
2981271440Sjkim
2982271440SjkimOptionalWordConstExpr
2983271440Sjkim    : ','                           {$$ = NULL;}
2984271440Sjkim    | ',' WordConstExpr             {$$ = $2;}
2985271440Sjkim    ;
2986271440Sjkim
2987271440SjkimOptionalXferSize
2988271440Sjkim    :                               {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
2989271440Sjkim    | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
2990271440Sjkim    | ',' XferSizeKeyword           {$$ = $2;}
2991271440Sjkim    ;
2992