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); } }