d85f5a4816
Example from issue: ```php <?php # # Comment # $a = 100; ``` The problem with the example from the issue is that `#` is immediately followed by a line break. And since the rule in the lexer for such comments was changed, this case was handled incorrectly. ``` (('#' ^'[') | '//') any_line* when is_not_comment_end => { lex.ungetStr("?>") lex.addFreeFloatingToken(tkn, token.T_COMMENT, lex.ts, lex.te) }; ``` This rule has one problem, it checks two characters at once, first for the match `#`, and then for the mismatch `[`, which leads to the fact that in the case of an empty comment, the first matcher will capture `#`, and the second line break (`\n`), which will lead to the fact that `any_line` matcher will not work and will not increase the line number. The next rule added is specifically for this case. ``` '#' newline when is_not_comment_end => { lex.ungetStr("?>") lex.addFreeFloatingToken(tkn, token.T_COMMENT, lex.ts, lex.te) }; ``` |
||
---|---|---|
.. | ||
php5 | ||
php7 | ||
php8 | ||
position | ||
scanner | ||
tester |