123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463 |
- import $ from 'jquery';
- import { Types } from './types';
- import * as Models from './ivprog_elements';
- import { LocalizedStrings } from './../services/localizedStringsService';
- import * as GlobalsManagement from './globals';
- import * as VariablesManagement from './variables';
- import * as CommandsManagement from './commands';
- export function generate () {
- var code = 'programa \n{ ';
- code += globalsCode();
- code += '\n';
- for (var i = 0; i < window.program_obj.functions.length; i ++) {
- code += functionsCode(window.program_obj.functions[i]);
- code += '\n';
- }
- code += '\n}';
- return code;
- }
- function functionsCode (function_obj) {
- var ret = '\n\tfuncao ';
- switch (function_obj.return_type) {
- case Types.INTEGER:
- ret += 'inteiro ';
- break;
- case Types.REAL:
- ret += 'real ';
- break;
- case Types.TEXT:
- ret += 'texto ';
- break;
- case Types.BOOLEAN:
- ret += 'booleano ';
- break;
- case Types.VOID:
- ret += 'vazio ';
- break;
- }
- if (function_obj.return_dimensions == 1) {
- ret += '[] '
- } else if (function_obj.return_dimensions == 2) {
- ret += '[][] '
- }
- ret += function_obj.name + ' ( ';
- for (var j = 0; j < function_obj.parameters_list.length; j++) {
- ret += parametersCode(function_obj.parameters_list[j]);
- if ((j + 1) < function_obj.parameters_list.length) {
- ret += ',';
- }
- }
- ret += ' ) ';
- ret += '\n\t{';
- for (var j = 0; j < function_obj.variables_list.length; j++) {
- ret += variablesCode(function_obj.variables_list[j]);
- }
- for (var j = 0; j < function_obj.commands.length; j++) {
- ret += commandsCode(function_obj.commands[j]);
- }
- ret += '\n\t}';
- return ret;
- }
- function commandsCode (command_obj) {
- switch (command_obj.type) {
- case Models.COMMAND_TYPES.comment:
- return commentsCode(command_obj);
- case Models.COMMAND_TYPES.reader:
- return readersCode(command_obj);
- case Models.COMMAND_TYPES.writer:
- return writersCode(command_obj);
- }
- }
- function readersCode (command_obj) {
- var ret = '\n\t\tleia ( ';
-
- ret += command_obj.variable_value_menu.content.name;
- if (command_obj.variable_value_menu.content.dimensions == 1) {
- ret += ' [ ' + command_obj.column + ' ] ';
- } else if (command_obj.variable_value_menu.content.dimensions == 2) {
- ret += ' [ ' + command_obj.row + ' ] [ ' + command_obj.column + ' ]';
- }
- ret += ' ) ';
- return ret;
- }
- function writersCode (command_obj) {
- var ret = '\n\t\tescreva ( ';
-
- ret += command_obj.content[0].content.name;
- if (command_obj.content[0].content.dimensions == 1) {
- ret += ' [ ' + command_obj.content[0].column + ' ] ';
- } else if (command_obj.content[0].dimensions == 2) {
- ret += ' [ ' + command_obj.content[0].row + ' ] [ ' + command_obj.content[0].column + ' ]';
- }
- ret += ' ) ';
- return ret;
- }
- function commentsCode (command_obj) {
- var ret = '\n\t\t// ';
- ret += command_obj.comment_text.content;
- return ret;
- }
- function parametersCode (parameter_obj) {
- var ret = '';
- switch (parameter_obj.type) {
- case Types.INTEGER:
- ret += ' inteiro ';
- break;
- case Types.REAL:
- ret += ' real ';
- break;
- case Types.TEXT:
- ret += ' texto ';
- break;
- case Types.BOOLEAN:
- ret += ' booleano ';
- break;
- }
- ret += parameter_obj.name + '';
- if (parameter_obj.dimensions == 1) {
- ret += ' []'
- } else if (parameter_obj.dimensions == 2) {
- ret += ' [][]'
- }
- return ret;
- }
- function variablesCode (variable_obj) {
- var ret = '';
- var temp = variable_obj;
- ret += '\n\t\t';
- if (temp.is_constant) {
- ret += 'const ';
- }
- switch (temp.type) {
- case Types.INTEGER:
- ret += 'inteiro ';
- break;
- case Types.REAL:
- ret += 'real ';
- break;
- case Types.TEXT:
- ret += 'texto ';
- break;
- case Types.BOOLEAN:
- ret += 'booleano ';
- break;
- }
- ret += temp.name + ' ';
- if (temp.dimensions == 1) {
- ret += '[' + temp.columns + '] ';
- switch (temp.type) {
- case Types.INTEGER:
- case Types.REAL:
- ret += '= {' + temp.value + '}';
- break;
- case Types.TEXT:
- ret += '= {';
- for (var j = 0; j < temp.value.length; j++) {
- ret += '"'+temp.value[j]+'"';
- if ((j + 1) < temp.value.length) {
- ret += ',';
- }
- }
- ret += '}';
- break;
- case Types.BOOLEAN:
- ret += '= {';
- for (var j = 0; j < temp.value.length; j++) {
- if (temp.value[j]) {
- ret += "verdadeiro";
- } else {
- ret += "falso";
- }
- if ((j + 1) < temp.value.length) {
- ret += ',';
- }
- }
- ret += '}';
- break;
- }
- } else if (temp.dimensions == 2) {
- ret += '[' + temp.rows + '][' + temp.columns + '] ';
- switch (temp.type) {
- case Types.INTEGER:
- case Types.REAL:
- ret += '= {';
- for (var j = 0; j < temp.rows; j++) {
- ret += '{' + temp.value[j] + '}';
- if ((j + 1) < temp.rows) {
- ret += ',';
- }
- }
- ret += '}';
- break;
- case Types.TEXT:
- ret += '= {';
- for (var j = 0; j < temp.rows; j++) {
- ret += '{';
- for (var k = 0; k < temp.columns; k++) {
- ret += '"' + temp.value[j][k] + '"';
- if ((k + 1) < temp.columns) {
- ret += ',';
- }
- }
- ret += '}';
- if ((j + 1) < temp.rows) {
- ret += ',';
- }
- }
- ret += '}';
- break;
- case Types.BOOLEAN:
- ret += '= {';
- for (var j = 0; j < temp.rows; j++) {
- ret += '{';
- for (var k = 0; k < temp.columns; k++) {
-
- if (temp.value[j][k]) {
- ret += "verdadeiro";
- } else {
- ret += "falso";
- }
- if ((k + 1) < temp.columns) {
- ret += ',';
- }
- }
- ret += '}';
- if ((j + 1) < temp.rows) {
- ret += ',';
- }
- }
- ret += '}';
- break;
- }
- } else {
- switch (temp.type) {
- case Types.INTEGER:
- case Types.REAL:
- ret += '= ' + temp.value;
- break;
- case Types.TEXT:
- ret += '= "' + temp.value + '"';
- break;
- case Types.BOOLEAN:
- ret += '= ';
- if (temp.value) {
- ret += "verdadeiro";
- } else {
- ret += "falso";
- }
- break;
- }
- }
- return ret;
- }
- function globalsCode () {
- var ret = '';
- if (window.program_obj.globals) {
- for (var i = 0; i < window.program_obj.globals.length; i++) {
- var temp = window.program_obj.globals[i];
- ret += '\n\t';
- if (temp.is_constant) {
- ret += 'const ';
- }
- switch (temp.type) {
- case Types.INTEGER:
- ret += 'inteiro ';
- break;
- case Types.REAL:
- ret += 'real ';
- break;
- case Types.TEXT:
- ret += 'texto ';
- break;
- case Types.BOOLEAN:
- ret += 'booleano ';
- break;
- }
- ret += temp.name + ' ';
- if (temp.dimensions == 1) {
- ret += '[' + temp.columns + '] ';
- switch (temp.type) {
- case Types.INTEGER:
- case Types.REAL:
- ret += '= {' + temp.value + '}';
- break;
- case Types.TEXT:
- ret += '= {';
- for (var j = 0; j < temp.value.length; j++) {
- ret += '"'+temp.value[j]+'"';
- if ((j + 1) < temp.value.length) {
- ret += ',';
- }
- }
- ret += '}';
- break;
- case Types.BOOLEAN:
- ret += '= {';
- for (var j = 0; j < temp.value.length; j++) {
- if (temp.value[j]) {
- ret += "verdadeiro";
- } else {
- ret += "falso";
- }
- if ((j + 1) < temp.value.length) {
- ret += ',';
- }
- }
- ret += '}';
- break;
- }
- } else if (temp.dimensions == 2) {
- ret += '[' + temp.rows + '][' + temp.columns + '] ';
- switch (temp.type) {
- case Types.INTEGER:
- case Types.REAL:
- ret += '= {';
- for (var j = 0; j < temp.rows; j++) {
- ret += '{' + temp.value[j] + '}';
- if ((j + 1) < temp.rows) {
- ret += ',';
- }
- }
- ret += '}';
- break;
- case Types.TEXT:
- ret += '= {';
- for (var j = 0; j < temp.rows; j++) {
- ret += '{';
- for (var k = 0; k < temp.columns; k++) {
- ret += '"' + temp.value[j][k] + '"';
- if ((k + 1) < temp.columns) {
- ret += ',';
- }
- }
- ret += '}';
- if ((j + 1) < temp.rows) {
- ret += ',';
- }
- }
- ret += '}';
- break;
- case Types.BOOLEAN:
- ret += '= {';
- for (var j = 0; j < temp.rows; j++) {
- ret += '{';
- for (var k = 0; k < temp.columns; k++) {
-
- if (temp.value[j][k]) {
- ret += "verdadeiro";
- } else {
- ret += "falso";
- }
- if ((k + 1) < temp.columns) {
- ret += ',';
- }
- }
- ret += '}';
- if ((j + 1) < temp.rows) {
- ret += ',';
- }
- }
- ret += '}';
- break;
- }
- } else {
- switch (temp.type) {
- case Types.INTEGER:
- case Types.REAL:
- ret += '= ' + temp.value;
- break;
- case Types.TEXT:
- ret += '= "' + temp.value + '"';
- break;
- case Types.BOOLEAN:
- ret += '= ';
- if (temp.value) {
- ret += "verdadeiro";
- } else {
- ret += "falso";
- }
- break;
- }
- }
-
- }
- }
- return ret;
- }
|