private void BuildRuleExpressions(ParseTreeNode node) { var ruleName = node.FindTokenAndGetText(); var rule = rules.ContainsKey(ruleName) ? rules[ruleName] : rules[ruleName] = new AlternationExpression(); ParseTreeNode elements = null; foreach (var child in node.ChildNodes) if (child.Term.Name == "elements") elements = child; rule.Add( BuildAlternationExpression(elements.ChildNodes[0])); }
private void BuildRuleExpressions(ParseTreeNode node) { var ruleName = node.FindTokenAndGetText(); var rule = rules.ContainsKey(ruleName) ? rules[ruleName] : rules[ruleName] = new AlternationExpression(); ParseTreeNode elements = null; foreach (var child in node.ChildNodes) { if (child.Term.Name == "elements") { elements = child; } } rule.Add( BuildAlternationExpression(elements.ChildNodes[0])); }
private IExpression BuildAlternationExpression(ParseTreeNode node) { int count = node.ChildNodes.Count; if (count <= 0) { throw new BuilderException(node, @"Invalid alternation expression, no child nodes"); } else if (count == 1) { return BuildSubtractionExpression(node.ChildNodes[0]); } else { var alternation = new AlternationExpression(); foreach (var child in node.ChildNodes) alternation.Add(BuildSubtractionExpression(child)); return alternation; } }
private IExpression BuildAlternationExpression(ParseTreeNode node) { int count = node.ChildNodes.Count; if (count <= 0) { throw new BuilderException(node, @"Invalid alternation expression, no child nodes"); } else if (count == 1) { return(BuildSubtractionExpression(node.ChildNodes[0])); } else { var alternation = new AlternationExpression(); foreach (var child in node.ChildNodes) { alternation.Add(BuildSubtractionExpression(child)); } return(alternation); } }