Exemple #1
0
        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);
        }
Exemple #3
0
        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();
            }
        }