public void StartRule(RuleType ruleType) { if (ruleType == RuleType.Separator) { ruleType = RuleType.Text; } _node = new CucumberExpressionAstNode(ruleType, _node); }
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); }
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); }