Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from enum import Enum
- class NumberBase(Enum):
- DECIMAL = 'DECIMAL'
- HEX = 'HEX'
- OCTAL = 'OCTAL'
- BINARY = 'BINARY'
- def parse_number_base(str):
- conditions = [
- {'curr_state': 'START', 'input': ['0'], 'next_state': 'ZERO', 'accept': 0},
- {'curr_state': 'START', 'input': [chr(i) for i in range(49,56)],'next_state': 'DEC_OCT_HEX', 'accept': 0},
- {'curr_state': 'START', 'input': ['8','9'], 'next_state': 'DEC_HEX', 'accept': 0},
- {'curr_state': 'ZERO', 'input': ['b','B'], 'next_state': 'BIN_START', 'accept': 1},
- {'curr_state': 'ZERO', 'input': [chr(i) for i in range(48,56)], 'next_state': 'OCT', 'accept': 1},
- {'curr_state': 'ZERO', 'input': ['x','X'], 'next_state': 'HEX_START', 'accept': 1},
- {'curr_state': 'BIN_START','input': ['0','1'], 'next_state': 'BIN', 'accept': 0},
- {'curr_state': 'HEX_START', 'input': [chr(i) for i in range(48,58)] + [chr(j) for j in range(97,103)] + [chr(k) for k in range(65,71)], 'next_state': 'HEX', 'accept': 0},
- {'curr_state': 'BIN', 'input': ['0','1'], 'next_state': 'BIN', 'accept': 1},
- {'curr_state': 'OCT', 'input': [chr(i) for i in range(48,56)], 'next_state': 'OCT', 'accept': 1},
- {'curr_state': 'DEC_OCT_HEX', 'input': [chr(i) for i in range(48,56)], 'next_state': 'DEC_OCT_HEX', 'accept': 1},
- {'curr_state': 'DEC_OCT_HEX', 'input': ['8','9'], 'next_state': 'DEC_HEX', 'accept': 1},
- {'curr_state': 'DEC_OCT_HEX', 'input': [chr(j) for j in range(97,103)] + [chr(k) for k in range(65,71)], 'next_state': 'HEX', 'accept': 1},
- {'curr_state': 'DEC_HEX', 'input': [chr(i) for i in range(48,58)], 'next_state': 'DEC_HEX', 'accept': 1},
- {'curr_state': 'DEC_HEX', 'input': [chr(j) for j in range(97,103)] + [chr(k) for k in range(65,71)], 'next_state': 'HEX', 'accept': 1},
- {'curr_state': 'HEX', 'input': [chr(i) for i in range(48,58)] + [chr(j) for j in range(97,103)] + [chr(k) for k in range(65,71)], 'next_state': 'HEX', 'accept': 1}]
- res = [
- {'final_state': 'ZERO', 'result': NumberBase.DECIMAL},
- {'final_state': 'DEC_OCT_HEX', 'result': NumberBase.DECIMAL},
- {'final_state': 'DEC_HEX', 'result': NumberBase.DECIMAL},
- {'final_state': 'BIN', 'result': NumberBase.BINARY},
- {'final_state': 'OCT', 'result': NumberBase.OCTAL},
- {'final_state': 'HEX', 'result': NumberBase.HEX}]
- current_state = 'START'
- current_char = str[0]
- while(1):
- print("str:",str)
- print("char:",current_char)
- if len(str) == 0:
- for condition in conditions:
- if condition.get('current_state') == current_state and condition.get('accept') == 1:
- for item in res:
- if item.get('final_state') == current_state:
- return item.get('result')
- else:
- return None
- else:
- current_char = str[0]
- print("current_char",current_char)
- for condition in conditions:
- if (condition.get('curr_state') == current_state) and (current_char in condition.get('input')):
- current_state = condition.get('next_state')
- str = str[1:]
- print(parse_number_base("12345"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement