Advertisement
Guest User

Untitled

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