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