class NPDA(PDA)¶
Classes and methods for working with nondeterministic pushdown automata.
NPDA
¶
Bases: PDA
The NPDA
class is a subclass of PDA
and represents a nondeterministic
pushdown automaton.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
states |
AbstractSet[NPDAStateT]
|
A set of the NPDA's valid states |
required |
input_symbols |
AbstractSet[str]
|
Set of the NPDA's valid input symbols, each of which is a singleton string. |
required |
stack_symbols |
AbstractSet[str]
|
Set of the NPDA's valid stack symbols, each of which is a singleton string. |
required |
transitions |
NPDATransitionsT
|
A dict consisting of the transitions for each state; see the example below for the exact syntax |
required |
initial_state |
NPDAStateT
|
The name of the initial state for this NPDA. |
required |
initial_stack_symbol |
str
|
The name of the initial symbol on the stack for this NPDA. |
required |
final_states |
AbstractSet[NPDAStateT]
|
A set of final states for this NPDA. |
required |
acceptance_mode |
PDAAcceptanceModeT
|
A string defining whether this NPDA accepts by
|
'both'
|
Example
from automata.pda.npda import NPDA
# NPDA which matches palindromes consisting of 'a's and 'b's
# (accepting by final state)
# q0 reads the first half of the word, q1 the other half, q2 accepts.
# But we have to guess when to switch.
npda = NPDA(
states={'q0', 'q1', 'q2'},
input_symbols={'a', 'b'},
stack_symbols={'A', 'B', '#'},
transitions={
'q0': {
'': {
'#': {('q2', '#')}, # no change to stack
},
'a': {
'#': {('q0', ('A', '#'))}, # push 'A' to stack
'A': {
('q0', ('A', 'A')), # push 'A' to stack
('q1', ''), # pop from stack
},
'B': {('q0', ('A', 'B'))}, # push 'A' to stack
},
'b': {
'#': {('q0', ('B', '#'))}, # push 'B' to stack
'A': {('q0', ('B', 'A'))}, # push 'B' to stack
'B': {
('q0', ('B', 'B')), # push 'B' to stack
('q1', ''), # pop from stack
},
},
},
'q1': {
'': {'#': {('q2', '#')}}, # push '#' to (currently empty) stack
'a': {'A': {('q1', '')}}, # pop from stack
'b': {'B': {('q1', '')}}, # pop from stack
},
},
initial_state='q0',
initial_stack_symbol='#',
final_states={'q2'},
acceptance_mode='final_state'
)
read_input_stepwise(input_str)
¶
Return a generator that yields the configuration of this NPDA at each step while reading input.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
input_str |
str
|
The input string to read. |
required |
Yields:
Type | Description |
---|---|
Generator[Set[PDAConfiguration], None, None]
|
A generator that yields the current configuration of the NPDA after each step of reading input. |
Raises:
Type | Description |
---|---|
RejectionException
|
Raised if this NPDA does not accept the input string. |