예제 #1
0
        private void btnConfirmar_Click(object sender, EventArgs e)
        {
            int aux = Convert.ToInt32(txtTamanho.Text);

            StaticTamanhoVariavel.SetTamanhoVariavel(aux);
            Close();
        }
예제 #2
0
        bool autenticarVariavel(string variavel)
        {
            bool retornar = false;

            if (AutenticarTamanhoVariavel(variavel, StaticTamanhoVariavel.GetTamanhoVariavel()) & autenticarPalavraDaVariavel(variavel))
            {
                retornar = true;
            }
            return(retornar);
        }
예제 #3
0
        private void Compilar_Click(object sender, EventArgs e)
        {
            //definir os tipos aceitos na linguagem
            tipo.Add("string");
            tipo.Add("int");
            tipo.Add("float");
            tipo.Add("bool");

            //definir os caracteres aceitos na linguagem
            caracter = "a-zA-Z";

            //definir operadores aceitos na linguagem
            operadores = @"\*|\-|\+|\/";

            //definir numeros aceitos na linguagem
            numeros = "0-9";

            //definir separador
            separa    = new char[2];
            separa[0] = '(';
            separa[1] = ')';

            dgvResultado.DataSource = null;
            item.Clear();

            string[] aux;
            int      i = 1;

            string[] str = richTxtTexto.Text.Split('\n');
            if (str[0] == "var")
            {
                while (str.Length > i && str[i] != "begin")
                {
                    str[i] = str[i].Replace("\n", "");
                    str[i] = str[i].Trim();
                    if (str[i] != "")
                    {
                        if (ER.IsMatch(str[i]) == true)
                        {
                            ItensDataSource Item = new ItensDataSource();
                            aux = str[i].Split(' ');
                            if (autenticarTipoVariavel(aux[0]))
                            {
                                if (autenticarTerminador(aux[aux.Length - 1]))
                                {
                                    aux = aux[aux.Length - 1].Split(StaticTerminador.GetTerminador());
                                    for (int x = 0; x < aux.Length; x++)
                                    {
                                        if (aux[x] == "")
                                        {
                                            aux[x] = null;
                                        }
                                    }
                                    for (int x = 0; x < aux.Length; x++)
                                    {
                                        if (aux[x] != null)
                                        {
                                            if (!AutenticarTamanhoVariavel(aux[x], StaticTamanhoVariavel.GetTamanhoVariavel()))
                                            {
                                                Item.status  = "ERRO";
                                                Item.linha   = Convert.ToString(i + 1);
                                                Item.tipo    = "Erro, variável muito grande";
                                                Item.escrita = str[i] + Environment.NewLine;
                                                item.Add(Item);
                                            }
                                            else if (!autenticarPalavraDaVariavel(aux[x]))
                                            {
                                                Item.status  = "ERRO";
                                                Item.linha   = Convert.ToString(i + 1);
                                                Item.tipo    = "Erro, variável precisa começar com caractere";
                                                Item.escrita = str[i] + Environment.NewLine;
                                                item.Add(Item);
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    Item.status  = "ERRO";
                                    Item.linha   = Convert.ToString(i + 1);
                                    Item.tipo    = "Erro, terminador inválido";
                                    Item.escrita = str[i] + Environment.NewLine;
                                    item.Add(Item);
                                }
                            }
                            else
                            {
                                Item.status  = "ERRO";
                                Item.linha   = Convert.ToString(i + 1);
                                Item.tipo    = "Erro, tipo inválido";
                                Item.escrita = str[i] + Environment.NewLine;
                                item.Add(Item);
                            }
                        }
                        else
                        {
                            ItensDataSource Item = new ItensDataSource();
                            Item.status  = "ERRO";
                            Item.linha   = Convert.ToString(i + 1);
                            Item.tipo    = "Erro de sintáxe";
                            Item.escrita = str[i] + Environment.NewLine;
                            item.Add(Item);
                        }
                    }
                    i++;
                }
                if (str.Length > i && str[i] == "begin")
                {
                    while (str.Length > i && str[i] != "end")
                    {
                        if (str[i] != "")
                        {
                            if (str[i] != "begin")
                            {
                                ItensDataSource Item       = new ItensDataSource();
                                char            terminador = StaticTerminador.GetTerminador();
                                Regex           ER         = new Regex(@"^(|\s+)[" + caracter + @"]{1}[\w]{0,24}(|\s+)(=){1}((|\s+)(\()(|\s+)(([" + caracter + @"]{1}[" + caracter + @"" + numeros + @"]{0,24})|[" + numeros + @"]{1,11}|[" + numeros + @"]{1,11}\.[" + numeros + @"]{1,2}){1}(|\s+)((" + operadores + @"){1}(|\s+)((" + caracter + @"{1}[" + caracter + @"" + numeros + @"]{0,24})|[" + numeros + @"]{1,11}|[" + numeros + @"]{1,11}\.[" + numeros + @"]{1,2}){1}(|\s+))*(\))|(|\s+)(([" + caracter + @"]{1}[" + caracter + @"" + numeros + @"]{0,24})|[" + numeros + @"]{1,11}|[" + numeros + @"]{1,11}\.[" + numeros + @"]{1,2}){1}(|\s+)((" + operadores + @"){1}(|\s+)(([" + caracter + @"]{1}[" + caracter + @"" + numeros + @"]{0,24})|[" + numeros + @"]{1,11}|[" + numeros + @"]{1,11}\.[" + numeros + @"]{1,2}){1}(|\s+))*)((|\s+)(" + operadores + @"){1}(|\s+)(\()(|\s+)(([" + caracter + @"]{1}[" + caracter + @"" + numeros + @"]{0,24})|[" + numeros + @"]{1,11}|[" + numeros + @"]{1,11}\.[" + numeros + @"]{1,2}){1}(|\s+)((" + operadores + @"){1}(|\s+)(([" + caracter + @"]{1}[" + caracter + @"" + numeros + @"]{0,24})|[" + numeros + @"]{1,11}|[" + numeros + @"]{1,11}\.[" + numeros + @"]{1,2}){1}(|\s+))*(\))(((|\s+)(" + operadores + @"){1}(|\s+)(([" + caracter + @"]{1}[" + caracter + @"" + numeros + @"]{0,24})|[" + numeros + @"]{1,11}|[" + numeros + @"]{1,11}\.[" + numeros + @"]{1,2}){1}(|\s+)((" + operadores + @"){1}(|\s+)(([" + caracter + @"]{1}[" + numeros + @"]{0,24})|[" + numeros + @"]{1,11}|[" + numeros + @"]{1,11}\.[" + numeros + @"]{1,2}){1}(|\s+))*)*(((.){1})|(\s+(.){1})))|(\s+)|(((.){1})|(\s+(.){1}))|\s+)$");
                                str[i] = str[i].Replace("\n", "");
                                str[i] = str[i].Trim();
                                aux    = str;

                                if (ER.IsMatch(aux[i]) == true)
                                {
                                    aux = aux[i].Split(' ');
                                    if (autenticarTerminador(aux[aux.Length - 1]))
                                    {
                                        char a = Convert.ToChar(StaticTerminador.GetTerminador());
                                        aux = str[i].Split('+', '*', '/', '-', '=', a);
                                        for (int x = 0; x < aux.Length; x++)
                                        {
                                            aux[x] = aux[x].Trim();
                                            if (!verifica(aux[x]) && !autenticarVariavel(aux[x]) && aux[x] != "")
                                            {
                                                Item.status  = "ERRO";
                                                Item.linha   = Convert.ToString(i + 1);
                                                Item.tipo    = "Erro, variavel inválida";
                                                Item.escrita = str[i] + Environment.NewLine;
                                                item.Add(Item);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Item.status  = "ERRO";
                                        Item.linha   = Convert.ToString(i + 1);
                                        Item.tipo    = "Erro, terminador inválido";
                                        Item.escrita = str[i] + Environment.NewLine;
                                        item.Add(Item);
                                    }
                                }
                                else
                                {
                                    if (str.Length == i + 1)
                                    {
                                        Item.status  = "ERRO";
                                        Item.linha   = Convert.ToString(i + 1);
                                        Item.tipo    = "Erro de terminador 'end'";
                                        Item.escrita = str[i] + Environment.NewLine;
                                        item.Add(Item);
                                    }
                                    else
                                    {
                                        Item.status  = "ERRO";
                                        Item.linha   = Convert.ToString(i + 1);
                                        Item.tipo    = "Erro de sintáxe";
                                        Item.escrita = str[i] + Environment.NewLine;
                                        item.Add(Item);
                                    }
                                }
                            }
                        }
                        i++;
                        if (str.Length < i)
                        {
                            break;
                        }
                    }
                }
            }
            else
            {
                ItensDataSource Item = new ItensDataSource();
                Item.status  = "ERRO";
                Item.linha   = Convert.ToString(i);
                Item.tipo    = "Erro, precisa declarar o inializador das variaveis";
                Item.escrita = str[i - 1];
                item.Add(Item);
            }
            if (item.Count <= 0)
            {
                ItensDataSource Item = new ItensDataSource();
                Item.status = "Compilado";
                item.Add(Item);
                dgvResultado.DataSource = item;
            }
            else
            {
                dgvResultado.DataSource = item;
            }
            dataGridView1_MouseHover();
        }