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