コード例 #1
0
        public SimboloBasico Insere2Saida(ListaSimbolo _lstSB)
        {
            int _indiceSimbolo = 0;
            int _subt2posicionaSimboloInserido = 0;

            switch (saida.Count)
            {
            case 0:
                /// case 0: Primeiro simbolo na saida, adiciona apenas um
                /// simbolo na saida
                _indiceSimbolo = 0;

                if (_lstSB.Count > 1)
                {
                    _lstSB.InsereParalelo(ListaSimbolo.TipoInsercaoParalelo.PARALELO_COMPLETO);
                    _subt2posicionaSimboloInserido = -1;
                }

                break;

            case 1:
                /// case 1: Caso ja exista 1 (um) simbolo de saida, insere um
                /// paralelo de forma automatica


                // aqui 0=antes, 1=depois
                if (_indiceSimbolo == 0)
                {
                    /// prepara para inserir antes do objeto atual
                    _lstSB.InsereParalelo(ListaSimbolo.TipoInsercaoParalelo.PARALELO_INICIADO);

                    /// insere PP antes do objeto atual na linha
                    this.saida.Insert(0, new SimboloBasico(CodigosInterpretaveis.PARALELO_PROXIMO));
                    //InsereSimboloUnicoVisual(0, this.saida, new SimboloBasico(CodigosInterpretaveis.PARALELO_PROXIMO));
                    /// insere PF depois do objeto atual da linha
                    this.saida.Insert(this.saida.Count, new SimboloBasico(CodigosInterpretaveis.PARALELO_FINAL));
                    //InsereSimboloUnicoVisual(this.saida.Count, this.saida, new SimboloBasico(CodigosInterpretaveis.PARALELO_FINAL));
                }
                else
                {
                    _lstSB.InsereParalelo(ListaSimbolo.TipoInsercaoParalelo.PARALELO_FINALIZADO);
                    _subt2posicionaSimboloInserido = -1;

                    this.saida.Insert(0, new SimboloBasico(CodigosInterpretaveis.PARALELO_INICIAL));
                    //InsereSimboloUnicoVisual(0, this.saida, new SimboloBasico(CodigosInterpretaveis.PARALELO_INICIAL));
                    _indiceSimbolo++;
                }

                break;

            default:
                switch (this.saida[_indiceSimbolo].getCI())
                {
                case CodigosInterpretaveis.PARALELO_INICIAL:
                    _lstSB.InsereParalelo(ListaSimbolo.TipoInsercaoParalelo.PARALELO_INICIADO);

                    this.saida[0].setCI(CodigosInterpretaveis.PARALELO_PROXIMO);
                    //this.saida[0].setCI(CodigosInterpretaveis.PARALELO_PROXIMO);
                    break;

                case CodigosInterpretaveis.PARALELO_PROXIMO:
                    _lstSB.InsereParaleloProximo();
                    break;

                case CodigosInterpretaveis.PARALELO_FINAL:
                    _lstSB.InsereParaleloProximo();
                    break;

                default:
                    _lstSB.InsereParaleloProximo();
                    _indiceSimbolo++;
                    break;
                }
                break;
            }

            foreach (SimboloBasico _sb in _lstSB)
            {
                this.saida.Insert(_indiceSimbolo, _sb);
                //InsereSimboloUnicoVisual(_indiceSimbolo, this.saida, _sb);
                _indiceSimbolo++;
            }

            /// retorna o ultimo objeto inserido
            return(this.saida[_indiceSimbolo - 1 + _subt2posicionaSimboloInserido]);
        }