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