コード例 #1
0
def comando_composto():

	global tokens, indice, contador, var, operador
	
	if tokens[indice].sIdentificador == "begin":
		
		#Incrementa o escopo
		contador += 1
		
		indice += 1
		
		comandos_opcionais()
		
		if tokens[indice].sIdentificador == "end":
		
			#Decrementa o escopo
			contador -= 1
			
			#Se o contador for 0 é pra limpar um escopo
			if contador == 0:
				semantico.saidaEscopo()
				semantico.printPilha()
			
			indice += 1
		else:
			print(tokens[indice].nLinha + ": ERRO! Sintax inválida. Era esperado a palavra reservada 'end'")
			
		return True
		
	else:
		#print(tokens[indice].nLinha + ": ERRO! Sintax inválida. Era esperado a palavra reservada 'begin'")
		
		return False
コード例 #2
0
def lista_de_identificadores2():

	global tokens, indice, contador, var, operador

	if tokens[indice].sIdentificador == ",":
		indice += 1
		
		if tokens[indice].classificacao == "identificador":
		
			#Adiciona identificador na pilha
			v = idtipo(tokens[indice].sIdentificador, "0")
			semantico.declaracao(v)
			semantico.printPilha()
			
			indice += 1
			
			lista_de_identificadores2()
		else:
			print(tokens[indice].nLinha + ": ERRO! Sintax inválida. Era esperado um identificador após ','")
コード例 #3
0
def lista_de_identificadores():

	global tokens, indice, contador, var, operador
	
	if tokens[indice].classificacao == "identificador":
	
		#Adiciona identificador na pilha
		v = idtipo(tokens[indice].sIdentificador, "0")
		semantico.declaracao(v)
		semantico.printPilha()
		
		indice += 1
		
		lista_de_identificadores2()
		
		return True
		
	else:
	
		return False
コード例 #4
0
def programa():
	
	global tokens, indice, contador, var, operador
	
	if tokens[indice].sIdentificador == "program":
		
		#Abre escopo semântico
		semantico.entradaEscopo()
		semantico.printPilha()
		
		indice += 1
		
		if tokens[indice].classificacao == "identificador":
		
			#Adiciona identificador na pilha
			v = idtipo(tokens[indice].sIdentificador, "program")
			semantico.declaracao(v)
			semantico.printPilha()
			
			indice += 1
			
			if tokens[indice].sIdentificador == ";":
				indice += 1
				
				declaracoes_de_variaveis()
				declaracoes_de_subprogramas()
				comando_composto()
				
				if tokens[indice].sIdentificador != ".":
					print(tokens[indice].sIdentificador)
					print(tokens[indice].nLinha + ": ERRO! Sintax inválida. Era esperado o delimitador '.'")
					
			else:
				print(tokens[indice].nLinha + ": ERRO! Sintax inválida. Era esperado o delimitador ';'")
			
		else:
			print(tokens[indice].nLinha + ": ERRO! Sintax inválida. Era esperado um identificador após a palavra 'program'")
		
	else:
		print(tokens[indice].nLinha + ": ERRO! Sintax inválida. Era esperado a palavra 'program'")
コード例 #5
0
def declaracao_de_subprograma():

	global tokens, indice, contador, var, operador
	
	if tokens[indice].sIdentificador == "procedure":
		indice += 1
		
		if tokens[indice].classificacao == "identificador":
			
			#Adiciona identificador na pilha
			v = idtipo(tokens[indice].sIdentificador, "procedure")
			semantico.declaracao(v)
			semantico.printPilha()
			
			#Abre um novo escopo
			semantico.entradaEscopo()
			
			indice += 1
			
			argumentos()
			
			if tokens[indice].sIdentificador == ';':
				indice += 1
				
				declaracoes_de_variaveis()
				declaracoes_de_subprogramas()
				comando_composto()
			else:
				print(tokens[indice].nLinha + ": ERRO! Sintax inválida. Era esperado o delimitador ';'")
		
		else:
			print(tokens[indice].nLinha + ": ERRO! Sintax inválida. Era esperado um identificador após 'procedure'")
		
		return True
		
	else:
		return False
コード例 #6
0
def tipo():

	global tokens, indice, contador, var, operador

	if tokens[indice].sIdentificador == "integer":
		indice += 1
		#Adiciona identificador
		semantico.atribuiTipo("inteiro")
		semantico.printPilha()
	
	elif tokens[indice].sIdentificador == "real":
		indice += 1
		#Adiciona identificador
		semantico.atribuiTipo("real")
		semantico.printPilha()
	
	elif tokens[indice].sIdentificador == "boolean":
		indice += 1
		#Adiciona identificador
		semantico.atribuiTipo("logico")
		semantico.printPilha()
		
	else:
		print(tokens[indice].nLinha + ": ERRO! Sintax inválida. Era esperado as palavras reservadas 'integer', 'real' ou 'boolean'")