Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. public void functionToJVM(PrintWriter file, SymbolTable st, Node n)
  2. {
  3. //functionTable.setRegisters(function.name);
  4.  
  5. SimpleNode function = (SimpleNode) n;
  6. SimpleNode args[] = null;
  7. SymbolTable function_table = null;
  8. String function_header;
  9.  
  10. int children = function.jjtGetNumChildren();
  11.  
  12. String name = function.getName()
  13.  
  14. Symbol symbol = null;
  15. String return_symbol;
  16.  
  17. //header
  18. for(int i = 0; i < children; i++)
  19. {
  20. if(function.jjtGetChild(i).toString().equals("Arg"))
  21. {
  22. args[i] = function.jjGetChild(i);
  23. }
  24. }
  25.  
  26. file.print('\n' + ".method public static ");
  27.  
  28. if(name.equals("Main"))
  29. {
  30. file.print("main([Ljava/lang/String;)V" + '\n');
  31. }
  32. else
  33. {
  34. function_table = this.st.get(name);
  35.  
  36. function_header = name + '(';
  37.  
  38. for (Map.Entry<String, Symbol> entry : function_table.getArgsList().entrySet()) {
  39.  
  40. symbol = entry.getValue();
  41.  
  42. if(symbol.getType().equals("int"))
  43. {
  44. function_header += "I";
  45. }
  46. else if(symbol.getType().equals("array"))
  47. {
  48. function_header += "[I";
  49. }
  50. }
  51.  
  52. return_symbol = function_table.getReturnType();
  53. if(return_symbol == "void")
  54. {
  55. function_header += ")V";
  56. }
  57. else
  58. {
  59. if(return_symbol.equals("int"))
  60. {
  61. function_header += ")I";
  62. }
  63. else if(return_symbol.equals("boolean"))
  64. {
  65. function_header += ")Z";
  66. }
  67. else if (returnSymbol.equals("int[]"))
  68. {
  69. function_header += function_header + ")[I";
  70.  
  71. }
  72. }
  73. file.print(function_header);
  74. }
  75.  
  76. //limites
  77. file.println("locals_" + name);
  78. file.println("stack_" + name);
  79.  
  80. //statements
  81. int children = function.jjtGetNumChildren();
  82. for(int i = 0; i < children; i++)
  83. {
  84. //statementToJVM
  85. }
  86.  
  87. //return
  88. return_symbol = function_table.getReturnType();
  89. if(function_table.getReturnType().equals("void"))
  90. {
  91. file.println(" return");
  92. }
  93. else
  94. {
  95. //printFileLoadVariable(file, st, não sei como passar aqui o simbolo de retorno como node, "ID")
  96. if(return_symbol.equals("int") || return_symbol.equals("boolean"))
  97. {
  98. file.println(" ireturn");
  99. }
  100. else
  101. {
  102. file.println(" areturn");
  103. }
  104. }
  105.  
  106. file.println(".end method\n");
  107.  
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement