package Portugol.Language.Criar;
import Portugol.Language.Analisador.Keyword;
import Portugol.Language.Analisador.TipoDeParametro;
import java.util.Vector;
import Portugol.Language.Utilitario.LanguageException;
/**
* @author Augusto Bilabila original de Antonio manso
*/
public class BloqueSubrutine extends Bloque {
public static String VERSION = "Versão:2.0 \t(c)Augusto Bilabila e David Silva Barrera";
public static String ErroRecursividad = "Detectado llamado recursivo. CompAlg no permite este llamado";
public boolean EstaDebugeando;
/**
* vector dos parametros
*/
public Vector<TipoDeParametro> parametrosDefinition;//David:
/**
* vector dos valoes para os parametros
*/
public String TipoRetorno;
public boolean EstaExecutando;
public BloqueClasse classePae; //Se esta dentro duma classe, aqui temos a referença
//static public SymbolObjeto InstanciaActual = null;//Se esta dentro duma classe, aqui temos a instancia actual
//public static String VerOperator = " " ;//im
/**
* Constroi um fluxograma
*
* @param code programa fonte
* @throws Portugol.Language.Utils.LanguageException excepcao
*/
public BloqueSubrutine(/*String code*/) throws LanguageException {
// Construir(code);
start = null;
parametrosDefinition = new Vector<TipoDeParametro>();
EstaExecutando = false;
classePae = null; //vamos supor que a sub-rutina não esta dentro de classe alguma
EstaDebugeando = false;
}
//=============================================================================
public String RemoveComentarios(String str) {
StringBuffer newStr = new StringBuffer();
for (int index = 0; index < str.length(); index++) {
switch (str.charAt(index)) {
case '/':
// comentario "//"
if (index + 1 < str.length() && str.charAt(index + 1) == '/') {
return newStr.toString().trim();
}
//inicio de um comentario /*
if (index + 1 < str.length() && str.charAt(index + 1) == '*') {
isComented = true;
} else //fim do comentario */
if (index > 0 && str.charAt(index - 1) == '*') {
isComented = false;
} //introduz caracter /
else {
newStr.append(str.charAt(index));
}
break;
default:
// se nao for comentario
if (!isComented) {
newStr.append(str.charAt(index));
}
}
}
return newStr.toString().trim();
}
/**
* string
*
* @return string
*/
public String toString() {
StringBuffer str = new StringBuffer();
NodeInstruction pt = start;
while (pt != null) {
str.append(GetCode(pt));
pt = pt.next;
}
return str.toString();
}
/**
* calcula o texto de um nodo
*
* @param node nodo de origem
* @return o texto de um nodo
*/
public static String GetCode(NodeInstruction node) {//im
if (node.GetType() == Keyword.CONECTOR) {
return "";
}
if (node.GetType() == Keyword.SE) {
return ExpandSe.toString(node);
}
if (node.GetType() == Keyword.ENQUANTO) {
return ExpandEnquanto.toString(node);
}
return node.toString() + "\n";
}
}