You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When implementing a spec based on an RFC, I wrote a rule like text{0,998}, as the spec (RFC5322) dictates that lines cannot exceed 998 characters.
This dramatically increased compile times from negligible to many seconds. Changing this to text* and doing that validation step in other code eliminates the problem.
By varying the repeat count in the rule and running tests on an Mac Mini (M1 2020):
text{0,2048} = 36.04s
text{0,998} = 8.77s
text{0,512} = 2.94s
text{0,256} = 1.12s
text{0,128} = 0.62s
Beyond a certain point it's just a "stack overflow":
Is there a recommended way of dealing with length-limited fields when parsing? I might be doing it wrong, but I'd like to be able to do this at the parser level so it can just cut out and quit if fed egregiously out of spec data.
When implementing a spec based on an RFC, I wrote a rule like
text{0,998}
, as the spec (RFC5322) dictates that lines cannot exceed 998 characters.This dramatically increased compile times from negligible to many seconds. Changing this to
text*
and doing that validation step in other code eliminates the problem.By varying the repeat count in the rule and running tests on an Mac Mini (M1 2020):
text{0,2048}
= 36.04stext{0,998}
= 8.77stext{0,512}
= 2.94stext{0,256}
= 1.12stext{0,128}
= 0.62sBeyond a certain point it's just a "stack overflow":
text{0,3000}
=fatal runtime error: stack overflow
Is this a known limitation of the implementation of limited repeat?
Sample grammar:
I tried this in the snippet generator but I think it can't handle it because of this issue.
The text was updated successfully, but these errors were encountered: