#
# ident	"@(#)acpi_grammar	1.1	99/05/21 SMI"
#
# Copyright (c) 1998-1999 by Sun Microsystems, Inc.
# All rights reserved.
#

ACPI 1.0 b grammar
	****	non-terminals /* first is start symbol */
#	lists
N_START
N_METHOD_BODY

N_TERM_LIST
N_TERM

N_OBJECT_LIST
N_OBJECT

N_TERMARG

N_SUPER_NAME
N_TARGET

#	data items
N_DATA_LIST
N_PDATUM
N_DATUM

N_BYTE_LIST
N_SKIP

N_STRING
N_DWORD_CONST
N_WORD_CONST
N_BYTE_CONST

N_ZERO
N_ONE
N_ONES

N_REVISION

#	supernames
N_DEBUG

N_LOCAL0
N_LOCAL1
N_LOCAL2
N_LOCAL3
N_LOCAL4
N_LOCAL5
N_LOCAL6
N_LOCAL7

N_ARG0
N_ARG1
N_ARG2
N_ARG3
N_ARG4
N_ARG5
N_ARG6

#	named objects
N_CREATE_FIELD
N_DWORD_FIELD
N_WORD_FIELD
N_BYTE_FIELD
N_BIT_FIELD

N_BANK_FIELD
N_DEVICE
N_EVENT
N_FIELD
N_INDEX_FIELD
N_METHOD
N_MUTEX
N_POWER_RES
N_PROCESSOR
N_REGION
N_THERMAL_ZONE

N_FIELD_LIST
N_FIELD_OBJ
N_NAMED_FIELD
N_RES_FIELD
N_ACCESS_FIELD

#	name space operations
N_ALIAS
N_NAME
N_SCOPE

#	type 1 opcodes
N_BREAK
N_BREAKPOINT
N_FATAL
N_IF
N_ELSE_SKIP
N_ELSE_TAKE
N_SKIP_CLAUSE
N_TAKE_CLAUSE
N_NO_OP
N_RETURN
N_SLEEP
N_STALL
N_WHILE

N_LOAD
N_NOTIFY
N_RELEASE
N_RESET
N_SIGNAL
N_UNLOAD

#	type 2 opcodes
N_BUFFER
N_PACKAGE

N_ADD
N_SUBTRACT
N_INCREMENT
N_DECREMENT
N_DIVIDE
N_MULTIPLY

N_AND
N_NAND
N_OR
N_NOR
N_XOR
N_NOT
N_SHIFT_LEFT
N_SHIFT_RIGHT
N_LEFT_BIT
N_RIGHT_BIT

N_LAND
N_LNAND
N_LOR
N_LNOR
N_LNOT
N_LNZ
N_LEQ
N_LNE
N_LGT
N_LLE
N_LLT
N_LGE

N_COND_REF
N_DEREF
N_REF

N_INDEX
N_MATCH

N_FROM_BCD
N_TO_BCD

N_ACQUIRE
N_CONCAT
N_SIZEOF
N_STORE
N_TYPE
N_WAIT

#	method calls
N_METHOD_CALL0
N_METHOD_CALL1
N_METHOD_CALL2
N_METHOD_CALL3
N_METHOD_CALL4
N_METHOD_CALL5
N_METHOD_CALL6
N_METHOD_CALL7

	****	terminals /* first is EOF symbol */
T_EMPTY

T_PKG_LENGTH
T_PKG_NARROW
T_EOF

T_METHOD_FLAGS
T_SYSTEM_LEVEL
T_PBLOCK_LENGTH
T_FIELD_FLAGS
T_SYNC_LEVEL
T_REGION_SPACE
T_MATCH_REL

T_BYTE_DATA
T_WORD_DATA
T_DWORD_DATA

T_NAME_SEG
T_NAME_STRING

T_STRING
T_SKIP
T_BYTE_LIST

