Exemplo n.º 1
0
  private static boolean rule_assignment(DefaultMutableTreeNode parent) {

    boolean error = false;
    DefaultMutableTreeNode node;

    String iden = tokens.get(currentToken).getWord();
    node =
        new DefaultMutableTreeNode("identifier" + "(" + tokens.get(currentToken).getWord() + ")");
    parent.add(node);

    String s = tokens.get(currentToken).getWord();
    if (SemanticAnalyzer.getSymbolTable().get(s) != null)
      SemanticAnalyzer.pushStack(SemanticAnalyzer.getSymbolTable().get(s).firstElement().getType());
    else {
      SemanticAnalyzer.pushStack("ERROR");
      SemanticAnalyzer.error(getgui(), 0, getlineno(), s);
    }

    currentToken++;
    if (currentToken < tokens.size() && tokens.get(currentToken).getWord().equals("=")) {
      node = new DefaultMutableTreeNode("=");
      parent.add(node);
      currentToken++;
    } else {
      error(5);
      while (currentToken < tokens.size()
          && !(tokens.get(currentToken).getWord().equals("!")
              || tokens.get(currentToken).getWord().equals("-")
              || tokens.get(currentToken).getToken().equals("INTEGER")
              || tokens.get(currentToken).getToken().equals("OCTAL")
              || tokens.get(currentToken).getToken().equals("HEXADECIMAL")
              || tokens.get(currentToken).getToken().equals("BINARY")
              || tokens.get(currentToken).getToken().equals("STRING")
              || tokens.get(currentToken).getToken().equals("CHARACTER")
              || tokens.get(currentToken).getToken().equals("FLOAT")
              || tokens.get(currentToken).getToken().equals("IDENTIFIER")
              || tokens.get(currentToken).getWord().equals("true")
              || tokens.get(currentToken).getWord().equals("false")
              || tokens.get(currentToken).getWord().equals("(")
              || tokens.get(currentToken).getWord().equals(")")
              || tokens.get(currentToken).getWord().equals(";"))) {
        currentToken++;
      }
    }

    node = new DefaultMutableTreeNode("expression");
    parent.add(node);
    error = rule_expression(node);

    String s1 = SemanticAnalyzer.popStack();
    String s2 = SemanticAnalyzer.popStack();
    String operator = "=";
    String res = SemanticAnalyzer.calculateCube(s1, s2, operator);
    CodeGenerator.addInstruction("STO", iden, "0");

    if (res.equals("ERROR")) SemanticAnalyzer.error(getgui(), 2, getlineno(), "");

    return error;
  }
Exemplo n.º 2
0
  public static DefaultMutableTreeNode run(Vector<Token> t, Gui gui) {

    Parser.gui = gui;
    tokens = t;

    currentToken = 0;

    root = new DefaultMutableTreeNode("program");

    //

    rule_program(root);
    CodeGenerator.addInstruction("OPR", "0", "0");
    //
    gui.writeSymbolTable(SemanticAnalyzer.getSymbolTable());
    CodeGenerator.writeCode(gui);
    SemanticAnalyzer.getSymbolTable().clear();
    SemanticAnalyzer.getStack().clear();
    CodeGenerator.clear(gui);
    return root;
  }
Exemplo n.º 3
0
  /**
   * Run
   *
   * @param Vector<Token> t, Gui gui
   * @return DefaultMutableTreeNode
   */
  public static DefaultMutableTreeNode run(Vector<A2.Token> t, Gui gui) {
    Parser.gui = gui;
    tokens = t;
    currentToken = 0;

    SemanticAnalyzer.reset(); // reset the data structures

    root = new DefaultMutableTreeNode("program");
    rule_program(root);

    gui.writeSymbolTable(SemanticAnalyzer.getSymbolTable());

    return root;
  }
