コード例 #1
0
        private void AddRule(ProductionRule rule)
        {
            //ASSUMPTION: LHS of first rule in grammar file is root symbol
            if (_rules.Count == 0)
            {
                _rootSymbol = rule.LHS;

                _rhsIndex.Add(_rootSymbol.Text, new List <ProductionRule>());
            }

            _rules.Add(rule);

            AddToLhsIndex(rule);

            AddToRhsIndex(rule);

            if (rule.RHS.Length == 1 && rule.RHS[0].Type == SymbolType.Terminal)
            {
                AddToTerminalIndex(rule);
            }

            if (rule.RHS[0].Type == SymbolType.Nonterminal)
            {
                AddToNonterminalIndex(rule);
            }
        }
コード例 #2
0
ファイル: Grammar.cs プロジェクト: bixiu/DEC0DE-forensics
        private void AddToLhsIndex(ProductionRule rule)
        {
            if (!_lhsIndex.ContainsKey(rule.LHS.Text))
                _lhsIndex.Add(rule.LHS.Text, new List<Symbol[]>());

            _lhsIndex[rule.LHS.Text].Add(rule.RHS);
        }
コード例 #3
0
        private void AddToLhsIndex(ProductionRule rule)
        {
            if (!_lhsIndex.ContainsKey(rule.LHS.Text))
            {
                _lhsIndex.Add(rule.LHS.Text, new List <Symbol[]>());
            }

            _lhsIndex[rule.LHS.Text].Add(rule.RHS);
        }
コード例 #4
0
        private void AddToNonterminalIndex(ProductionRule rule)
        {
            if (!_nonterminalIndex.ContainsKey(rule.RHS[0].Text))
            {
                _nonterminalIndex.Add(rule.RHS[0].Text, new List <ProductionRule>());
            }

            _nonterminalIndex[rule.RHS[0].Text].Add(rule);
        }
コード例 #5
0
        private void AddToRhsIndex(ProductionRule rule)
        {
            if (!_rhsIndex.ContainsKey(rule.RHS[0].Text))
            {
                _rhsIndex.Add(rule.RHS[0].Text, new List <ProductionRule>());
            }

            _rhsIndex[rule.RHS[0].Text].Add(rule);
        }
コード例 #6
0
        private void ParseRule(string line)
        {
            ProductionRule rule = new ProductionRule(line);

            // Add the inverse rule for any binary rule
            if (rule.RHS.Length > 1)
            {
                ProductionRule ruleInverse = new ProductionRule(line);
                ruleInverse.FlipRHS();

                rule.ScaleProbability(RULE_SCALE);
                ruleInverse.ScaleProbability(INVERSE_RULE_SCALE);

                AddRule(ruleInverse);
            }

            AddRule(rule);
        }
コード例 #7
0
ファイル: Grammar.cs プロジェクト: bixiu/DEC0DE-forensics
        private void AddRule(ProductionRule rule)
        {
            //ASSUMPTION: LHS of first rule in grammar file is root symbol
            if (_rules.Count == 0)
            {
                _rootSymbol = rule.LHS;

                _rhsIndex.Add(_rootSymbol.Text, new List<ProductionRule>());
            }

            _rules.Add(rule);

            AddToLhsIndex(rule);

            AddToRhsIndex(rule);

            if (rule.RHS.Length == 1 && rule.RHS[0].Type == SymbolType.Terminal)
                AddToTerminalIndex(rule);

            if (rule.RHS[0].Type == SymbolType.Nonterminal)
                AddToNonterminalIndex(rule);
        }
コード例 #8
0
ファイル: Grammar.cs プロジェクト: bixiu/DEC0DE-forensics
        private void AddToNonterminalIndex(ProductionRule rule)
        {
            if (!_nonterminalIndex.ContainsKey(rule.RHS[0].Text))
                _nonterminalIndex.Add(rule.RHS[0].Text, new List<ProductionRule>());

            _nonterminalIndex[rule.RHS[0].Text].Add(rule);
        }
コード例 #9
0
ファイル: Grammar.cs プロジェクト: bixiu/DEC0DE-forensics
        private void ParseRule(string line)
        {
            ProductionRule rule = new ProductionRule(line);

            // Add the inverse rule for any binary rule
            if (rule.RHS.Length > 1)
            {
                ProductionRule ruleInverse = new ProductionRule(line);
                ruleInverse.FlipRHS();

                rule.ScaleProbability(RULE_SCALE);
                ruleInverse.ScaleProbability(INVERSE_RULE_SCALE);

                AddRule(ruleInverse);
            }

            AddRule(rule);
        }
コード例 #10
0
ファイル: Grammar.cs プロジェクト: bixiu/DEC0DE-forensics
        private void AddToRhsIndex(ProductionRule rule)
        {
            if (!_rhsIndex.ContainsKey(rule.RHS[0].Text))
                _rhsIndex.Add(rule.RHS[0].Text, new List<ProductionRule>());

            _rhsIndex[rule.RHS[0].Text].Add(rule);
        }