Exemplo n.º 1
0
        private void ProcessExistID(string value)
        {
            // Find in declarations
            int wasDeclaratedIndex = -1;

            for (int j = 0; j < IDs.Count; j++)
            {
                if (value == IDs[j])
                {
                    wasDeclaratedIndex = j;
                    break;
                }
            }
            // It hasn't declarated.
            if (wasDeclaratedIndex == -1)
            {
                Out.Log(Out.State.LogInfo, "");
                LexemException error2 = new LexemException((line + 1), "Variable " + value + " hasn't declarated");
                throw error2;
            }
            // Fuuuh. I've find it.
            else
            {
                Lexems.Add(new Lexem(line, value, dict.Count - 2));
                Out.Log(Out.State.LogInfo, dict.Count - 1 + "\t" + (wasDeclaratedIndex + 1));
            }
        }
Exemplo n.º 2
0
        // Analyzing //
        private void AnalyzeConst(string value)
        {
            // Tabel base //
            PrintBaseTableLine(value);
            // Check earlier definition //
            int wasDeclaratedIndex = -1;

            for (int j = 0; j < CONSTs.Count; j++)
            {
                if (value == CONSTs[j])
                {
                    wasDeclaratedIndex = j;
                    break;
                }
            }
            // It hasn't declarated.
            if (wasDeclaratedIndex == -1)
            {
                CONSTs.Add(value);
                Lexems.Add(new Lexem(line, value, dict.Count - 1));
                Out.Log(Out.State.LogInfo, dict.Count + "\t\t" + CONSTs.Count);
            }
            else
            {
                Out.Log(Out.State.LogInfo, dict.Count + "\t\t" + (wasDeclaratedIndex + 1));
                Lexems.Add(new Lexem(line, value, dict.Count - 1));
            }
        }
Exemplo n.º 3
0
        private void InsertNewID(string value)
        {
            int wasDeclaratedIndex = -1;

            for (int j = 0; j < IDs.Count; j++)
            {
                if (value == IDs[j])
                {
                    wasDeclaratedIndex = j;
                    break;
                }
            }
            // It hasn't declarated.
            if (wasDeclaratedIndex != -1)
            {
                Out.Log(Out.State.LogInfo, "");
                throw new LexemException((line + 1), "Variable " + value + " has declarated earlier");
            }
            else
            {
                // Declaration zone //
                IDs.Add(value);
                Lexems.Add(new Lexem(line, value, dict.Count - 2));
                Out.Log(Out.State.LogInfo, dict.Count - 1 + "\t" + IDs.Count);
            }
        }
Exemplo n.º 4
0
 public static void CheckSyntax(Lexems lexemcheck)
 {
     if (currentLexem != lexemcheck)
     {
         Error(" ожидолос " + lexemcheck);
     }
     // else
     //  ParseNextLexem();
 }
Exemplo n.º 5
0
        public static void AddKeyWord(string Keyword, Lexems lexem)
        {
            Keyword kw = new Keyword
            {
                word = Keyword,
                lex  = lexem
            };

            Keywords.Add(kw);
        }
Exemplo n.º 6
0
        // override object.Equals
        public override bool Equals(object obj)
        {
            if (obj == null || GetType() != obj.GetType())
            {
                return(false);
            }

            TokenDto t = (TokenDto)obj;

            return((Orth == t.Orth) && (NoSpaceBefore == t.NoSpaceBefore) && (Lexems.All(t.Lexems.Contains) && Lexems.Count == t.Lexems.Count));
        }
Exemplo n.º 7
0
        public static void ParseNumber()
        {
            string Num = "";

            do
            {
                Num += (char)Reader.CurSymbol;
                Reader.ReadNextSymbol();
            } while (char.IsDigit((char)Reader.CurSymbol));
            currentName  = Num;
            currentLexem = Lexems.Number;
        }
