Ejemplo n.º 1
0
        public LexicalAnalyzer()
        {
            TableToken.ClearTable();
            TableSymbol.ClearTable();

            TableSymbol.AddSymbol(new Symbol {
                Id = 1, Name = "algoritmo"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 2, Name = "var"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 3, Name = "inicio"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 4, Name = "fimalgoritmo"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 5, Name = "inteiro"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 6, Name = "real"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 7, Name = "caractere"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 8, Name = "logico"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 9, Name = "vetor"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 10, Name = "escreval"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 11, Name = "leia"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 12, Name = "para"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 13, Name = "de"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 14, Name = "ate"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 15, Name = "faca"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 16, Name = "fimpara"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 17, Name = "se"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 18, Name = "senao"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 19, Name = "fimse"
            });
            TableSymbol.AddSymbol(new Symbol {
                Id = 19, Name = "entao"
            });
        }
Ejemplo n.º 2
0
        public void AnalyzeCode(string code)
        {
            code = code.ToLower();
            StringBuilder str    = new StringBuilder();
            int           estate = 0;
            Symbol        symbol;
            bool          literal = false;

            for (int i = 0; i < code.Length; i++)
            {
                while (estate != -1)
                {
                    if (i >= code.Length)
                    {
                        break;
                    }

                    if (char.IsDigit(code[i]))
                    {
                        estate = TransitionTable[estate, GetKeywordColumn('d')];
                    }
                    else if (char.IsLetter(code[i]))
                    {
                        estate = TransitionTable[estate, GetKeywordColumn('l')];
                    }
                    else if (char.IsWhiteSpace(code[i]) && literal == false)
                    {
                        break;
                    }
                    else if (!char.IsLetterOrDigit(code[i]))
                    {
                        if (!char.IsWhiteSpace(code[i]))
                        {
                            estate = TransitionTable[estate, GetKeywordColumn(code[i])];
                            if (code[i] == '\"')
                            {
                                if (literal == false)
                                {
                                    literal = true;
                                }
                                else
                                {
                                    literal = false;
                                }
                            }
                        }
                        if (literal == false && code[i] != '\"')
                        {
                            break;
                        }
                    }
                    if (estate == -1)
                    {
                        break;
                    }

                    str.Append(code[i]);
                    i++;
                }
                double num;
                if (!string.IsNullOrWhiteSpace(str.ToString()))
                {
                    symbol = new Symbol()
                    {
                        Id = TableSymbol.Table.Count + 1, Name = str.ToString()
                    };
                    if (!TableSymbol.ContainsSymbol(symbol))
                    {
                        TableSymbol.AddSymbol(symbol);
                    }
                    if (reservedWords.Contains(symbol.Name))
                    {
                        TableToken.AddToken(new Token()
                        {
                            Id = TableSymbol.GetSymbolId(symbol), Name = symbol.Name, Type = TypeToken.PALAVRA_RESERVADA
                        });
                    }
                    else if (separators.Contains(symbol.Name))
                    {
                        TableToken.AddToken(new Token()
                        {
                            Id = TableSymbol.GetSymbolId(symbol), Name = symbol.Name, Type = TypeToken.SEPARADOR
                        });
                    }
                    else if (operators.Contains(symbol.Name))
                    {
                        TableToken.AddToken(new Token()
                        {
                            Id = TableSymbol.GetSymbolId(symbol), Name = symbol.Name, Type = TypeToken.OPERADOR
                        });
                    }
                    else if (symbol.Name.StartsWith("\\"))
                    {
                        TableToken.AddToken(new Token()
                        {
                            Id = TableSymbol.GetSymbolId(symbol), Name = symbol.Name, Type = TypeToken.COMENTARIO
                        });
                    }
                    else if (symbol.Name.StartsWith("\"") && symbol.Name.EndsWith("\""))
                    {
                        TableToken.AddToken(new Token()
                        {
                            Id = TableSymbol.GetSymbolId(symbol), Name = symbol.Name, Type = TypeToken.LITERAL
                        });
                    }
                    else if (double.TryParse(symbol.Name, out num))
                    {
                        TableToken.AddToken(new Token()
                        {
                            Id = TableSymbol.GetSymbolId(symbol), Name = symbol.Name, Type = TypeToken.NUMERO
                        });
                    }
                    else
                    {
                        TableToken.AddToken(new Token()
                        {
                            Id = TableSymbol.GetSymbolId(symbol), Name = symbol.Name, Type = TypeToken.IDENTIFICADOR
                        });
                    }
                }
                str    = new StringBuilder();
                estate = 0;
            }
        }