Bugzilla – Bug 17435
WebIDL: Bug in definition of whitespace terminal?
Last modified: 2012-06-22 06:31:58 UTC
In the definition of the terminals in section "A. IDL grammar" you'll find the following definition of the whitespace terminal:
whitespace = [\t\n\r ]+|[\t\n\r ]*((//.*|/\*.*?\*/)[\t\n\r ]*)+
Let's look at its part specific to block comments ("/* ... */"):
What does this regular expression look for (see the referenced document http://search.cpan.org/dist/perl/pod/perlre.pod for details):
a string '/*'
followed by 0 or more "any character (except newline)", not greedily (the latter one follows by using '*?' instead of '*')
followed by the string '*/'.
What consequence does this have? The answer is that block comments can't contain newline characters between the block comment delimiters - I don't believe this is what you intend.
Thus I believe, the regular expression has to be fixed. I propose the following fix, but better check it thrice for correctness:
We change the part
Thus the complete definition of the whitespace terminal changes to
whitespace = [\t\n\r ]+|[\t\n\r ]*((//.*|/\*[.\n]*?\*/)[\t\n\r ]*)+
You are right, although this needs to be written as (.|\n) rather than [.\n]. Fixed now: