コード例 #1
0
        private void MakeInitializes()
        {
            LabelTable = new List <LabelRow>();
            stack      = new Stack <OutputRow>();
            Polir      = new List <OutputRow>();
            PolirTable = new List <PolirRow>();
            LabelTable = new List <LabelRow>();
            rTable     = new List <string>();

            identificatorId            = LexemTable.First(x => x.Name == "identificator").Id;
            constantId                 = LexemTable.First(x => x.Name == "constant").Id;
            ariphmeticOperationIdFirst = LexemTable.First(x => x.Name == "=").Id;
            ariphmeticOperationIdLast  = LexemTable.First(x => x.Name == "/").Id;
            logicOperationIdFirst      = LexemTable.First(x => x.Name == ">").Id;
            logicOperationIdLast       = LexemTable.First(x => x.Name == "!=").Id;
            assignId           = LexemTable.First(x => x.Name == "=").Id;
            endLineId          = LexemTable.First(x => x.Name == "\n").Id;
            leftRoundQouteId   = LexemTable.First(x => x.Name == "(").Id;
            rightRoundQouteId  = LexemTable.First(x => x.Name == ")").Id;
            leftSquareQouteId  = LexemTable.First(x => x.Name == "[").Id;
            rightSquareQouteId = LexemTable.First(x => x.Name == "]").Id;
            andId   = LexemTable.First(x => x.Name == "and").Id;
            orId    = LexemTable.First(x => x.Name == "or").Id;
            notId   = LexemTable.First(x => x.Name == "not").Id;
            ifId    = LexemTable.First(x => x.Name == "if").Id;
            elseId  = LexemTable.First(x => x.Name == "else").Id;
            endifId = LexemTable.First(x => x.Name == "endif").Id;
            forId   = LexemTable.First(x => x.Name == "for").Id;
            toId    = LexemTable.First(x => x.Name == "to").Id;
            stepId  = LexemTable.First(x => x.Name == "step").Id;
            nextId  = LexemTable.First(x => x.Name == "next").Id;
            readId  = LexemTable.First(x => x.Name == "read").Id;
            writeId = LexemTable.First(x => x.Name == "write").Id;
        }
コード例 #2
0
ファイル: Analyser.cs プロジェクト: Xardas1111/Analyser_2
        static bool GetLexem(string name)
        {
            if (IsLexem(name))
            {
                int c = 0;
                for (int i = 0; i < lexem.Length; i++)
                {
                    if (name == lexem[i])
                    {
                        c = i + 1;
                    }
                }
                LexemTable.Add(new Lexem(++LexemNumber, NumberOfLines, name, c, 0));
                return(true);
            }

            if (IsId(name))
            {
                string type;
                if (IsInitialized(name, out type))
                {
                    int  code = 0;
                    bool key  = false;
                    for (int i = 0; i < IdTable.Count; i++)
                    {
                        if ((name == IdTable[i].IdName))
                        {
                            if (type != IdTable[i].IdType)
                            {
                                return(false);
                            }
                            key  = true;
                            code = IdTable[i].IdCode;
                            break;
                        }
                    }
                    if (!key)
                    {
                        IdTable.Add(new Id(name, ++IdCodeNumber, type));
                        code = IdCodeNumber;
                    }
                    LexemTable.Add(new Lexem(++LexemNumber, NumberOfLines, name, 46, code));
                }
                else
                {
                    return(false);
                }
                return(true);
            }

            if (IsConst(name))
            {
                bool key    = false;
                int  Number = 0;
                for (int i = 0; i < ConstCodeNumber; i++)
                {
                    if (ConstTable[i].ConstName == name)
                    {
                        key    = true;
                        Number = ConstTable[i].ConstCode;
                        break;
                    }
                }
                if (!key)
                {
                    ConstTable.Add(new Const(name, ++ConstCodeNumber));
                    Number = ConstCodeNumber;
                }
                LexemTable.Add(new Lexem(++LexemNumber, NumberOfLines, name, 47, Number));
                return(true);
            }
            return(false);
        }