djfz-2020-s444507/TaskE04/run.py
2020-12-20 18:52:29 +01:00

66 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import sys
import os
# filename = sys.argv[1]
# path = os.path.join(os.getcwd(), filename)
# path = os.path.join(os.getcwd(), 'test1.arg')
# file = open(path, 'r').readlines()
class FSA():
def __init__(self):
self.initial_state = '0'
self.current_letter = None
self.current_state = self.initial_state
self.acceptance_state = '7'
self.alphabet = set()
self.transition_function = [{'in': '0', 'letter': 'M', 'out': '1'},
{'in': '1', 'letter': 'a', 'out': '2'},
{'in': '2', 'letter': 'c', 'out': '3'},
{'in': '3', 'letter': 'b', 'out': '4'},
{'in': '4', 'letter': 'e', 'out': '5'},
{'in': '5', 'letter': 't', 'out': '6'},
{'in': '6', 'letter': 'h', 'out': '7'},
{'in': ['0', '1', '2', '3', '4', '5', '6'], 'letter': 'x', 'out': '0'}]
def add_letter_to_alphabet(self, letter):
self.alphabet.add(letter)
def add_transition_to_transition_function(self, input_state, output_state, letter):
obj = {'in': input_state, 'letter': letter, 'out': output_state}
self.transition_function.append(obj)
# add letter to alphabet
def specify_end_state(self, end_state):
self.end_state = end_state
def check_text(self, text):
for letter in text:
found_function = None
for func in self.transition_function:
if func['in'] == self.current_state and func['letter'] == letter:
found_function = func
if not found_function:
self.current_state = '0'
else:
self.current_state = found_function['out']
if self.current_state == self.acceptance_state:
return 'YES'
return 'NO'
FSA = FSA()
lines = ['My names Macbeth.']
for line in sys.stdin:
line = line.rstrip('\n')
FSA.current_state = FSA.initial_state
print(FSA.check_text(line))