Exemple #1
0
	def is_pending_reduce(self):
		if self.dot_pos == len(self.right_tokens_list[0]):
			return True
		#easy to ignore: if all tokens after dot are eps, the exp is also pending reduce
		for i in xrange(self.dot_pos, len(self.right_tokens_list[0])):
			if not tokens.is_epsilon(self.right_tokens_list[0][i]):
				return False
		return True	
Exemple #2
0
 def is_pending_reduce(self):
     if self.dot_pos == len(self.right_tokens_list[0]):
         return True
     #easy to ignore: if all tokens after dot are eps, the exp is also pending reduce
     for i in xrange(self.dot_pos, len(self.right_tokens_list[0])):
         if not tokens.is_epsilon(self.right_tokens_list[0][i]):
             return False
     return True
Exemple #3
0
def get_first_set(gram, t):
	ret = set()
	g = gram.normalized_mode
	if tokens.is_terminal(t) or tokens.is_epsilon(t):
		ret.add(t)
		return ret
	eps_token = fact.create_epsilon()
	exps = g.get_expresses_by_left(t)
	for exp in exps:
		for _tokens in exp.right_tokens_list:
			tmp = get_first_set_multi(gram, _tokens)
			ret = ret.union(tmp)
	return ret
Exemple #4
0
def get_first_set(gram, t):
    ret = set()
    g = gram.normalized_mode
    if tokens.is_terminal(t) or tokens.is_epsilon(t):
        ret.add(t)
        return ret
    eps_token = fact.create_epsilon()
    exps = g.get_expresses_by_left(t)
    for exp in exps:
        for _tokens in exp.right_tokens_list:
            tmp = get_first_set_multi(gram, _tokens)
            ret = ret.union(tmp)
    return ret