visual.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { Types } from './../ast/types';
  2. const tiposComandos = Object.freeze({comment:"comment", reader:"reader", writer:"writer"});
  3. export class Variavel {
  4. constructor (tipo, nome, valor, dimensoes = 0, eh_constante = false, linhas = 0, colunas = 0) {
  5. this.tipo = tipo;
  6. this.nome = nome;
  7. this.valor = valor;
  8. this.dimensoes = dimensoes;
  9. this.eh_constante = eh_constante;
  10. this.linhas = linhas;
  11. this.colunas = colunas;
  12. }
  13. }
  14. export class Funcao {
  15. constructor (nome, tipo_retorno = Types.VOID, dimensoes_retorno = 0, lista_parametros = null, eh_principal = false, esta_oculta = false, variaveis = [], comentario_funcao = null) {
  16. this.nome = nome;
  17. this.tipo_retorno = tipo_retorno;
  18. this.dimensoes_retorno = dimensoes_retorno;
  19. this.lista_parametros = lista_parametros;
  20. this.eh_principal = eh_principal;
  21. this.esta_oculta = esta_oculta;
  22. this.variaveis = variaveis;
  23. this.comentario_funcao = comentario_funcao;
  24. this.comandos = [];
  25. }
  26. }
  27. export class Comentario {
  28. constructor (texto_comentario) {
  29. this.tipo = tiposComandos.comment;
  30. this.texto_comentario = texto_comentario;
  31. }
  32. }
  33. export class Comando {
  34. constructor (tipo) {
  35. this.tipo = tipo;
  36. }
  37. }
  38. export class Expressao {
  39. constructor (conteudo) {
  40. this.conteudo = conteudo;
  41. }
  42. }
  43. export class Programa {
  44. constructor () {
  45. this.funcoes = [];
  46. this.globais = [];
  47. };
  48. adicionarFuncao (funcao) {
  49. this.funcoes.push(funcao);
  50. }
  51. adicionarVariavel(funcao, variavel) {
  52. if (this.funcoes[funcao].variaveis === null) {
  53. this.funcoes[funcao].variaveis = [];
  54. }
  55. this.funcoes[funcao].variaveis.push(variavel);
  56. }
  57. adicionarGlobal (variavel) {
  58. this.globais.push(variavel);
  59. }
  60. }