int parseNext() { /* we need to sort this out so the longest match is returned.. */ if (stateTest(ST_ONE_LINE_COMMENT, "?") || stateTest(ST_ONE_LINE_COMMENT, "%") || stateTest(ST_ONE_LINE_COMMENT, ">")) //"?"|"%"|">" { //yymore(); } if (stateTestRe(ST_ONE_LINE_COMMENT,"ONE_LINE_COMMENT_END")) { //[^\n\r?%>]*{ANY_CHAR} //switch (yytext[yyleng-1]) { // case '?': case '%': case '>': // yyless(yyleng-1); // yymore(); // break; // case '\n': // CG(zend_lineno)++; /* intentional fall through */ // default: // zendlval->value.str.val = yytext; /* no copying - intentional */ // zendlval->value.str.len = yyleng; // zendlval->type = IS_STRING; pushState(ST_IN_SCRIPTING); return T_COMMENT; //} } if (stateTestRe(ST_ONE_LINE_COMMENT,"NEWLINE")) { //zendlval->value.str.val = yytext; /* no copying - intentional */ //zendlval->value.str.len = yyleng; //zendlval->type = IS_STRING; pushState(ST_IN_SCRIPTING); return T_COMMENT; //BEGIN(ST_IN_SCRIPTING); //CG(zend_lineno)++; //return T_COMMENT; } if (stateTest(ST_ONE_LINE_COMMENT, "?>") || stateTest(ST_ONE_LINE_COMMENT, "%>")) { //if (CG(asp_tags) || yytext[yyleng-2] != '%') { /* asp comment? */ // zendlval->value.str.val = yytext; /* no copying - intentional */ // zendlval->value.str.len = yyleng-2; // zendlval->type = IS_STRING; // yyless(yyleng-2); pushState(ST_IN_SCRIPTING); return T_COMMENT; //} else { // yymore(); //} } if (stateTestRe(ST_COMMENT, "NOT_STAR") || // [^*]+ stateTestRe(ST_DOC_COMMENT, "NOT_STAR")) { //yymore(); } if (stateTest(ST_DOC_COMMENT,"*/")) { //CG(doc_comment) = estrndup(yytext, yyleng); //CG(doc_comment_len) = yyleng; //HANDLE_NEWLINES(yytext, yyleng); pushState(ST_IN_SCRIPTING); return T_DOC_COMMENT; } if (stateTest(ST_COMMENT,"*/")) { //HANDLE_NEWLINES(yytext, yyleng); pushState(ST_IN_SCRIPTING); return T_COMMENT; } if (stateTest(ST_COMMENT,"*") || stateTest(ST_DOC_COMMENT,"*")) { //yymore(); } //{ANY_CHAR} { // zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); //} writefln("Unexpected character in input: '" , currentChar() , " (ASCII=" , cast(int)currentChar(), ") state=" , getState); } void main() { x = new PhpTokenizer(""); }