Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 public ParserMemoryKey(ConcretePattern pattern, int position)
 {
     this.pattern  = pattern;
     this.position = position;
 }