private static void ReadStruct() { QuerySelectPDA query = new QuerySelectPDA(); query.Select( "select TABLE_NAME, COLUMN_NAME, COLUMN_FLAGS, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE from INFORMATION_SCHEMA.COLUMNS order by TABLE_NAME"); List <DataRows> rows = query.GetRows(); PDATable.Clear(); foreach (DataRows row in rows) { PDATable.Add(row); } // get constrains query = new QuerySelectPDA(); query.Select( "select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from INFORMATION_SCHEMA.TABLE_CONSTRAINTS order by TABLE_NAME"); rows = query.GetRows(); PDAConstr.Clear(); foreach (DataRows row in rows) { PDAConstr.Add(row); } // отображения PDAView.Clear(); PDAView.Add("INFORMATION_SCHEMA.COLUMNS"); PDAView.Add("INFORMATION_SCHEMA.INDEXES"); PDAView.Add("INFORMATION_SCHEMA.KEY_COLUMN_USAGE"); PDAView.Add("INFORMATION_SCHEMA.PROVIDER_TYPES"); PDAView.Add("INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS"); PDAView.Add("INFORMATION_SCHEMA.TABLE_CONSTRAINTS"); PDAView.Add("INFORMATION_SCHEMA.TABLES"); }
public override void Analyze(List <Lexeme> lexemes) { var currentAlpha = 1; foreach (var lexeme in lexemes) { try { var currentRules = PDATable.Where(x => x.Alpha == currentAlpha); var currentRule = currentRules.FirstOrDefault(x => (int)x.LexemeCode == lexeme.Code); while (currentRule == null) { currentAlpha = ParseFault(currentRules); currentRules = PDATable.Where(x => x.Alpha == currentAlpha); currentRule = currentRules.FirstOrDefault(x => (int)x.LexemeCode == lexeme.Code); } currentAlpha = ProcessRule(currentRule); usedRules.Add(new UsedRule { Rule = currentRule, StackState = GetStackState() }); } catch (Exception e) { Errors.Add($"{e.Message} on line {lexeme.Line}"); onReady(usedRules); return; } } if (currentAlpha != 26) { Errors.Add("Program must ends with }"); } onReady(usedRules); }
public void Analyze(tab_lex_exit[] lexemes) { var currentAlpha = 1; foreach (var lexeme in lexemes.Skip(1)) { var currentRules = PDATable.Where(x => x.Alpha == currentAlpha); var currentRule = currentRules.FirstOrDefault(x => x.LabelCode == lexeme.kod); while (currentRule == null) { currentAlpha = inComparisionTable[currentAlpha].Invoke(); currentRules = PDATable.Where(x => x.Alpha == currentAlpha); currentRule = currentRules.FirstOrDefault(x => x.LabelCode == lexeme.kod); } if (currentRule.Stack != null) { jumpStack.Push((int)currentRule.Stack); } currentAlpha = currentRule.Beta(); } }