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):
- curr_state = 'START'
- init_DEC_OCT_HEX = [chr(i) for i in range(49,56)]
- l_alph = [chr(i) for i in range(97,103)]
- u_alph = [chr(i) for i in range(65,71)]
- OCT = [chr(i) for i in range(48,56)]
- DEC_HEX = [chr(i) for i in range(48,58)]
- for char in str:
- if curr_state == 'START':
- if len(str) == 0:
- return None
- elif char == '0':
- curr_state = 'ZERO'
- elif char in init_DEC_OCT_HEX:
- curr_state = 'DEC_OCT_HEX'
- elif char == '8' or char == '9':
- curr_state = 'DEC_HEX'
- elif char in l_alph or char in u_alph:
- curr_state = 'HEX'
- else:
- return None
- elif curr_state == 'ZERO':
- if char == 'b' or char == 'B':
- curr_state = 'BIN_START'
- elif char in OCT:
- curr_state = 'OCT'
- elif char == 'x' or char == 'X':
- curr_state = 'HEX_START'
- else:
- return None
- elif curr_state == 'DEC_OCT_HEX':
- if char in OCT:
- curr_state = 'DEC_OCT_HEX'
- elif char in l_alph or char in u_alph:
- curr_state = 'HEX'
- elif char == '8' or char == '9':
- curr_state = 'DEC_HEX'
- elif curr_state == 'BIN_START':
- if char == '0' or char == '1':
- curr_state = 'BIN'
- else:
- return None
- elif curr_state == 'HEX_START':
- if char in DEC_HEX or char in l_alph or char in u_alph:
- curr_state = 'HEX'
- else:
- return None
- elif curr_state == 'DEC_HEX':
- if char in DEC_HEX:
- curr_state = 'DEC_HEX'
- elif char in l_alph or char in u_alph:
- curr_state = 'HEX'
- else:
- return None
- elif curr_state == 'HEX':
- if char in DEC_HEX or char in l_alph or char in u_alph:
- curr_state = 'HEX'
- else:
- return None
- elif curr_state == 'BIN':
- if char == '0' or char == '1':
- curr_state = 'BIN'
- else:
- return None
- elif curr_state == 'OCT':
- if char in OCT:
- curr_state = 'OCT'
- else:
- return None
- if curr_state == 'ZERO' or curr_state == 'DEC_OCT_HEX' or curr_state == 'DEC_HEX':
- return NumberBase.DECIMAL
- elif curr_state == 'BIN':
- return NumberBase.BINARY
- elif curr_state == 'OCT':
- return NumberBase.OCTAL
- elif curr_state == 'HEX':
- return NumberBase.HEX
- else:
- return None
Advertisement
Add Comment
Please, Sign In to add comment