X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2FSDCC.lex;h=821cff05c1b0b8d7b10067561f4a0c3ed3d79fa6;hb=d8e23a291de103bc9e4fcdc63aa01acea582b6b6;hp=510981ad443219c2eb18a9f56ff926c4746134a6;hpb=b09af35f2f1cde7649d3ac4a6f5d2af6d97895a0;p=fw%2Fsdcc diff --git a/src/SDCC.lex b/src/SDCC.lex index 510981ad..821cff05 100644 --- a/src/SDCC.lex +++ b/src/SDCC.lex @@ -33,13 +33,7 @@ IS (u|U|l|L)* #include #include #include -#include "SDCCglobl.h" -#include "SDCCsymt.h" -#include "SDCCval.h" -#include "SDCCast.h" -#include "SDCCy.h" -#include "SDCChasht.h" -#include "SDCCmem.h" +#include "common.h" char *stringLiteral(); char *currFname; @@ -57,10 +51,12 @@ int yywrap YY_PROTO((void)) { return(1); } - +#define TKEYWORD(token) return (isTargetKeyword(yytext) ? token :\ + check_type(yytext)) char asmbuff[MAX_INLINEASM] ; char *asmp ; -extern int check_type ( ); +extern int check_type (); + extern int isTargetKeyword (); extern int checkCurrFile (char *); extern int processPragma (char *); extern int printListing (int ); @@ -94,39 +90,40 @@ struct options save_options ; . { *asmp++ = yytext[0] ; } \n { count(); *asmp++ = '\n' ;} "/*" { comment(); } -"at" { count(); return(AT) ; } -"auto" { count(); return(AUTO); } -"bit" { count(); return(BIT) ; } -"break" { count(); return(BREAK); } -"case" { count(); return(CASE); } +"at" { count(); TKEYWORD(AT) ; } +"auto" { count(); return(AUTO); } +"bit" { count(); TKEYWORD(BIT) ; } +"break" { count(); return(BREAK); } +"case" { count(); return(CASE); } "char" { count(); return(CHAR); } -"code" { count(); return(CODE); } +"code" { count(); TKEYWORD(CODE); } "const" { count(); return(CONST); } "continue" { count(); return(CONTINUE); } -"critical" { count(); return(CRITICAL); } -"data" { count(); return(DATA); } +"critical" { count(); TKEYWORD(CRITICAL); } +"data" { count(); TKEYWORD(DATA); } "default" { count(); return(DEFAULT); } "do" { count(); return(DO); } "double" { count(); werror(W_DOUBLE_UNSUPPORTED);return(FLOAT); } "else" { count(); return(ELSE); } "enum" { count(); return(ENUM); } "extern" { count(); return(EXTERN); } -"far" { count(); return(XDATA); } +"far" { count(); TKEYWORD(XDATA); } +"eeprom" { count(); TKEYWORD(EEPROM); } "float" { count(); return(FLOAT); } "for" { count(); return(FOR); } "goto" { count(); return(GOTO); } -"idata" { count(); return(IDATA);} +"idata" { count(); TKEYWORD(IDATA);} "if" { count(); return(IF); } "int" { count(); return(INT); } "interrupt" { count(); return(INTERRUPT);} "long" { count(); return(LONG); } -"near" { count(); return(DATA);} -"pdata" { count(); return(PDATA); } -"reentrant" { count(); return(REENTRANT);} +"near" { count(); TKEYWORD(DATA);} +"pdata" { count(); TKEYWORD(PDATA); } +"reentrant" { count(); TKEYWORD(REENTRANT);} "register" { count(); return(REGISTER); } "return" { count(); return(RETURN); } -"sfr" { count(); return(SFR) ; } -"sbit" { count(); return(SBIT) ; } +"sfr" { count(); TKEYWORD(SFR) ; } +"sbit" { count(); TKEYWORD(SBIT) ; } "short" { count(); return(SHORT); } "signed" { count(); return(SIGNED); } "sizeof" { count(); return(SIZEOF); } @@ -138,17 +135,18 @@ struct options save_options ; "unsigned" { count(); return(UNSIGNED); } "void" { count(); return(VOID); } "volatile" { count(); return(VOLATILE); } -"using" { count(); return(USING); } +"using" { count(); TKEYWORD(USING); } "while" { count(); return(WHILE); } -"xdata" { count(); return(XDATA); } -"_data" { count(); return(_NEAR); } -"_code" { count(); return(_CODE); } -"_generic" { count(); return(_GENERIC); } -"_near" { count(); return(_NEAR); } -"_xdata" { count(); return(_XDATA);} -"_pdata" { count () ; return(_PDATA); } -"_idata" { count () ; return(_IDATA); } -"..." { count(); return(VAR_ARGS);} +"xdata" { count(); TKEYWORD(XDATA); } +"_data" { count(); TKEYWORD(_NEAR); } +"_code" { count(); TKEYWORD(_CODE); } +"_eeprom" { count(); TKEYWORD(_EEPROM); } +"_generic" { count(); TKEYWORD(_GENERIC); } +"_near" { count(); TKEYWORD(_NEAR); } +"_xdata" { count(); TKEYWORD(_XDATA);} +"_pdata" { count(); TKEYWORD(_PDATA); } +"_idata" { count(); TKEYWORD(_IDATA); } +"..." { count(); return(VAR_ARGS);} {L}({L}|{D})* { count(); return(check_type()); } 0[xX]{H}+{IS}? { count(); yylval.val = constVal(yytext); return(CONSTANT); } 0{D}+{IS}? { count(); yylval.val = constVal(yytext); return(CONSTANT); } @@ -180,8 +178,8 @@ struct options save_options ; "==" { count(); return(EQ_OP); } "!=" { count(); return(NE_OP); } ";" { count(); return(';'); } -"{" { count() ; NestLevel++ ; return('{'); } -"}" { count(); NestLevel--; return('}'); } +"{" { count(); NestLevel++ ; return('{'); } +"}" { count(); NestLevel--; return('}'); } "," { count(); return(','); } ":" { count(); return(':'); } "=" { count(); return('='); } @@ -497,3 +495,19 @@ int process_pragma(char *s) werror(W_UNKNOWN_PRAGMA,cp); return 0; } + +/* will return 1 if the string is a part + of a target specific keyword */ +int isTargetKeyword(char *s) +{ + int i; + + if (port->keywords == NULL) + return 0; + for ( i = 0 ; port->keywords[i] ; i++ ) { + if (strcmp(port->keywords[i],s) == 0) + return 1; + } + + return 0; +}