Exemplo n.º 8
0
        public static void ParseID()
        {
            string ID = "";

            do
            {
                ID += (char)Reader.CurSymbol;
                Reader.ReadNextSymbol();
            }while (char.IsLetter((char)Reader.CurSymbol));
            currentName  = ID;
            currentLexem = GetKeyWord(ID);
        }
Exemplo n.º 9
0
 public static void CheckLexems(Lexems ExpectedLexem)
 {
     ParseNextLexem();
     if (currentLexem != ExpectedLexem)
     {
         Error("ожидалось " + ExpectedLexem.ToString());
     }
     else
     {
         ParseNextLexem();
     }
 }
Exemplo n.º 10
0
        public void ReadXml(XmlReader reader)
        {
            reader.MoveToContent();

            //orth tag
            if (reader.Read() && reader.IsStartElement())
            {
                Orth = reader.ReadElementContentAsString();
            }

            //if string is parsed first time
            if (_chunkListMetaData != null)
            {
                _chunkListMetaData.NumberOfTokens += 1;
                //if word isn't in lookUpDictionary
                if (_chunkListMetaData.WordsLookupDictionary.ContainsKey(Orth))
                {
                    _chunkListMetaData.WordsLookupDictionary[Orth].Add(_chunkListMetaData.NumberOfChunks);
                }
                else
                {
                    var list = new List <int>();
                    list.Add(_chunkListMetaData.NumberOfChunks);
                    _chunkListMetaData.WordsLookupDictionary.Add(Orth, list);
                }
            }

            //lex tags
            while (reader.IsStartElement())
            {
                LexemDto lex = new LexemDto();
                lex.ReadXml(reader.ReadSubtree());
                Lexems.Add(lex);

                if (reader.NodeType == XmlNodeType.EndElement || reader.NodeType == XmlNodeType.Whitespace)
                {
                    reader.Skip();
                }
            }
        }
Exemplo n.º 11
0
        static void Main()
        {
            Lexems.LexTokList lexMas = new Lexems.LexTokList();

            lexMas = Lexems.GetLexem();

            lexMas.Display();
            Console.WriteLine();
            Parser p = new Parser(lexMas);

            try
            {
                p.ClassDecl();
                Console.WriteLine("Compilation complete success.");
            }
            catch (ParseException e)
            {
                Console.WriteLine(e.Message + " CountLine: " + e.Value);
            }

            Console.ReadKey();
        }
Exemplo n.º 12
0
        Lexem ReservedLexem(ref int row, string substring)
        {
            if (substring == Environment.NewLine)
            {
                Lexems.Add(new Lexem(row, "¶", 3));
                row++;
            }
            else
            {
                int code = Check.IsReservedLexem(substring);
                if (code != -1)
                {
                    Lexems.Add(new Lexem(row, substring, code));
                }
                else
                {
                    throw new Exception($"Oops, I can`t understand constant '{substring}' in {row} row");
                }
            }

            return(null);
        }
