Пример #1
0
  BreakableNode( const RefDNode& refNode): ProgNode( refNode)
  {
    if( refNode->GetFirstChild() != RefDNode(antlr::nullAST))
      {
	down = NewProgNode( refNode->GetFirstChild());
      }
    if( refNode->GetNextSibling() != RefDNode(antlr::nullAST))
      {
	right = NewProgNode( refNode->GetNextSibling());
      }
  }
Пример #2
0
  BLOCKNode( const RefDNode& refNode): ProgNode( refNode)
  {
    if( refNode->GetFirstChild() != RefDNode(antlr::nullAST))
      {
	down = NewProgNode( refNode->GetFirstChild());
      }
    if( refNode->GetNextSibling() != RefDNode(antlr::nullAST))
      {
	right = NewProgNode( refNode->GetNextSibling());
     
	// first statement
	if( down != NULL)
	  down->GetLastSibling()->KeepRight( right);
	else
	  this->KeepDown( right);
      }
  }
Пример #3
0
  IFNode( const RefDNode& refNode): ProgNode( refNode)
  {
    if( refNode->GetFirstChild() != RefDNode(antlr::nullAST))
      {
	down = NewProgNode( refNode->GetFirstChild());
      }
    if( refNode->GetNextSibling() != RefDNode(antlr::nullAST))
      {
	right = NewProgNode( refNode->GetNextSibling());
      }

    assert( down != NULL);

    // first alternative
    if( right != NULL)
      {
	ProgNodeP s1 = down->GetNextSibling(); // skip expr
	s1->GetLastSibling()->KeepRight( right);
      }
  }
Пример #4
0
  IF_ELSENode( const RefDNode& refNode): ProgNode( refNode)
  {
    // 	std::cout << "IF_ELSENode" << std::endl;
    if( refNode->GetFirstChild() != RefDNode(antlr::nullAST))
      {
	down = NewProgNode( refNode->GetFirstChild());
      }
    if( refNode->GetNextSibling() != RefDNode(antlr::nullAST))
      {
	right = NewProgNode( refNode->GetNextSibling());
      }

    assert( down != NULL);

    // IF expr s1 s2
    // first alternative
    // s1 is always a BLOCK (gdlc.tree.g, if_statement)
    // right MUST be set here even if NULL as it IS set to 2nd alternative
    ProgNodeP s1 = down->GetNextSibling(); // skip expr
    if( s1->GetFirstChild() == NULL || s1->KeepDown())
      {
	s1->KeepDown( right);
      }
    else
      {
	s1->GetFirstChild()->GetLastSibling()->KeepRight( right);
      }
		
    if( right != NULL)
      {
	// 2nd alternative
	ProgNodeP s2 = s1->GetNextSibling();

	s2->GetLastSibling()->KeepRight( right); // disconnect s2
      }
  }