#	primary opcodes
T_ZERO_OP
T_ONE_OP
T_ALIAS_OP
T_NAME_OP
T_BYTE_OP
T_WORD_OP
T_DWORD_OP
T_STRING_OP
T_SCOPE_OP
T_BUFFER_OP
T_PACKAGE_OP
T_METHOD_OP
T_LOCAL0_OP
T_LOCAL1_OP
T_LOCAL2_OP
T_LOCAL3_OP
T_LOCAL4_OP
T_LOCAL5_OP
T_LOCAL6_OP
T_LOCAL7_OP
T_ARG0_OP
T_ARG1_OP
T_ARG2_OP
T_ARG3_OP
T_ARG4_OP
T_ARG5_OP
T_ARG6_OP
T_STORE_OP
T_REF_OP
T_ADD_OP
T_CONCAT_OP
T_SUBTRACT_OP
T_INCREMENT_OP
T_DECREMENT_OP
T_MULTIPLY_OP
T_DIVIDE_OP
T_SHIFT_LEFT_OP
T_SHIFT_RIGHT_OP
T_AND_OP
T_NAND_OP
T_OR_OP
T_NOR_OP
T_XOR_OP
T_NOT_OP
T_LEFT_BIT_OP
T_RIGHT_BIT_OP
T_DEREF_OP
T_NOTIFY_OP
T_SIZEOF_OP
T_INDEX_OP
T_MATCH_OP
T_DWORD_FIELD_OP
T_WORD_FIELD_OP
T_BYTE_FIELD_OP
T_BIT_FIELD_OP
T_TYPE_OP
T_LAND_OP
T_LOR_OP
T_LNOT_OP
T_LEQ_OP
T_LGT_OP
T_LLT_OP
T_IF_OP
T_ELSE_OP
T_WHILE_OP
T_NO_OP
T_RETURN_OP
T_BREAK_OP
T_BREAKPOINT_OP
T_ONES_OP

#	extended opcodes
T_MUTEX_OP
T_EVENT_OP
T_COND_REF_OP
T_CREATE_FIELD_OP
T_LOAD_OP
T_STALL_OP
T_SLEEP_OP
T_ACQUIRE_OP
T_SIGNAL_OP
T_WAIT_OP
T_RESET_OP
T_RELEASE_OP
T_FROM_BCD_OP
T_TO_BCD_OP
T_UNLOAD_OP
T_REVISION_OP
T_DEBUG_OP
T_FATAL_OP
T_REGION_OP
T_FIELD_OP
T_DEVICE_OP
T_PROCESSOR_OP
T_POWER_RES_OP
T_THERMAL_ZONE_OP
T_INDEX_FIELD_OP
T_BANK_FIELD_OP

#	LNOT opcodes
T_LNAND_OP
T_LNOR_OP
T_LNZ_OP
T_LNE_OP
T_LLE_OP
T_LGE_OP

#	action tokens
T_DEVICE_SCOPE
T_POWER_SCOPE
T_PROC_SCOPE
T_THERMAL_SCOPE
T_SCOPE_SCOPE

T_IF_COND
T_WHILE_COND

#	values
V_NAME_STRING
V_ACPI_VALUE
V_DEBUG_OBJ
V_REF

V_LOCAL0
V_LOCAL1
V_LOCAL2
V_LOCAL3
V_LOCAL4
V_LOCAL5
V_LOCAL6
V_LOCAL7

V_ARG0
V_ARG1
V_ARG2
V_ARG3
V_ARG4
V_ARG5
V_ARG6

	****	list rules /* action, element */
N_TERM_LIST := list_free, N_TERM
N_OBJECT_LIST := list_free, N_OBJECT
N_DATA_LIST := 0, N_PDATUM
N_FIELD_LIST := field_list_reduce, N_FIELD_OBJ

	****	alternative rules /* action, {lookahead, element}... */
