Example #1
0
        private EbnfLexerRuleTerm VisitLexerRuleTermNode(IInternalTreeNode node)
        {
            EbnfLexerRuleFactor factor = null;
            EbnfLexerRuleTerm   term   = 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 (EbnfGrammar.LexerRuleFactor == symbolValue)
                {
                    factor = VisitLexerRuleFactorNode(internalNode);
                }
                if (EbnfGrammar.LexerRuleTerm == symbolValue)
                {
                    term = VisitLexerRuleTermNode(internalNode);
                }
            }

            if (term == null)
            {
                return(new EbnfLexerRuleTerm(factor));
            }

            return(new EbnfLexerRuleTermConcatenation(factor, term));
        }
Example #2
0
        INfa LexerRuleFactor(EbnfLexerRuleFactor factor)
        {
            switch (factor.NodeType)
            {
            case EbnfNodeType.EbnfLexerRuleFactorLiteral:
                return(LexerRuleFactorLiteral(factor as EbnfLexerRuleFactorLiteral));

            case EbnfNodeType.EbnfLexerRuleFactorRegex:
                return(LexerRuleFactorRegex(factor as EbnfLexerRuleFactorRegex));

            default:
                throw new InvalidOperationException(
                          $"Invalid EbnfLexerRuleFactor node type detected. Found {Enum.GetName(typeof(EbnfNodeType), factor.NodeType)}, expected EbnfLexerRuleFactorLiteral or EbnfLexerRuleFactorRegex");
            }
        }
Example #3
0
 public EbnfLexerRuleTermConcatenation(EbnfLexerRuleFactor factor, EbnfLexerRuleTerm term)
     : base(factor)
 {
     Term      = term;
     _hashCode = ComputeHashCode();
 }
Example #4
0
 public EbnfLexerRuleTerm(EbnfLexerRuleFactor factor)
 {
     Factor    = factor;
     _hashCode = ComputeHashCode();
 }
Example #5
0
 public EbnfLexerRuleTermConcatenation(EbnfLexerRuleFactor factor, EbnfLexerRuleTerm term)
     : base(factor)
 {
     Term = term;
     _hashCode = ComputeHashCode();
 }
Example #6
0
 public EbnfLexerRuleTerm(EbnfLexerRuleFactor factor)
 {
     Factor = factor;
     _hashCode = ComputeHashCode();
 }