Ejemplo n.º 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);
                }
            }
        }
Ejemplo n.º 2
0
        IEnumerable <ProductionModel> Optional(EbnfFactorOptional optional, ProductionModel currentProduction)
        {
            var name               = optional.ToString();
            var nonTerminal        = new NonTerminal(name);
            var optionalProduction = new ProductionModel(nonTerminal);

            currentProduction.AddWithAnd(new NonTerminalModel(nonTerminal));

            var expression = optional.Expression;

            foreach (var production in Expression(expression, optionalProduction))
            {
                yield return(production);
            }

            optionalProduction.Lambda();
            yield return(optionalProduction);
        }
Ejemplo n.º 3
0
        IEnumerable <ProductionModel> Repetition(EbnfFactorRepetition repetition, ProductionModel currentProduction)
        {
            var name                 = repetition.ToString();
            var nonTerminal          = new NonTerminal(name);
            var repetitionProduction = new ProductionModel(nonTerminal);

            currentProduction.AddWithAnd(new NonTerminalModel(nonTerminal));

            var expression = repetition.Expression;

            foreach (var production in Expression(expression, repetitionProduction))
            {
                yield return(production);
            }

            repetitionProduction.AddWithAnd(new NonTerminalModel(nonTerminal));
            repetitionProduction.Lambda();

            yield return(repetitionProduction);
        }
Ejemplo n.º 4
0
        IEnumerable <ProductionModel> Expression(EbnfExpression expression, ProductionModel currentProduction)
        {
            foreach (var production in Term(expression.Term, currentProduction))
            {
                yield return(production);
            }

            if (expression.NodeType != EbnfNodeType.EbnfExpressionAlteration)
            {
                yield break;
            }

            var expressionAlteration = expression as EbnfExpressionAlteration;

            currentProduction.Lambda();

            foreach (var production in Expression(expressionAlteration.Expression, currentProduction))
            {
                yield return(production);
            }
        }