All pastes #35532 Raw Edit

Anonymous

public python v1 · immutable
#35532 ·published 2006-01-02 15:44 UTC
rendered paste body
import abstract_typestokens_enum = ['global_res_word','context_res_word', 'res_symbol',	'identifier', 'string_type', 'int_type', 'float_type']tokens = abstract_types.enum(tokens_enum)	glob_res = ['VAR', 'IF', 'WHILE', 'FOR', 'PRINT']cont_res = ['break', 'next', 'loop', 'else']	symb_res = ['+', '-', '*', '/', '(', ')', '^', '%', 'EOF']	token_type = abstract_types.record()token_type.infile = file('d:/source.bpl', 'r')token_type.cur_str = ""token_type.cur_str_len = 0token_type.cur_line = 0token_type.cur_pos = 0token_type.type_of_token = tokenstoken_type.read_str = ""token_type.cap_str = ""token_type.int_val = 0token_type.float_val = 0.0token_type.glob_res_word = glob_restoken_type.cont_res_word = cont_restoken_type.res_sym = symb_resdef is_delim(char):	if ' ,;'.find(char) <> -1:		return 1	return 0def is_ident(char):	if 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.find(char) <> -1:		return 1	return 0def is_num(char):	if '0123456789'.find(char) <> -1:		return 1	return 0def is_res_symbol(char):	if char in ['+', '-', '*', '/', '(', ')', '^', '%', 'EOF']:		return 1	return 0def numeric(num):	if num.find(".") <> -1 or num.find("E") <> -1:		return 1	return 0def advance_token(token):	glob_res = ['VAR', 'IF', 'WHILE', 'FOR', 'PRINT']	cont_res = ['BREAK', 'NEXT', 'LOOP', 'ELSE']	symb_res = ['+', '-', '*', '/', '(', ')', '^', '%', 'EOF']		token.cur_str = ""	token.read_str = ""	token.cap_str = ""	while (token.cur_str[token.cur_pos] == " "):		if token.cur_pos > token.cur_str_len:			token.cur_str = token.infile.readline()			token.cur_str_len = len(token.cur_str)			token.cur_pos = 0			if not token.cur_str:				token.type_of_token = 'RESERVED_SYMBOL'				token.res_sym = 'EOF'	read_str_idx = 0	while (not is_delim(token.cur_str[token.cur_pos])):		token.read_str[read_str_idx] = token.cur_str[token.cur_pos]		token.cap_str[read_str_idx] = token.cur_str[token.cur_pos].ucase()		read_str_idx += 1	if is_ident(token.cap_str[0]):		if token.cap_str in glob_res:			token.type_of_token = 'GLOBAL_RES_WORD'			token.glob_res_word = token.cap_str			return		else:			token.glob_res_word = 'UNDEFINED'		if token.type_of_token  in cont_res:			token.type_of_token = 'CONTEXT_RES_WORD'			token.cont_res_word = token.cap_str			return		else:			token.cont_res_word = 'UNDEFINED'		token.type_of_token = 'IDENTIFIER'		return	if is_num(token.cap_str[0]):		num = numeric(token.cap_str)		if num:			token.type_of_token = 'FLOAT'			token.float_val = float(token.cap_str)			return		else:			token.type_of_token = 'INT'			token.int_val = int(token.cap_str)			return	if is_res_symbol(token.cap_str[0]):		token.res_sym = token.cap_str		token.type_of_token = 'RESERVED'		return		token.type_of_token = 'UNKNOWN'	return