コード例 #1
0
 public PdlQualifiedIdentifierConcatenation(
     string identifier,
     PdlQualifiedIdentifier qualifiedIdentifier)
     : this(identifier.AsCapture(),
            qualifiedIdentifier)
 {
 }
コード例 #2
0
        private PdlBlockRule VisitRuleNode(IInternalTreeNode node)
        {
            PdlQualifiedIdentifier qualifiedIdentifier = null;
            PdlExpression          expression          = 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.QualifiedIdentifier == symbolValue)
                    {
                        qualifiedIdentifier = VisitQualifiedIdentifierNode(internalNode);
                    }
                    else if (PdlGrammar.Expression == symbolValue)
                    {
                        expression = VisitExpressionNode(internalNode);
                    }
                    break;

                case TreeNodeType.Token:
                    break;
                }
            }
            return(new PdlBlockRule(
                       new PdlRule(qualifiedIdentifier, expression)));
        }
コード例 #3
0
        private PdlBlockLexerRule VisitLexerRuleNode(IInternalTreeNode node)
        {
            PdlQualifiedIdentifier qualifiedIdentifier = null;
            PdlLexerRuleExpression expression          = null;

            for (int c = 0; c < node.Children.Count; c++)
            {
                var child = node.Children[c];
                if (child.NodeType != TreeNodeType.Internal)
                {
                    continue;
                }
                var internalNode = child as IInternalTreeNode;
                var symbolValue  = internalNode.Symbol.Value;
                if (PdlGrammar.QualifiedIdentifier == symbolValue)
                {
                    qualifiedIdentifier = VisitQualifiedIdentifierNode(internalNode);
                }
                else if (PdlGrammar.LexerRuleExpression == symbolValue)
                {
                    expression = VisitLexerRuleExpressionNode(internalNode);
                }
            }
            return(new PdlBlockLexerRule(
                       new PdlLexerRule(qualifiedIdentifier, expression)));
        }
コード例 #4
0
        private PdlBlockSetting VisitSettingNode(IInternalTreeNode node)
        {
            PdlSettingIdentifier   settingIdentifier   = null;
            PdlQualifiedIdentifier qualifiedIdentifier = null;

            for (int c = 0; c < node.Children.Count; c++)
            {
                var child = node.Children[c];
                switch (child.NodeType)
                {
                case TreeNodeType.Token:
                    var tokenNode = child as ITokenTreeNode;
                    var token     = tokenNode.Token;
                    if (token.TokenType.Equals(PdlGrammar.TokenTypes.SettingIdentifier))
                    {
                        settingIdentifier = new PdlSettingIdentifier(token.Capture);
                    }
                    break;

                case TreeNodeType.Internal:
                    var internalNode = child as IInternalTreeNode;
                    var symbolValue  = internalNode.Symbol.Value;
                    if (PdlGrammar.QualifiedIdentifier == symbolValue)
                    {
                        qualifiedIdentifier = VisitQualifiedIdentifierNode(internalNode);
                    }
                    break;
                }
            }
            return(new PdlBlockSetting(
                       new PdlSetting(settingIdentifier, qualifiedIdentifier)));
        }
コード例 #5
0
 public PdlQualifiedIdentifierConcatenation(
     ICapture <char> identifier,
     PdlQualifiedIdentifier qualifiedIdentifier)
     : base(identifier)
 {
     QualifiedIdentifier = qualifiedIdentifier;
     _hashCode           = ComputeHashCode();
 }
コード例 #6
0
        private PdlQualifiedIdentifier VisitQualifiedIdentifierNode(IInternalTreeNode node)
        {
            PdlQualifiedIdentifier repetitionIdentifier = null;
            ICapture <char>        identifier           = 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.QualifiedIdentifier == symbolValue)
                    {
                        repetitionIdentifier = VisitQualifiedIdentifierNode(internalNode);
                    }
                    break;

                case TreeNodeType.Token:
                    var tokenNode = child as ITokenTreeNode;
                    var token     = tokenNode.Token;
                    if (token.TokenType.Equals(PdlGrammar.TokenTypes.Identifier))
                    {
                        identifier = token.Capture;
                    }
                    break;
                }
            }
            if (repetitionIdentifier is null)
            {
                return(new PdlQualifiedIdentifier(identifier));
            }

            return(new PdlQualifiedIdentifierConcatenation(identifier, repetitionIdentifier));
        }
コード例 #7
0
 public PdlFactorIdentifier(PdlQualifiedIdentifier qualifiedIdentifier)
 {
     QualifiedIdentifier = qualifiedIdentifier;
     _hashCode           = ComputeHashCode();
 }
コード例 #8
0
 public PdlRule(PdlQualifiedIdentifier qualifiedIdentifier, PdlExpression expression)
 {
     QualifiedIdentifier = qualifiedIdentifier;
     Expression          = expression;
     _hashCode           = ComputeHashCode();
 }
コード例 #9
0
ファイル: PdlSetting.cs プロジェクト: patrickhuber/Pliant
 public PdlSetting(PdlSettingIdentifier settingIdentifier, PdlQualifiedIdentifier qualifiedIdentifier)
 {
     SettingIdentifier   = settingIdentifier;
     QualifiedIdentifier = qualifiedIdentifier;
     _hashCode           = ComputeHashCode();
 }
コード例 #10
0
        private static FullyQualifiedName GetFullyQualifiedNameFromQualifiedIdentifier(PdlQualifiedIdentifier qualifiedIdentifier)
        {
            var @namespace = new StringBuilder();
            var currentQualifiedIdentifier = qualifiedIdentifier;
            var index = 0;

            while (currentQualifiedIdentifier.NodeType == PdlNodeType.PdlQualifiedIdentifierConcatenation)
            {
                if (index > 0)
                {
                    @namespace.Append(".");
                }
                @namespace.Append(currentQualifiedIdentifier.Identifier);
                currentQualifiedIdentifier = (currentQualifiedIdentifier as PdlQualifiedIdentifierConcatenation).QualifiedIdentifier;
                index++;
            }
            return(new FullyQualifiedName(@namespace.ToString(), currentQualifiedIdentifier.Identifier.ToString()));
        }