compiler.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. function compile() {
  2. let operations = document.getElementsByName('mainOperationsType');
  3. let stringToBeCompiled = ``;
  4. // declaring variables
  5. for (let i = 0; i < variables.length; i++) {
  6. stringToBeCompiled += `let ${variables[i].name} = ${variables[i].value};`;
  7. }
  8. for (let i = 0; i < operations.length; i++) {
  9. switch (operations[i].value) {
  10. case mainCodeTypes.attribution: {
  11. console.log(operations[i].previousElementSibling.value);
  12. if (i !== 0)
  13. stringToBeCompiled += `;`;
  14. stringToBeCompiled += `\n${getVariableById(operations[i].previousElementSibling.value).name} = `;
  15. break;
  16. }
  17. case mainCodeTypes.variable: {
  18. console.log(operations[i].previousElementSibling.value);
  19. stringToBeCompiled += `${getVariableById(operations[i].previousElementSibling.value).name} `;
  20. break;
  21. }
  22. case mainCodeTypes.operation: {
  23. let operation = getOperationById(operations[i].previousElementSibling.value);
  24. console.log(`${operation.firstVariable.name} ${operation.operation.operator} ${operation.secondVariable.name}`);
  25. stringToBeCompiled += `${operation.firstVariable.name} ${operation.operation.operator} ${operation.secondVariable.name} `;
  26. break;
  27. }
  28. case mainCodeTypes.operator: {
  29. console.log(operations[i].previousElementSibling.value);
  30. stringToBeCompiled += `${getOperationByValue(operations[i].previousElementSibling.value).operator} `;
  31. break;
  32. }
  33. }
  34. }
  35. for (let i = 0; i < variables.length; i++) {
  36. stringToBeCompiled += `\nalert("${variables[i].name} = " + ${variables[i].name});`;
  37. }
  38. eval(stringToBeCompiled);
  39. }