def parse(self, input_tape: str) -> List[object]: self.stack.clear() current_state = self.start_state input_tape_index = 0 for input_char in input_tape: try: configuration = Configuration(current_state, input_char) transition = self._find_transition(configuration) current_state = self._apply_transition(transition, configuration) input_tape_index += 1 except ParsingError as error: print('State:', current_state.name) print('Index:', input_tape_index) print('Original Input:', input_tape) raise error if current_state not in self.accept_states: print('State:', current_state.name) raise ParsingError( f'Parser was not in a final state after the input tape was read.' ) return self.stack.data_stack[:]
def perform_stack_action(self, stack: AutomatonStack, configuration: Configuration): current_content = stack.get_current_content() if not current_content: raise ParsingError('A variable name was expected!') stack.add_data(Argument(current_content)) stack.remove_level()
def perform_stack_action(self, stack: AutomatonStack, configuration: Configuration): current_content = stack.get_current_content() if not current_content: raise ParsingError('Empty function name is not allowed!') stack.add_data(FunctionDeclaration(current_content)) stack.remove_level() stack.add_level()
def get_output_configuration( self, input_configuration: Configuration) -> Configuration: if not input_configuration.character.isalpha( ) and input_configuration.character != '_': raise ParsingError( f'Non-alpha character "{input_configuration.character}" detected.' ) return Configuration(ArgumentState(), input_configuration.character)
def perform_stack_action(self, stack: AutomatonStack, input_configuration: Configuration): raise ParsingError( 'Expected a string on the right side of the constraint!')
def get_output_configuration( self, input_configuration: Configuration) -> Configuration: raise ParsingError( 'Expected a string on the right side of the constraint!')
def perform_stack_action(self, stack: AutomatonStack, input_configuration: Configuration): raise ParsingError( 'Expected an operator for the constraint (e.g. "=")!')
def get_output_configuration( self, input_configuration: Configuration) -> Configuration: raise ParsingError( 'Received a character after the function declaration ended.')
def get_current_content(self) -> str: if not self.levels: raise ParsingError('No more levels left on the stack') return ''.join(self.levels[-1])
def perform_stack_action(self, stack: AutomatonStack, input_configuration: Configuration): raise ParsingError( 'Received a character after the code environment was closed.')
def perform_stack_action(self, stack: AutomatonStack, input_configuration: Configuration): raise ParsingError('Expected the end of the constraint or a conjunctive "&"!')
def get_output_configuration(self, input_configuration: Configuration) -> Configuration: raise ParsingError('Expected the end of the constraint or a conjunctive "&"!')
def perform_stack_action(self, stack: AutomatonStack, input_configuration: Configuration): raise ParsingError('An NLG message must start with a quotation mark!')
def get_output_configuration( self, input_configuration: Configuration) -> Configuration: raise ParsingError('An NLG message must start with a quotation mark!')
def perform_stack_action(self, stack: AutomatonStack, input_configuration: Configuration): raise ParsingError( 'Received a character after the function declaration ended.')
def get_output_configuration( self, input_configuration: Configuration) -> Configuration: raise ParsingError( 'The python code environment requires two closing braces!')
def get_output_configuration( self, input_configuration: Configuration) -> Configuration: ParsingError( f'Unexpected character "{input_configuration.character}" after ' f'the expression ended.')
def perform_stack_action(self, stack: AutomatonStack, configuration: Configuration): raise ParsingError( 'The python code environment requires two closing braces!')
def _find_default_transition(self, current_state: State): if current_state not in self.state_default_transition_mapping: raise ParsingError( f'No default transition found for state {current_state.name}.') return self.state_default_transition_mapping.get(current_state, None)
def get_output_configuration( self, input_configuration: Configuration) -> Configuration: raise ParsingError( 'Received a character after the code environment was closed.')
def get_output_configuration( self, input_configuration: Configuration) -> Configuration: if input_configuration.character != '$': raise ParsingError( 'Received a character after the NLG message ended.')
def add_char(self, stack_char: str): if not self.levels: raise ParsingError('No more levels left on the stack') self.levels[-1].append(stack_char)
def get_output_configuration( self, input_configuration: Configuration) -> Configuration: raise ParsingError( 'Expected an operator for the constraint (e.g. "=")!')
def remove_level(self): if not self.levels: raise ParsingError('No more levels to remove from the stack') self.levels.pop()
def perform_stack_action(self, stack: AutomatonStack, input_configuration: Configuration): if input_configuration.character != '$': raise ParsingError( 'Received a character after the NLG message ended.')