private void FillLess(List <string> lexemesMap, Dictionary <string, string[]> firstMap) { for (int i = 1; i < PrecedenceTable.GetLength(0); i++) { for (int j = 1; j < PrecedenceTable.GetLength(1); j++) { if (PrecedenceTable[i, j] == "=" && firstMap.ContainsKey(PrecedenceTable[0, j])) { foreach (var lexeme in firstMap[PrecedenceTable[0, j]]) { var lexemePosition = lexemesMap.IndexOf(lexeme) + 1; if (string.IsNullOrEmpty(PrecedenceTable[i, lexemePosition]) || PrecedenceTable[i, lexemePosition] == "<") { PrecedenceTable[i, lexemePosition] = "<"; } else { throw new ArgumentException($"Конфлікт <. Відношення ({PrecedenceTable[i, 0]} i { PrecedenceTable[0, lexemePosition] }) уже існує {PrecedenceTable[i, lexemePosition]}"); } } } } } }
private void FillSharp() { var length = PrecedenceTable.GetLength(0) - 1; for (int i = 1; i < length; i++) { PrecedenceTable[length, i] = "<"; PrecedenceTable[i, length] = ">"; } }
private void FillEmpties() { for (int i = 0; i < PrecedenceTable.GetLength(0); i++) { for (int j = 0; j < PrecedenceTable.GetLength(1); j++) { if (string.IsNullOrEmpty(PrecedenceTable[i, j])) { PrecedenceTable[i, j] = "-"; } } } }
private void FillMore(List <string> lexemesMap, Dictionary <string, string[]> firstMap, Dictionary <string, string[]> lastMap) { for (int i = 1; i < PrecedenceTable.GetLength(0); i++) { for (int j = 1; j < PrecedenceTable.GetLength(1); j++) { if (PrecedenceTable[i, j] == "=" && lastMap.ContainsKey(PrecedenceTable[i, 0])) { if (IsNonTerminal(PrecedenceTable[0, j])) { foreach (var lexeme in lastMap[PrecedenceTable[i, 0]]) { foreach (var lexemeS in firstMap[PrecedenceTable[0, j]]) { var lexemePosition = lexemesMap.IndexOf(lexeme) + 1; var lexemeSPosition = lexemesMap.IndexOf(lexemeS) + 1; if (string.IsNullOrEmpty(PrecedenceTable[lexemePosition, lexemeSPosition]) || PrecedenceTable[lexemePosition, lexemeSPosition] == ">") { PrecedenceTable[lexemePosition, lexemeSPosition] = ">"; } else { throw new ArgumentException($"Конфлікт >. Відношення ({PrecedenceTable[lexemePosition, 0]} i {PrecedenceTable[0, lexemeSPosition]}) уже існує {PrecedenceTable[lexemePosition, j]}"); } } } } foreach (var lexeme in lastMap[PrecedenceTable[i, 0]]) { var lexemePosition = lexemesMap.IndexOf(lexeme) + 1; if (string.IsNullOrEmpty(PrecedenceTable[lexemePosition, j]) || ">".Equals(PrecedenceTable[lexemePosition, j])) { PrecedenceTable[lexemePosition, j] = ">"; } else { throw new ArgumentException($"Конфлікт >. Відношення ({PrecedenceTable[lexemePosition, 0]} i {PrecedenceTable[0, j]}) уже існує {PrecedenceTable[lexemePosition, j]}"); } } } } } }