diff --git a/lexer.go b/lexer.go index acaa953..ff39e1c 100644 --- a/lexer.go +++ b/lexer.go @@ -7664,8 +7664,28 @@ yyrule1: // [ \t\n\r]+ goto yystate0 yyrule2: // . + { - goto yystate0 + tb := []byte{} + for { + if c == -1 { + break + } + if '?' == rune(c) { + tb = l.TokenBytes(nil) + if len(tb) < 2 || tb[len(tb)-1] != '<' { + c = l.Next() + continue + } + tb = l.ungetN(1) + break + } + c = l.Next() + } + lval.token = string(tb) + return T_INLINE_HTML + goto yystate0 + } yyrule3: // \<\?php([ \t]|{NEW_LINE}) { begin(PHP) //lval.token = string(l.TokenBytes(nil)); return T_OPEN_TAG; @@ -7690,9 +7710,7 @@ yyrule6: // [ \t\n\r]+ } yyrule7: // \?\>{NEW_LINE}? { - begin(INITIAL) - lval.token = string(l.TokenBytes(nil)) - return T_CLOSE_TAG + begin(INITIAL) //lval.token = string(l.TokenBytes(nil)); return T_CLOSE_TAG; goto yystate0 } yyrule8: // {DNUM}|{EXPONENT_DNUM} diff --git a/lexer.l b/lexer.l index 0bf78d1..18484a9 100644 --- a/lexer.l +++ b/lexer.l @@ -154,12 +154,35 @@ NEW_LINE (\r|\n|\r\n) [ \t\n\r]+ . + tb := []byte{} + + for { + if c == -1 { + break; + } + + if '?' == rune(c) { + tb = l.TokenBytes(nil); + if (len(tb) < 2 || tb[len(tb)-1] != '<') { + c = l.Next() + continue; + } + + tb = l.ungetN(1) + break; + } + + c = l.Next() + } + + lval.token = string(tb); return T_INLINE_HTML + \<\?php([ \t]|{NEW_LINE}) begin(PHP);//lval.token = string(l.TokenBytes(nil)); return T_OPEN_TAG; \<\? begin(PHP);//lval.token = string(l.TokenBytes(nil)); return T_OPEN_TAG; \<\?= begin(PHP);lval.token = string(l.TokenBytes(nil)); return T_OPEN_TAG_WITH_ECHO; [ \t\n\r]+ //lval.token = string(l.TokenBytes(nil)); return T_WHITESPACE -\?\>{NEW_LINE}? begin(INITIAL);lval.token = string(l.TokenBytes(nil)); return T_CLOSE_TAG; +\?\>{NEW_LINE}? begin(INITIAL);//lval.token = string(l.TokenBytes(nil)); return T_CLOSE_TAG; {DNUM}|{EXPONENT_DNUM} lval.token = string(l.TokenBytes(nil)); return T_DNUMBER {BNUM} diff --git a/parser.go b/parser.go index 0e5baa4..89f3747 100644 --- a/parser.go +++ b/parser.go @@ -365,11 +365,13 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line parser.y:611 -const src = ` test test