<RegExp>\/{RegularExpressionBody}\/{RegularExpressionFlags} E("")
\/\/[^\n]* L
-\/\*!(\n|[^\*]|\*[^/])*\*\/ V() C yylval->comment_ = new(yyextra->pool_) CYComment(apr_pstrmemdup(yyextra->pool_, yytext, yyleng)); return tk::Comment;
-\/\*(\n|[^\*]|\*[^/])*\*\/ V(N)
+
+ /* http://ostermiller.org/findcomment.html */
+ /* XXX: unify these two rules using !? */
+\/\*!([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V() C yylval->comment_ = new(yyextra->pool_) CYComment(apr_pstrmemdup(yyextra->pool_, yytext, yyleng)); return tk::Comment;
+\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V(N)
@begin E4X
<RegExp>"<>" L return tk::LeftRight;
char *value(reinterpret_cast<char *>(apr_palloc(yyextra->pool_, yyleng)));
char *local(value);
- for (size_t i(1); i != yyleng - 1; ++i) {
+ for (yy_size_t i(1), e(yyleng - 1); i != e; ++i) {
char next(yytext[i]);
if (yytext[i] == '\\')
\r?\n yylloc->end.lines(); yylloc->step(); N
[ \t] L
-<<EOF>> L yyterminate();
+
+<<EOF>> if (yyextra->auto_) { yyextra->auto_ = false; return tk::AutoComplete; } L yyterminate();
. L {
CYDriver::Error error;