N_TERM := rhs1_reduce, {ALT_TABLE, CTX_TERM}
N_OBJECT := rhs1_reduce, {ALT_TABLE, CTX_OBJ}
N_TERMARG := rhs1_reduce, {ALT_TABLE, CTX_TERMARG}
N_SUPER_NAME := rhs1_reduce, {ALT_TABLE, CTX_SUPER}
N_TARGET := rhs1_reduce, {T_ZERO_OP, T_NAME_STRING}, {ALT_TABLE, CTX_SUPER}
N_PDATUM := rhs1_reduce, {ALT_TABLE, CTX_PDATA}
N_DATUM := rhs1_reduce, {ALT_TABLE, CTX_DATA}
N_FIELD_OBJ := rhs1_reduce, {T_ZERO_OP, N_RES_FIELD}, {T_ONE_OP, N_ACCESS_FIELD}, {ALT_DEFAULT, N_NAMED_FIELD}
N_ELSE_SKIP := 0, {T_ELSE_OP, N_SKIP_CLAUSE}, {ALT_DEFAULT, T_EMPTY}
N_ELSE_TAKE := 0, {T_ELSE_OP, N_TAKE_CLAUSE}, {ALT_DEFAULT, T_EMPTY}

	****	production rules /* action, element... */
N_START := 0, N_TERM_LIST
N_METHOD_BODY := method_body_reduce, N_TERM_LIST

#	data items
N_BYTE_LIST := rhs1_reduce, T_BYTE_LIST, T_EOF
N_SKIP := 0, T_SKIP, T_EOF

N_STRING := rhs2_reduce, T_STRING_OP, T_STRING
N_DWORD_CONST := rhs2_reduce, T_DWORD_OP, T_DWORD_DATA
N_WORD_CONST := rhs2_reduce, T_WORD_OP, T_WORD_DATA
N_BYTE_CONST := rhs2_reduce, T_BYTE_OP, T_BYTE_DATA
N_ZERO := zero_reduce, T_ZERO_OP
N_ONE := one_reduce, T_ONE_OP
N_ONES := ones_reduce, T_ONES_OP

N_REVISION := revision_reduce, T_REVISION_OP

#	supernames
N_DEBUG := debug_reduce, T_DEBUG_OP

N_LOCAL0 := local0_reduce, T_LOCAL0_OP
N_LOCAL1 := local1_reduce, T_LOCAL1_OP
N_LOCAL2 := local2_reduce, T_LOCAL2_OP
N_LOCAL3 := local3_reduce, T_LOCAL3_OP
N_LOCAL4 := local4_reduce, T_LOCAL4_OP
N_LOCAL5 := local5_reduce, T_LOCAL5_OP
N_LOCAL6 := local6_reduce, T_LOCAL6_OP
N_LOCAL7 := local7_reduce, T_LOCAL7_OP

N_ARG0 := arg0_reduce, T_ARG0_OP
N_ARG1 := arg1_reduce, T_ARG1_OP
N_ARG2 := arg2_reduce, T_ARG2_OP
N_ARG3 := arg3_reduce, T_ARG3_OP
N_ARG4 := arg4_reduce, T_ARG4_OP
N_ARG5 := arg5_reduce, T_ARG5_OP
N_ARG6 := arg6_reduce, T_ARG6_OP

#	named objects
N_CREATE_FIELD := create_field_reduce, T_CREATE_FIELD_OP, N_TERMARG, N_TERMARG, N_TERMARG, T_NAME_STRING
N_DWORD_FIELD := dword_field_reduce, T_DWORD_FIELD_OP, N_TERMARG, N_TERMARG, T_NAME_STRING
N_WORD_FIELD := word_field_reduce, T_WORD_FIELD_OP, N_TERMARG, N_TERMARG, T_NAME_STRING
N_BYTE_FIELD := byte_field_reduce, T_BYTE_FIELD_OP, N_TERMARG, N_TERMARG, T_NAME_STRING
N_BIT_FIELD := bit_field_reduce, T_BIT_FIELD_OP, N_TERMARG, N_TERMARG, T_NAME_STRING

