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