public PrecedenceAltGroup(Source source, Precedence precedence, List <IParseable> nodes) { this.nodes = nodes; this.precedence = precedence; if (nodes.Count == 1) { parseGraph = nodes[0]; } else { parseGraph = new LongestAlt(source, nodes); } leftRecursiveNodes = new List <ParseGraphNode>(); foreach (IParseable node in (IEnumerable <IParseable>)nodes) { PatternNode patternNode = node as PatternNode; if (patternNode != null) { ConcretePattern pattern = patternNode.Pattern as ConcretePattern; if (pattern != null) { if (pattern.RecursionBehaviour == RecursionBehaviour.LeftRecursive) { leftRecursiveNodes.Add(new PatternNode(source, pattern, true)); } } } } if (leftRecursiveNodes.Count == 0) { leftRecursiveParseGraph = null; } else if (leftRecursiveNodes.Count == 1) { leftRecursiveParseGraph = leftRecursiveNodes[0]; } else { leftRecursiveParseGraph = new AltNode(source, leftRecursiveNodes, true); } }
public new static void SetUp(Module module, Grammar grammar) { if (pattern == null) { string expression = "o((recursive false) s(l(label 0) ':' l(body 1)))"; Pattern[] patterns = { Name.pattern, PatternExpression.pattern }; ParseGraphNode parseGraph = BootstrapParser.Parse(expression, patterns); pattern = new ConcretePattern(null, "LabelPatternExpression", parseGraph); pattern.SetType(typeof(LabelPatternExpression)); PatternExpression.pattern.AddAltPattern(pattern); } module.SetName("LabelPatternExpression", typeof(LabelPatternExpression)); grammar.PatternDefined(pattern); }
public ParserMemoryKey(ConcretePattern pattern, int position) { this.pattern = pattern; this.position = position; }