ohmjs/ohm

maybe an infinite loop?

guitarvydas opened this issue · 1 comments

https://github.com/guitarvydas/pt22.git

I'm developing a new grammar. I'm sure that there is a problem in my grammar.

Ohm-Editor gives me a red "parse fail" and appears to have gone into an infinite loop.

I've snapshotted this while it is still fresh in my mind.

See ISSUE1.md for the grammar and the test input. Branch "issue1".

Hi Paul,

Here's (part of) your grammar:

comment =
  | "{" dontcareChar* "}" -- nested
  | dontcareChar*         -- base
  
dontcareChar = ~"}" ~"{" any
space += comment

Note that your comment rule is nullable, i.e., it can succeed w/o consuming any input. Normally this isn't a problem, but by making it a kind of space (via space += comment) you created an infinite loop. This is because Ohm's syntactic rules (like Main and Def, in your grammar) implicitly apply the spaces rule, which is defined as space*.

The fix is to change comment so that it only succeeds if it actually consumes a comment. I would do that by changing dontcareChar* to dontcareChar+.

Hope that helps!

Best,
Alex