N_BANK_FIELD := bank_field_reduce, T_BANK_FIELD_OP, T_PKG_NARROW, T_NAME_STRING, T_NAME_STRING, N_TERMARG, T_FIELD_FLAGS, N_FIELD_LIST
N_DEVICE := device_reduce, T_DEVICE_OP, T_PKG_NARROW, T_NAME_STRING, T_DEVICE_SCOPE, N_OBJECT_LIST
N_EVENT := event_reduce, T_EVENT_OP, T_NAME_STRING
N_FIELD := field_reduce, T_FIELD_OP, T_PKG_NARROW, T_NAME_STRING, T_FIELD_FLAGS, N_FIELD_LIST
N_INDEX_FIELD := index_field_reduce, T_INDEX_FIELD_OP, T_PKG_NARROW, T_NAME_STRING, T_NAME_STRING, T_FIELD_FLAGS, N_FIELD_LIST
N_METHOD := method_reduce, T_METHOD_OP, T_PKG_NARROW, T_NAME_STRING, T_METHOD_FLAGS, N_BYTE_LIST
N_MUTEX := mutex_reduce, T_MUTEX_OP, T_NAME_STRING, T_SYNC_LEVEL
N_POWER_RES := power_reduce, T_POWER_RES_OP, T_PKG_NARROW, T_NAME_STRING, T_SYSTEM_LEVEL, T_WORD_DATA, T_POWER_SCOPE, N_OBJECT_LIST
N_PROCESSOR := proc_reduce, T_PROCESSOR_OP, T_PKG_NARROW, T_NAME_STRING, T_BYTE_DATA, T_DWORD_DATA, T_PBLOCK_LENGTH, T_PROC_SCOPE, N_OBJECT_LIST
N_REGION := region_reduce, T_REGION_OP,  T_NAME_STRING, T_REGION_SPACE, N_TERMARG, N_TERMARG
N_THERMAL_ZONE := thermal_reduce, T_THERMAL_ZONE_OP, T_PKG_NARROW, T_NAME_STRING, T_THERMAL_SCOPE, N_OBJECT_LIST

N_NAMED_FIELD := named_field_reduce, T_EMPTY, T_NAME_SEG, T_PKG_LENGTH
N_RES_FIELD := res_field_reduce, T_ZERO_OP, T_PKG_LENGTH
N_ACCESS_FIELD := access_field_reduce, T_ONE_OP, T_BYTE_DATA, T_BYTE_DATA

#	name space modifiers
N_ALIAS := alias_reduce, T_ALIAS_OP, T_NAME_STRING, T_NAME_STRING
N_NAME := name_reduce, T_NAME_OP, T_NAME_STRING, N_DATUM
N_SCOPE := scope_reduce, T_SCOPE_OP, T_PKG_NARROW, T_NAME_STRING, T_SCOPE_SCOPE, N_TERM_LIST

#	type 1 opcodes
N_BREAK := break_reduce, T_BREAK_OP
N_BREAKPOINT := breakpoint_reduce, T_BREAKPOINT_OP
N_FATAL := fatal_reduce, T_FATAL_OP, T_BYTE_DATA, T_DWORD_DATA, N_TERMARG
N_IF := 0, T_IF_OP, T_PKG_NARROW, N_TERMARG, T_IF_COND, N_TERM_LIST, N_ELSE_SKIP
N_SKIP_CLAUSE := 0, T_ELSE_OP, T_PKG_NARROW, N_SKIP
N_TAKE_CLAUSE := 0, T_ELSE_OP, T_PKG_NARROW, N_TERM_LIST
N_NO_OP := 0, T_NO_OP
N_RETURN := return_reduce, T_RETURN_OP, N_TERMARG
N_SLEEP := sleep_reduce, T_SLEEP_OP, N_TERMARG
N_STALL := stall_reduce, T_STALL_OP, N_TERMARG
N_WHILE := while_reduce, T_WHILE_OP, T_PKG_NARROW, N_TERMARG, T_WHILE_COND, N_TERM_LIST

