Example #1
0
        private IEnumerable <ProductionModel> Expression(IEbnfExpression expression, ProductionModel currentProduction)
        {
            foreach (var production in Term(expression.Term, currentProduction))
            {
                yield return(production);
            }

            if (expression is EbnfExpressionAlteration expressionAlteration)
            {
                currentProduction.Lambda();

                foreach (var production in Expression(expressionAlteration.Expression, currentProduction))
                {
                    yield return(production);
                }
            }
        }
Example #2
0
        private EbnfBlockRule VisitRuleNode(IInternalTreeNode node)
        {
            EbnfQualifiedIdentifier qualifiedEbnfQualifiedIdentifier = null;
            IEbnfExpression         expression = null;

            foreach (var internalNode in node.Children.OfType <IInternalTreeNode>())
            {
                if (internalNode.Is(EbnfGrammar.QualifiedIdentifier))
                {
                    qualifiedEbnfQualifiedIdentifier = VisitQualifiedIdentifierNode(internalNode);
                }
                else if (internalNode.Is(EbnfGrammar.Expression))
                {
                    expression = VisitExpressionNode(internalNode);
                }
            }

            return(new EbnfBlockRule(new EbnfRule(qualifiedEbnfQualifiedIdentifier, expression)));
        }
Example #3
0
        private IEbnfExpression VisitExpressionNode(IInternalTreeNode node)
        {
            IEbnfTerm       term       = null;
            IEbnfExpression expression = null;

            foreach (var internalNode in node.Children.OfType <IInternalTreeNode>())
            {
                if (internalNode.Is(EbnfGrammar.Term))
                {
                    term = VisitTermNode(internalNode);
                }
                else if (internalNode.Is(EbnfGrammar.Expression))
                {
                    expression = VisitExpressionNode(internalNode);
                }
            }

            if (expression == null)
            {
                return(new EbnfExpressionSimple(term));
            }

            return(new EbnfExpressionAlteration(term, expression));
        }
Example #4
0
 public EbnfRule(EbnfQualifiedIdentifier identifier, IEbnfExpression expression)
 {
     Identifier = identifier;
     Expression = expression;
 }
Example #5
0
 public EbnfFactorRepetition(IEbnfExpression expression)
 {
     Expression = expression;
 }
Example #6
0
 public EbnfFactorGrouping(IEbnfExpression expression)
 {
     Expression = expression;
 }
Example #7
0
 public EbnfFactorOptional(IEbnfExpression expression)
 {
     Expression = expression;
 }
Example #8
0
 public EbnfExpressionAlteration(IEbnfTerm term, IEbnfExpression expression)
 {
     Term       = term;
     Expression = expression;
 }