Exemplo n.º 4
0
  private static boolean rule_C(DefaultMutableTreeNode parent) {
    boolean error = false;
    DefaultMutableTreeNode node;

    if (currentToken < tokens.size() && tokens.get(currentToken).getToken().equals("INTEGER")) {
      node = new DefaultMutableTreeNode("integer" + "(" + tokens.get(currentToken).getWord() + ")");
      parent.add(node);
      SemanticAnalyzer.pushStack("int");
      CodeGenerator.addInstruction("LIT", tokens.get(currentToken).getWord(), "0");
      currentToken++;
    } else if (currentToken < tokens.size()
        && tokens.get(currentToken).getToken().equals("OCTAL")) {
      node = new DefaultMutableTreeNode("octal" + "(" + tokens.get(currentToken).getWord() + ")");
      parent.add(node);
      SemanticAnalyzer.pushStack("int");
      CodeGenerator.addInstruction("LIT", tokens.get(currentToken).getWord(), "0");
      currentToken++;
    } else if (currentToken < tokens.size()
        && tokens.get(currentToken).getToken().equals("HEXADECIMAL")) {
      node =
          new DefaultMutableTreeNode(
              "hexadecimal" + "(" + tokens.get(currentToken).getWord() + ")");
      parent.add(node);
      SemanticAnalyzer.pushStack("int");
      CodeGenerator.addInstruction("LIT", tokens.get(currentToken).getWord(), "0");
      currentToken++;
    } else if (currentToken < tokens.size()
        && tokens.get(currentToken).getToken().equals("BINARY")) {
      node = new DefaultMutableTreeNode("binary" + "(" + tokens.get(currentToken).getWord() + ")");
      parent.add(node);
      SemanticAnalyzer.pushStack("int");
      CodeGenerator.addInstruction("LIT", tokens.get(currentToken).getWord(), "0");
      currentToken++;
    } else if (currentToken < tokens.size()
        && tokens.get(currentToken).getToken().equals("STRING")) {
      node = new DefaultMutableTreeNode("string" + "(" + tokens.get(currentToken).getWord() + ")");
      parent.add(node);
      SemanticAnalyzer.pushStack("string");
      CodeGenerator.addInstruction("LIT", tokens.get(currentToken).getWord(), "0");
      currentToken++;
    } else if (currentToken < tokens.size()
        && tokens.get(currentToken).getToken().equals("CHARACTER")) {
      node =
          new DefaultMutableTreeNode("character" + "(" + tokens.get(currentToken).getWord() + ")");
      parent.add(node);
      SemanticAnalyzer.pushStack("char");
      CodeGenerator.addInstruction("LIT", tokens.get(currentToken).getWord(), "0");
      currentToken++;
    } else if (currentToken < tokens.size()
        && tokens.get(currentToken).getToken().equals("FLOAT")) {
      node = new DefaultMutableTreeNode("float" + "(" + tokens.get(currentToken).getWord() + ")");
      parent.add(node);
      SemanticAnalyzer.pushStack("float");
      CodeGenerator.addInstruction("LIT", tokens.get(currentToken).getWord(), "0");
      currentToken++;
    } else if (currentToken < tokens.size()
        && tokens.get(currentToken).getWord().equalsIgnoreCase("true")) {
      node = new DefaultMutableTreeNode("boolean" + "(" + tokens.get(currentToken).getWord() + ")");
      parent.add(node);
      SemanticAnalyzer.pushStack("boolean");
      CodeGenerator.addInstruction("LIT", tokens.get(currentToken).getWord(), "0");
      currentToken++;
    } else if (currentToken < tokens.size() && tokens.get(currentToken).getWord().equals("false")) {
      node = new DefaultMutableTreeNode("boolean" + "(" + tokens.get(currentToken).getWord() + ")");
      parent.add(node);
      SemanticAnalyzer.pushStack("boolean");
      CodeGenerator.addInstruction("LIT", tokens.get(currentToken).getWord(), "0");
      currentToken++;
    } else if (currentToken < tokens.size()
        && tokens.get(currentToken).getToken().equals("IDENTIFIER")) {
      node =
          new DefaultMutableTreeNode("identifier" + "(" + tokens.get(currentToken).getWord() + ")");
      parent.add(node);
      if (SemanticAnalyzer.getSymbolTable().get(tokens.get(currentToken).getWord()) != null)
        SemanticAnalyzer.pushStack(
            SemanticAnalyzer.getSymbolTable()
                .get(tokens.get(currentToken).getWord())
                .firstElement()
                .getType());
      else {
        SemanticAnalyzer.error(getgui(), 0, getlineno(), tokens.get(currentToken).getWord());
        SemanticAnalyzer.pushStack("ERROR");
      }
      CodeGenerator.addInstruction("LOD", tokens.get(currentToken).getWord(), "0");
      currentToken++;
    } else if (currentToken < tokens.size() && tokens.get(currentToken).getWord().equals("(")) {
      node = new DefaultMutableTreeNode("(");
      parent.add(node);
      currentToken++;
      //
      node = new DefaultMutableTreeNode("expression");
      parent.add(node);
      error = rule_expression(node);
      //
      if (currentToken < tokens.size() && tokens.get(currentToken).getWord().equals(")")) {
        node = new DefaultMutableTreeNode(")");
        parent.add(node);
        currentToken++;
      } else error(7);
    } else {
      error(9);
    }

    return false;
  }