Ejemplo n.º 1
0
        public void StartRule(RuleType ruleType)
        {
            if (ruleType == RuleType.Separator)
            {
                ruleType = RuleType.Text;
            }

            _node = new CucumberExpressionAstNode(ruleType, _node);
        }
Ejemplo n.º 2
0
        private void AddToParent(CucumberExpressionAstNode node, CucumberExpressionAstNode parentNode)
        {
            if (node.RuleType == RuleType.Text && parentNode.SubNodes.LastOrDefault()?.RuleType == RuleType.Text)
            {
                parentNode.SubNodes.Last().Tokens.AddRange(node.Tokens);
                return;
            }

            parentNode.SubNodes.Add(node);
        }
Ejemplo n.º 3
0
        public void EndRule(RuleType ruleType)
        {
            if (ruleType == RuleType.CucumberExpression)
            {
                return; // keep last node in _node
            }
            if (ruleType == RuleType.Alternation && _node.SubNodes.Count == 1)
            {
                foreach (var subNode in _node.SubNodes.Single().SubNodes)
                {
                    AddToParent(subNode, _node.ParentNode);
                }
            }
            else
            {
                AddToParent(_node, _node.ParentNode);
            }

            _node = _node.ParentNode;
        }
 public CucumberExpression(CucumberExpressionAstNode node) : base(RuleType.CucumberExpression, null)
 {
     SubNodes.AddRange(node.SubNodes);
 }