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