ivprog-visual-1.0.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. // Definição das classes utilizadas para armazenar o algoritmo
  2. // Não adicionar elementos ao tipoDados, pois existem componentes que dependem do seu tamanho e isso afetará seu funcionamento
  3. var tiposDados = Object.freeze({void:"void", integer:"integer", real:"real", text:"text", boolean:"boolean", vector:"vector"});
  4. var tiposComandos = Object.freeze({function:"function", comment:"comment", reader:"reader", writer:"writer", attribution:"attribution", iftrue:"iftrue",
  5. repeatNtimes:"repeatNtimes", whiletrue:"whiletrue", dowhiletrue:"dowhiletrue", switch:"switch", functioncall:"functioncall"});
  6. var allCommandsReference = [];
  7. var Variavel = function(tipo, nome, valor, dimensoes = 0, eh_constante = false, linhas = 0, colunas = 0) {
  8. this.tipo = tipo;
  9. this.nome = nome;
  10. this.valor = valor;
  11. this.dimensoes = dimensoes;
  12. this.eh_constante = eh_constante;
  13. this.linhas = linhas;
  14. this.colunas = colunas;
  15. this.id_command = getIdCommandControl();
  16. allCommandsReference[this.id_command] = this;
  17. };
  18. var Funcao = function(nome, tipo_retorno = tiposDados.void, dimensoes_retorno = 0, lista_parametros = null, eh_principal = false, esta_oculta = false, variaveis = null, comentario_funcao = null) {
  19. this.tipo = tiposComandos.function;
  20. this.nome = nome;
  21. this.tipo_retorno = tipo_retorno;
  22. this.dimensoes_retorno = dimensoes_retorno;
  23. this.lista_parametros = lista_parametros;
  24. this.eh_principal = eh_principal;
  25. this.esta_oculta = esta_oculta;
  26. this.variaveis = variaveis;
  27. this.comentario_funcao = comentario_funcao;
  28. this.comandos = null;
  29. this.id_command = getIdCommandControl();
  30. allCommandsReference[this.id_command] = this;
  31. };
  32. var Comentario = function(texto_comentario) {
  33. this.tipo = tiposComandos.comment;
  34. this.texto_comentario = texto_comentario;
  35. this.id_command = getIdCommandControl();
  36. allCommandsReference[this.id_command] = this;
  37. };
  38. var Leitura = function(variavel = null, linha = 0, coluna = 0) {
  39. this.tipo = tiposComandos.reader;
  40. this.variavel = variavel;
  41. this.linha = linha;
  42. this.coluna = coluna;
  43. this.id_command = getIdCommandControl();
  44. allCommandsReference[this.id_command] = this;
  45. };
  46. var Escrita = function(conteudo) {
  47. this.tipo = tiposComandos.writer;
  48. this.conteudo = conteudo;
  49. this.id_command = getIdCommandControl();
  50. allCommandsReference[this.id_command] = this;
  51. };
  52. var Atribuicao = function(variavel, expressao) {
  53. this.tipo = tiposComandos.attribution;
  54. this.variavel = variavel;
  55. this.expressao = expressao;
  56. this.id_command = getIdCommandControl();
  57. allCommandsReference[this.id_command] = this;
  58. };
  59. var SeVerdadeiro = function(expressao, commands_block, commands_else) {
  60. this.tipo = tiposComandos.iftrue;
  61. this.expressao = expressao;
  62. this.commands_block = commands_block;
  63. this.commands_else = commands_else;
  64. this.id_command = getIdCommandControl();
  65. allCommandsReference[this.id_command] = this;
  66. };
  67. var RepitaNVezes = function(expressao1, expressao2, expressao3, commands_block) {
  68. this.tipo = tiposComandos.repeatNtimes;
  69. this.expressao1 = expressao1;
  70. this.expressao2 = expressao2;
  71. this.expressao3 = expressao3;
  72. this.commands_block = commands_block;
  73. this.id_command = getIdCommandControl();
  74. allCommandsReference[this.id_command] = this;
  75. };
  76. var EnquantoVerdadeiro = function(expressao, commands_block) {
  77. this.tipo = tiposComandos.whiletrue;
  78. this.expressao = expressao;
  79. this.commands_block = commands_block;
  80. this.id_command = getIdCommandControl();
  81. allCommandsReference[this.id_command] = this;
  82. };
  83. var FacaEnquantoVerdadeiro = function(expressao, commands_block) {
  84. this.tipo = tiposComandos.dowhiletrue;
  85. this.expressao = expressao;
  86. this.commands_block = commands_block;
  87. this.id_command = getIdCommandControl();
  88. allCommandsReference[this.id_command] = this;
  89. };
  90. var Escolha = function(variavel, lista_casos_e_blocos) {
  91. this.tipo = tiposComandos.switch;
  92. this.variavel = variavel;
  93. this.lista_casos_e_blocos = lista_casos_e_blocos;
  94. this.id_command = getIdCommandControl();
  95. allCommandsReference[this.id_command] = this;
  96. };
  97. var ChamadaFuncao = function(funcao, lista_parametros) {
  98. this.tipo = tiposComandos.functioncall;
  99. this.funcao = funcao;
  100. this.lista_parametros = lista_parametros;
  101. this.id_command = getIdCommandControl();
  102. allCommandsReference[this.id_command] = this;
  103. }
  104. var Programa = function () {
  105. this.funcoes = new Array();
  106. this.globais = new Array();
  107. };
  108. function adicionarFuncao(funcao) {
  109. programa.funcoes.push(funcao);
  110. }
  111. function adicionarVariavel(funcao, variavel) {
  112. if (programa.funcoes[funcao].variaveis == null) {
  113. programa.funcoes[funcao].variaveis = new Array();
  114. }
  115. programa.funcoes[funcao].variaveis.push(variavel);
  116. }
  117. var id_command_control = 0;
  118. function getIdCommandControl() {
  119. id_command_control ++;
  120. return id_command_control;
  121. }
  122. //var tex = i18n('text');
  123. // Adicionando a função principal automaticamente
  124. var programa = new Programa();
  125. var funcaoPrincipal = new Funcao(i18n("start"), tiposDados.void, 0, [], true);
  126. funcaoPrincipal.comentario_funcao = new Comentario(i18n('text_comment_main'));
  127. /*funcaoPrincipal.comentario_funcao = new Comentario(i18n('text_comment_main'));
  128. funcaoPrincipal.comandos = [];
  129. funcaoPrincipal.comandos.push(new Leitura(null));
  130. funcaoPrincipal.comandos.push(new Escrita(null));
  131. funcaoPrincipal.comandos.push(new Comentario("Comentario aqui..."));
  132. bloco = [];
  133. bloco.push(new Leitura(null));
  134. bloco.push(new Escrita(null));
  135. bloco.push(new Comentario(null));
  136. b_senao = [];
  137. b_senao.push(new Leitura(null));
  138. b_senao.push(new Comentario(null));
  139. senao = [];
  140. senao.push(new SeVerdadeiro(null, b_senao, b_senao));
  141. teste = [];
  142. bb_r = [];
  143. bb_r.push(new Comentario(null));
  144. teste.push(new RepitaNVezes(null, null, null, bb_r));
  145. funcaoPrincipal.comandos.push(new SeVerdadeiro(null, teste, b_senao));
  146. funcaoPrincipal.comandos.push(new SeVerdadeiro(null, bloco, senao));
  147. */
  148. //funcaoPrincipal.lista_parametros.push(new Variavel(tiposDados.text, "args"));
  149. adicionarFuncao(funcaoPrincipal);
  150. var funcaoSomar = new Funcao("somar", tiposDados.integer, 0, [], false, false, null, new Comentario(i18n('text_comment_start')));
  151. funcaoSomar.lista_parametros.push(new Variavel(tiposDados.integer, "a"));
  152. funcaoSomar.lista_parametros.push(new Variavel(tiposDados.integer, "b"));
  153. //adicionarFuncao(funcaoSomar);