Exemplo n.º 13
0
        public static void ParseNextLexem()
        {
            while (Reader.CurSymbol == ' ')
            {
                Reader.ReadNextSymbol();
            }
            if (char.IsLetter((char)Reader.CurSymbol))
            {
                ParseID();
            }
            else if (char.IsDigit((char)Reader.CurSymbol))
            {
                ParseNumber();
            }
            else if (Reader.CurSymbol == '\r' || Reader.CurSymbol == '\n')
            {
                Reader.ReadNextSymbol();
                ParseNextLexem();
            }
            else if (Reader.CurSymbol == '<')
            {
                //currentLexem = Lexems.Less;
                Reader.ReadNextSymbol();
                if (Reader.CurSymbol == '=')
                {
                    currentLexem = Lexems.LessOrEqual;
                    currentName  = "<=";
                    Reader.ReadNextSymbol();
                    return;
                }

                else
                {
                    currentName = "<"; currentLexem = Lexems.Less;
                    Reader.ReadNextSymbol();
                }
            }
            else if (Reader.CurSymbol == '+')
            {
                currentLexem = Lexems.Plus;
                currentName  = "+";
                Reader.ReadNextSymbol();
            }
            else if (Reader.CurSymbol == '-')
            {
                currentLexem = Lexems.Minus;
                currentName  = "-";
                Reader.ReadNextSymbol();
            }
            else if (Reader.CurSymbol == '*')
            {
                currentLexem = Lexems.Multiplication;
                currentName  = "*";
                Reader.ReadNextSymbol();
            }
            else if (Reader.CurSymbol == '/')
            {
                currentLexem = Lexems.Division;
                currentName  = "/";
                Reader.ReadNextSymbol();
            }
            else if (Reader.CurSymbol == '>')
            {
                Reader.ReadNextSymbol();
                if (Reader.CurSymbol == '=')
                {
                    currentLexem = Lexems.GreaterOrEqual;
                    currentName  = ">=";
                    Reader.ReadNextSymbol();
                    return;
                }
                currentLexem = Lexems.Greater;
                currentName  = ">";
            }
            else if (Reader.CurSymbol == '(')
            {
                currentLexem = Lexems.LesfBracket;
                currentName  = "(";
                Reader.ReadNextSymbol();
            }
            else if (Reader.CurSymbol == ')')
            {
                currentLexem = Lexems.RightBracket;
                currentName  = ")";
                Reader.ReadNextSymbol();
            }
            else if (Reader.CurSymbol == ',')
            {
                currentLexem = Lexems.Comma;
                currentName  = ",";
                Reader.ReadNextSymbol();
            }
            else if (Reader.CurSymbol == ';')
            {
                currentLexem = Lexems.EndOfOPeration;
                currentName  = ";";
                Reader.ReadNextSymbol();
            }
            else if (Reader.CurSymbol == '&')
            {
                currentLexem = Lexems.Conjuction;
                currentName  = "&";
                Reader.ReadNextSymbol();
            }
            else if (Reader.CurSymbol == '|')
            {
                currentLexem = Lexems.Disjunction;
                currentName  = "|";
                Reader.ReadNextSymbol();
            }
            else if (Reader.CurSymbol == '!')
            {
                currentLexem = Lexems.ExcMark;
                currentName  = "!";
                Reader.ReadNextSymbol();
                if (Reader.CurSymbol == '=')
                {
                    currentLexem = Lexems.NotEqual;
                    currentName  = "!" + (char)Reader.CurSymbol;
                    Reader.ReadNextSymbol();
                }
            }
            else if (Reader.CurSymbol == 0)
            {
                currentLexem = Lexems.EndOfF;
            }
            else if (Reader.CurSymbol == ':')
            {
                Reader.ReadNextSymbol();
                if (Reader.CurSymbol == '=')
                {
                    currentLexem = Lexems.Assign;
                    currentName  = ":" + (char)Reader.CurSymbol;
                    Reader.ReadNextSymbol();
                }
            }
            else if (Reader.CurSymbol == '=')
            {
                Reader.ReadNextSymbol();
                if (Reader.CurSymbol == '=')
                {
                    currentName  = "=" + (char)Reader.CurSymbol;
                    currentLexem = Lexems.Equal;
                    Reader.ReadNextSymbol();
                }
                else
                {
                    currentLexem = Lexems.Assign;
                    currentName  = "" + (char)Reader.CurSymbol;
                }
            }
            else
            {
                throw new Exception("Unknown Symbol " + (char)Reader.CurSymbol);
            }
        }
Exemplo n.º 14
0
        string isBinaryOperand(Lexems.Lexema l)
        {
            if (l == null) return null;
            switch (l.GetType().Name)
            {
                case "BinOperAnd":
                    return "and";
                case "BinOperOr":
                    return "or";
                case "BinOperXor":
                    return "xor";
                default:
                    return null;

            }
        }