X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fas3%2Ftokenizer.lex;h=c373eefe2f43a84c8df64e3daf907dc7e13299a9;hb=f115b52b509958a7ec88fe8b229ebb6e4fad4216;hp=304df5356385941bb2d9b16f3e8bc5f3a8b5754f;hpb=30a768f43ce83c2bd181c899b8c747c8c2a9ce08;p=swftools.git diff --git a/lib/as3/tokenizer.lex b/lib/as3/tokenizer.lex index 304df53..c373eef 100644 --- a/lib/as3/tokenizer.lex +++ b/lib/as3/tokenizer.lex @@ -366,6 +366,20 @@ static inline int handlehex() } } +void handleLabel(char*text, int len) +{ + int t; + for(t=len-1;t>=0;--t) { + if(text[t]!=' ' && + text[t]!='.') + break; + } + char*s = malloc(t+1); + memcpy(s, yytext, t); + s[t]=0; + avm2_lval.id = s; +} + void initialize_scanner(); #define YY_USER_INIT initialize_scanner(); @@ -375,12 +389,15 @@ void initialize_scanner(); //int {c();return m(KW_INT);} //uint {c();return m(KW_UINT);} //Number {c();return m(KW_NUMBER);} + + %} %s REGEXPOK %s BEGINNING NAME [a-zA-Z_][a-zA-Z0-9_\\]* +_ \[^a-zA-Z0-9_\\] HEXINT 0x[a-zA-Z0-9]+ INT [0-9]+ @@ -423,6 +440,15 @@ REGEXP [/]([^/\n]|\\[/])*[/][a-zA-Z]* 3rr0r {/* for debugging: generates a tokenizer-level error */ syntaxerror("3rr0r");} +{NAME}{S}*:{S}*for{_} {c();handleLabel(yytext, yyleng-3);return T_FOR;} +{NAME}{S}*:{S}*do{_} {c();handleLabel(yytext, yyleng-2);return T_DO;} +{NAME}{S}*:{S}*while{_} {c();handleLabel(yytext, yyleng-5);return T_WHILE;} +{NAME}{S}*:{S}*switch{_} {c();handleLabel(yytext, yyleng-6);return T_SWITCH;} +for {c();avm2_lval.id="";return T_FOR;} +do {c();avm2_lval.id="";return T_DO;} +while {c();avm2_lval.id="";return T_WHILE;} +switch {c();avm2_lval.id="";return T_SWITCH;} + [&][&] {c();BEGIN(REGEXPOK);return m(T_ANDAND);} [|][|] {c();BEGIN(REGEXPOK);return m(T_OROR);} [!][=] {c();BEGIN(REGEXPOK);return m(T_NE);} @@ -449,14 +475,17 @@ REGEXP [/]([^/\n]|\\[/])*[/][a-zA-Z]* \. {c();return m('.');} :: {c();return m(T_COLONCOLON);} : {c();return m(':');} +instanceof {c();return m(KW_INSTANCEOF);} implements {c();return m(KW_IMPLEMENTS);} interface {c();return m(KW_INTERFACE);} namespace {c();return m(KW_NAMESPACE);} protected {c();return m(KW_PROTECTED);} undefined {c();return m(KW_UNDEFINED);} +continue {c();return m(KW_CONTINUE);} override {c();return m(KW_OVERRIDE);} internal {c();return m(KW_INTERNAL);} function {c();return m(KW_FUNCTION);} +default {c();return m(KW_DEFAULT);} package {c();return m(KW_PACKAGE);} private {c();return m(KW_PRIVATE);} dynamic {c();return m(KW_DYNAMIC);} @@ -468,9 +497,9 @@ native {c();return m(KW_NATIVE);} static {c();return m(KW_STATIC);} import {c();return m(KW_IMPORT);} typeof {c();return m(KW_TYPEOF);} -while {c();return m(KW_WHILE);} class {c();return m(KW_CLASS);} const {c();return m(KW_CONST);} +catch {c();return m(KW_CATCH);} final {c();return m(KW_FINAL);} false {c();return m(KW_FALSE);} break {c();return m(KW_BREAK);} @@ -479,12 +508,13 @@ void {c();return m(KW_VOID);} true {c();return m(KW_TRUE);} null {c();return m(KW_NULL);} else {c();return m(KW_ELSE);} +case {c();return m(KW_CASE);} use {c();return m(KW_USE);} new {c();return m(KW_NEW);} get {c();return m(KW_GET);} -for {c();return m(KW_FOR);} set {c();return m(KW_SET);} var {c();return m(KW_VAR);} +try {c();return m(KW_TRY);} is {c();return m(KW_IS) ;} if {c();return m(KW_IF) ;} as {c();return m(KW_AS);} @@ -574,7 +604,6 @@ char*token2string(enum yytokentype nr, YYSTYPE v) else if(nr==KW_INT) return "int"; else if(nr==KW_NEW) return "new"; else if(nr==KW_GET) return "get"; - else if(nr==KW_FOR) return "for"; else if(nr==KW_SET) return "set"; else if(nr==KW_VAR) return "var"; else if(nr==KW_IS) return "is";