URL
https://opencores.org/ocsvn/zipcpu/zipcpu/trunk
Subversion Repositories zipcpu
Compare Revisions
- This comparison shows the changes necessary to convert path
/zipcpu
- from Rev 53 to Rev 54
- ↔ Reverse comparison
Rev 53 → Rev 54
/trunk/sw/zasm/zasm.l
44,6 → 44,7
extern "C" int yylex(); |
extern "C" int yywrap() { return 1;} |
extern char *master_input_filename; |
extern int decode_char_int(const char *str); |
%} |
|
%option yylineno |
160,29 → 161,8
"$"?[-]?[1-9][0-9]* { yylval.u_ival = strtoul(yytext+(((*yytext)=='$')?1:0),NULL,10);return INT;} |
"$"?[-]?[1-9A-Fa-f][0-9A-Fa-f]*h {yylval.u_ival=strtoul(yytext+(((*yytext)=='$')?1:0),NULL,16); return INT;} |
"$"?[-]?[0-7]+o { yylval.u_ival = strtoul(yytext+(((*yytext)=='$')?1:0),NULL, 8);return INT;} |
"\'"[^\\\']"\'" { yylval.u_ival = yytext[1]&0x0ff; return INT; } |
"\'\\"[abnr\\\'\"]"\'" { |
yylval.u_ival = yytext[2]; |
if (yytext[2] == 'a') yylval.u_ival = '\a'; |
else if (yytext[2] == 'b') yylval.u_ival = '\b'; |
else if (yytext[2] == 'f') yylval.u_ival = '\f'; |
else if (yytext[2] == 'n') yylval.u_ival = '\n'; |
else if (yytext[2] == 'r') yylval.u_ival = '\r'; |
else if (yytext[2] == 't') yylval.u_ival = '\t'; |
else if (yytext[2] == 'v') yylval.u_ival = '\v'; |
else if (yytext[2] == '0') yylval.u_ival = '\0'; |
else if (yytext[2] == '\\') yylval.u_ival = '\\'; |
else if (yytext[2] == '\'') yylval.u_ival = '\''; |
else if (yytext[2] == '\"') yylval.u_ival = '\"'; |
return INT; } |
"\'"[^\\\'][^\\\']"\'" { yylval.u_ival = ((yytext[1]&0x0ff)<<8)+(yytext[2]&0x0ff); return INT; } |
"\'"[^\\\'][^\\\'][^\\\']"\'" { yylval.u_ival = ((yytext[1]&0x0ff)<<16) |
+((yytext[2]&0x0ff)<<8) |
+(yytext[3]&0x0ff); return INT; } |
"\'"[^\\\'][^\\\'][^\\\'][^\\\']"\'" { yylval.u_ival = ((yytext[1]&0x0ff)<<24) |
+((yytext[2]&0x0ff)<<16) |
+((yytext[3]&0x0ff)<<8) |
+(yytext[4]&0x0ff); return INT; } |
"\'"(("\\\'")|([^'\\])|("\\"[0abfnrtv])|("\\\\")|("\\\"")){1,4}"\'" { |
yylval.u_ival = decode_char_int(&yytext[1]); return INT; } |
"$"?"0" { yylval.u_ival = 0;return INT;} |
"$" { return DOLLAR; } |
"," { return COMMA; } |
204,3 → 184,32
|
%% |
|
int decode_char_int(const char *str) { |
unsigned r = 0; |
// fprintf(stderr, "Decoding character string: \'%s\n", str); |
while((*str)&&('\'' != (*str))) { |
if ('\\' == (*str)) { |
// Process escape characters |
str++; |
if ('\0' != (*str)) { |
r<<=8; |
switch(*str) { |
case '0': break; |
case 'a': r |= '\a'; break; |
case 'b': r |= '\b'; break; |
case 'n': r |= '\n'; break; |
case 'f': r |= '\f'; break; |
case 'r': r |= '\r'; break; |
case 't': r |= '\t'; break; |
case 'v': r |= '\v'; break; |
case '\'': r |= '\''; break; |
case '\"': r |= '\"'; break; |
case '\\': r |= '\\'; break; |
} str++; |
} |
} else { |
r = (r<<8)|(*str); |
str++; |
} |
} return r; |
} |