示例#1
0
 public PdlDefinitionConcatenation(PdlBlock block, PdlDefinition definition)
     : base(block)
 {
     Assert.IsNotNull(definition, nameof(definition));
     Definition = definition;
     _hashCode  = ComputeHashCode();
 }
示例#2
0
        private PdlDefinition VisitDefinitionNode(IInternalTreeNode node)
        {
            PdlBlock      block      = null;
            PdlDefinition definition = null;

            for (int c = 0; c < node.Children.Count; c++)
            {
                var child = node.Children[c];
                switch (child.NodeType)
                {
                case TreeNodeType.Internal:
                    var internalNode = child as IInternalTreeNode;
                    var symbolValue  = internalNode.Symbol.Value;

                    if (PdlGrammar.Block == symbolValue)
                    {
                        block = VisitBlockNode(internalNode);
                    }
                    else if (PdlGrammar.Definition == symbolValue)
                    {
                        definition = VisitDefinitionNode(internalNode);
                    }
                    break;
                }
            }

            if (definition != null)
            {
                return(new PdlDefinitionConcatenation(block, definition));
            }

            return(new PdlDefinition(block));
        }
        void Block(PdlBlock block, GrammarModel grammarModel)
        {
            switch (block.NodeType)
            {
            case PdlNodeType.PdlBlockLexerRule:
                var blockLexerRule = block as PdlBlockLexerRule;
                grammarModel.LexerRules.Add(LexerRule(blockLexerRule));
                break;

            case PdlNodeType.PdlBlockRule:
                var blockRule = block as PdlBlockRule;
                foreach (var production in Rule(blockRule.Rule))
                {
                    grammarModel.Productions.Add(production);
                }
                break;

            case PdlNodeType.PdlBlockSetting:
                var blockSetting = block as PdlBlockSetting;

                switch (blockSetting.Setting.SettingIdentifier.Value.ToString())
                {
                case StartProductionSettingModel.SettingKey:
                    grammarModel.StartSetting = StartSetting(blockSetting);
                    break;

                case IgnoreSettingModel.SettingKey:
                    var ignoreSettings = IgnoreSettings(blockSetting);
                    for (var i = 0; i < ignoreSettings.Count; i++)
                    {
                        grammarModel.IgnoreSettings.Add(ignoreSettings[i]);
                    }
                    break;

                case TriviaSettingModel.SettingKey:
                    var triviaSettings = TriviaSettings(blockSetting);
                    for (var i = 0; i < triviaSettings.Count; i++)
                    {
                        grammarModel.TriviaSettings.Add(triviaSettings[i]);
                    }
                    break;
                }
                break;
            }
        }
示例#4
0
 public PdlDefinition(PdlBlock block)
 {
     Assert.IsNotNull(block, nameof(block));
     Block     = block;
     _hashCode = ComputeHashCode();
 }