N_LOAD := load_reduce, T_LOAD_OP, T_NAME_STRING, N_SUPER_NAME
N_NOTIFY := notify_reduce, T_NOTIFY_OP, N_SUPER_NAME, N_TERMARG
N_RELEASE := release_reduce, T_RELEASE_OP, N_SUPER_NAME
N_RESET := reset_reduce, T_RESET_OP, N_SUPER_NAME
N_SIGNAL := signal_reduce, T_SIGNAL_OP, N_SUPER_NAME
N_UNLOAD := unload_reduce, T_UNLOAD_OP, N_SUPER_NAME

#	type 2 opcodes
N_PACKAGE := package_reduce, T_PACKAGE_OP, T_PKG_NARROW, T_BYTE_DATA, N_DATA_LIST
N_BUFFER := buffer_reduce, T_BUFFER_OP, T_PKG_NARROW, N_TERMARG, N_BYTE_LIST

N_ADD := add_reduce, T_ADD_OP, N_TERMARG, N_TERMARG, N_TARGET
N_SUBTRACT := subtract_reduce, T_SUBTRACT_OP, N_TERMARG, N_TERMARG, N_TARGET
N_INCREMENT := increment_reduce, T_INCREMENT_OP, N_SUPER_NAME
N_DECREMENT := decrement_reduce, T_DECREMENT_OP, N_SUPER_NAME
N_DIVIDE := divide_reduce, T_DIVIDE_OP, N_TERMARG, N_TERMARG, N_TARGET, N_TARGET
N_MULTIPLY := multiply_reduce, T_MULTIPLY_OP, N_TERMARG, N_TERMARG, N_TARGET

N_AND := and_reduce, T_AND_OP, N_TERMARG, N_TERMARG, N_TARGET
N_NAND := nand_reduce, T_NAND_OP, N_TERMARG, N_TERMARG, N_TARGET
N_OR := or_reduce, T_OR_OP, N_TERMARG, N_TERMARG, N_TARGET
N_NOR := nor_reduce, T_NOR_OP, N_TERMARG, N_TERMARG, N_TARGET
N_XOR := xor_reduce, T_XOR_OP, N_TERMARG, N_TERMARG, N_TARGET
N_NOT := not_reduce, T_NOT_OP, N_TERMARG, N_TARGET
N_SHIFT_LEFT := shift_left_reduce, T_SHIFT_LEFT_OP, N_TERMARG, N_TERMARG, N_TARGET
N_SHIFT_RIGHT := shift_right_reduce, T_SHIFT_RIGHT_OP, N_TERMARG, N_TERMARG, N_TARGET
N_LEFT_BIT := left_bit_reduce, T_LEFT_BIT_OP, N_TERMARG, N_TARGET
N_RIGHT_BIT := right_bit_reduce, T_RIGHT_BIT_OP, N_TERMARG, N_TARGET

N_LAND := land_reduce, T_LAND_OP, N_TERMARG, N_TERMARG
N_LNAND := lnand_reduce, T_LNAND_OP, N_TERMARG, N_TERMARG
N_LOR := lor_reduce, T_LOR_OP, N_TERMARG, N_TERMARG
N_LNOR := lnor_reduce, T_LNOR_OP, N_TERMARG, N_TERMARG
N_LNOT := lnot_reduce, T_LNOT_OP, N_TERMARG
N_LNZ := lnz_reduce, T_LNZ_OP, N_TERMARG
N_LEQ := leq_reduce, T_LEQ_OP, N_TERMARG, N_TERMARG
N_LNE := lne_reduce, T_LNE_OP, N_TERMARG, N_TERMARG
N_LGT := lgt_reduce, T_LGT_OP, N_TERMARG, N_TERMARG
N_LLE := lle_reduce, T_LLE_OP, N_TERMARG, N_TERMARG
N_LLT := llt_reduce, T_LLT_OP, N_TERMARG, N_TERMARG
N_LGE := lge_reduce, T_LGE_OP, N_TERMARG, N_TERMARG

N_COND_REF := cond_ref_reduce, T_COND_REF_OP, N_SUPER_NAME, N_SUPER_NAME
N_DEREF := deref_reduce, T_DEREF_OP, N_TERMARG
N_REF := ref_reduce, T_REF_OP, N_TERMARG

