Yes, there O(1) parse tree nodes per character, you are correct.

Thanks again for the great feedback, and for taking the time to read the
paper!



On Fri, Jul 17, 2020, 8:22 PM Moss, Aaron <mo...@up.edu> wrote:

> You said: "Given that recursion in the grammar may result in the same
> clause matching multiple times at the same position (as long as the new
> match is longer), I think the worst case-bound on h is O(n), not O(1),
> which would make pika parsing’s worst-case time bound O(n^2)." Actually
> this is not the case, otherwise recursive descent parsers would also be
> O(n^2) if their grammar contained cycles. The reason is subtle: The size of
> the parse tree produced by any parser is linearly correlated with the
> length of the input, *regardless of the depth of the parse tree or the
> number of loops around a cycle in the grammar*, because at the limit,
> there would be one node in the parse tree per character, even if the parse
> tree degenerated into a singly-linked list. This is why in the paper, I
> always refer to recursive descent parsing as taking time "linear in the
> length of the input and the depth of the parse tree", because actually
> those two things represent the same thing. (i.e. you don't multiply the
> length of the input by the depth of the parse tree to obtain the final time
> complexity, you equate them to each other).
>
>
>
> Thanks for the correction, I appreciate the analysis technique. (Though I
> think technically the bound is O(1) parse tree nodes per character rather
> than 1 – if the parse tree was a complete binary tree there would be 2n-1
> parse tree nodes for an input of length n, and you could blow that up by a
> further (# nonterminals in grammar) with rules of the form A <- B, B <- C,
> …)
>
>
>
> Neat work again,
>
> Aaron
>
_______________________________________________
PEG mailing list
PEG@lists.csail.mit.edu
https://lists.csail.mit.edu/mailman/listinfo/peg

Reply via email to