import { Types } from './../ast/types';
const tiposComandos = Object.freeze({comment:"comment", reader:"reader", writer:"writer"});
export class Variavel {
constructor (tipo, nome, valor, dimensoes = 0, eh_constante = false, linhas = 0, colunas = 0) {
this.tipo = tipo;
this.nome = nome;
this.valor = valor;
this.dimensoes = dimensoes;
this.eh_constante = eh_constante;
this.linhas = linhas;
this.colunas = colunas;
}
}
export class Funcao {
constructor (nome, tipo_retorno = Types.VOID, dimensoes_retorno = 0, lista_parametros = null, eh_principal = false, esta_oculta = false, variaveis = [], comentario_funcao = null) {
this.nome = nome;
this.tipo_retorno = tipo_retorno;
this.dimensoes_retorno = dimensoes_retorno;
this.lista_parametros = lista_parametros;
this.eh_principal = eh_principal;
this.esta_oculta = esta_oculta;
this.variaveis = variaveis;
this.comentario_funcao = comentario_funcao;
this.comandos = [];
}
}
export class Comentario {
constructor (texto_comentario) {
this.tipo = tiposComandos.comment;
this.texto_comentario = texto_comentario;
}
}
export class Comando {
constructor (tipo) {
this.tipo = tipo;
}
}
export class Expressao {
constructor (conteudo) {
this.conteudo = conteudo;
}
}
export class Programa {
constructor () {
this.funcoes = [];
this.globais = [];
};
adicionarFuncao (funcao) {
this.funcoes.push(funcao);
}
adicionarVariavel(funcao, variavel) {
if (this.funcoes[funcao].variaveis === null) {
this.funcoes[funcao].variaveis = [];
}
this.funcoes[funcao].variaveis.push(variavel);
}
adicionarGlobal (variavel) {
this.globais.push(variavel);
}
}