N_INDEX := index_reduce, T_INDEX_OP, N_TERMARG, N_TERMARG, N_TARGET
N_MATCH := match_reduce, T_MATCH_OP, N_TERMARG, T_MATCH_REL, N_TERMARG, T_MATCH_REL, N_TERMARG, N_TERMARG

N_FROM_BCD := from_bcd_reduce, T_FROM_BCD_OP, N_TERMARG, N_TARGET
N_TO_BCD := to_bcd_reduce, T_TO_BCD_OP, N_TERMARG, N_TARGET

N_ACQUIRE := acquire_reduce, T_ACQUIRE_OP, N_SUPER_NAME, T_WORD_DATA
N_CONCAT := concat_reduce, T_CONCAT_OP, N_TERMARG, N_TERMARG, N_TARGET
N_SIZEOF := sizeof_reduce, T_SIZEOF_OP, N_SUPER_NAME
N_STORE := store_reduce, T_STORE_OP, N_TERMARG, N_SUPER_NAME
N_TYPE := type_reduce, T_TYPE_OP, N_SUPER_NAME

# XXX timeout should be T_WORD_DATA, but the compiler actually does N_TERMARG
N_WAIT := wait_reduce, T_WAIT_OP, N_SUPER_NAME, N_TERMARG

#	method calls
N_METHOD_CALL0 := method_call0_reduce, T_NAME_STRING
N_METHOD_CALL1 := method_call1_reduce, T_NAME_STRING, N_TERMARG
N_METHOD_CALL2 := method_call2_reduce, T_NAME_STRING, N_TERMARG, N_TERMARG
N_METHOD_CALL3 := method_call3_reduce, T_NAME_STRING, N_TERMARG, N_TERMARG, N_TERMARG
N_METHOD_CALL4 := method_call4_reduce, T_NAME_STRING, N_TERMARG, N_TERMARG, N_TERMARG, N_TERMARG
N_METHOD_CALL5 := method_call5_reduce, T_NAME_STRING, N_TERMARG, N_TERMARG, N_TERMARG, N_TERMARG, N_TERMARG
N_METHOD_CALL6 := method_call6_reduce, T_NAME_STRING, N_TERMARG, N_TERMARG, N_TERMARG, N_TERMARG, N_TERMARG, N_TERMARG
N_METHOD_CALL7 := method_call7_reduce, T_NAME_STRING, N_TERMARG, N_TERMARG, N_TERMARG, N_TERMARG, N_TERMARG, N_TERMARG, N_TERMARG

	****	lex rules /* reduce_action, lex_action */
T_EMPTY := 0, empty_lex

T_PKG_LENGTH := 0, pkg_length_lex
T_PKG_NARROW := 0, pkg_narrow_lex
T_EOF := 0, eof_lex

T_METHOD_FLAGS := 0, method_flags_lex
T_SYSTEM_LEVEL := 0, system_level_lex
T_PBLOCK_LENGTH := 0, pblock_length_lex
T_FIELD_FLAGS := 0, field_flags_lex
T_SYNC_LEVEL := 0, sync_level_lex
T_REGION_SPACE := 0, region_space_lex
T_MATCH_REL := 0, match_rel_lex

T_BYTE_DATA := 0, byte_data_lex
T_WORD_DATA := 0, word_data_lex
T_DWORD_DATA := 0, dword_data_lex

T_NAME_SEG := 0, nameseg_lex
T_NAME_STRING := name_string_reduce, name_string_lex

T_STRING := 0, string_lex
T_BYTE_LIST := 0, byte_list_lex
T_SKIP := 0, skip_lex

T_DEVICE_SCOPE := device_scope, 0
T_POWER_SCOPE := power_scope, 0
T_PROC_SCOPE := proc_scope, 0
T_THERMAL_SCOPE := thermal_scope, 0
T_SCOPE_SCOPE := scope_scope, 0

T_IF_COND := if_cond, 0
T_WHILE_COND := while_cond, 0
	****	end

# eof
