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; }
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); }