*/
/* }}} */
-// XXX: supposedly I will be screwed on very very long multi-line comments and need to replace these with a manual lexer. http://websrv.cs.fsu.edu/~engelen/courses/COP5621/Pr2.pdf
+/* XXX: supposedly I will be screwed on very very long multi-line comments and need to replace these with a manual lexer. http://websrv.cs.fsu.edu/~engelen/courses/COP5621/Pr2.pdf */
%{
#define YYLTYPE cy::location
} else if (yyextra->size_ == 0) \
value = YY_NULL; \
else { \
- size_t copy(std::min(size, yyextra->size_)); \
+ size_t copy(size); \
+ copy = (std::min(copy, yyextra->size_)); \
memcpy(data, yyextra->data_, copy); \
yyextra->data_ += copy; \
yyextra->size_ -= copy; \
<RegExp>\/{RegularExpressionBody}\/{RegularExpressionFlags} E("")
\/\/[^\n]* L
-\/\*(\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;
@end
@begin E4X
-"@" L C return tk::At;
"::" L C return tk::ColonColon;
".." L C return tk::PeriodPeriod;
@end
+@begin E4X ObjectiveC
+"@" L C return tk::At;
+@end
+
"&" L C return tk::Ampersand;
"&&" L C return tk::AmpersandAmpersand;
"&=" L C return tk::AmpersandEqual;
(\.[0-9]+|(0|[1-9][0-9]*)(\.[0-9]*)?){Exponent}? L C yylval->number_ = new(yyextra->pool_) CYNumber(strtod(yytext, NULL)); return tk::NumericLiteral;
0[xX][0-9a-fA-F]+ L C yylval->number_ = new(yyextra->pool_) CYNumber(strtoull(yytext + 2, NULL, 16)); return tk::NumericLiteral;
-
+0[0-7]+ L C yylval->number_ = new(yyextra->pool_) CYNumber(strtoull(yytext + 1, NULL, 8)); return tk::NumericLiteral;
0[bB][0-1]+ L C yylval->number_ = new(yyextra->pool_) CYNumber(strtoull(yytext + 2, NULL, 2)); return tk::NumericLiteral;
\"([^"\\\n]|{Escape})*\"|'([^'\\\n]|{Escape})*' L C {
char *value(reinterpret_cast<char *>(apr_palloc(yyextra->pool_, yyleng)));
char *local(value);
- for (int 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;