version 1.6, 2008/08/21 21:00:14 |
version 1.7, 2010/03/22 20:40:44 |
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
*/ |
*/ |
#include "parser.h" |
#include "parser.h" |
|
#include <assert.h> |
#include <stdlib.h> |
#include <stdlib.h> |
#include <errno.h> |
#include <errno.h> |
#include <stdint.h> |
#include <stdint.h> |
|
|
long base; |
long base; |
char *next; |
char *next; |
long l; |
long l; |
|
int d; |
|
|
l = 0; |
l = 0; |
base = strtol(yytext+2, &next, 0); |
base = strtol(yytext+2, &next, 0); |
|
|
next++; |
next++; |
while (*next != 0) { |
while (*next != 0) { |
if (*next >= '0' && *next <= '9') |
if (*next >= '0' && *next <= '9') |
l = base * l + *next - '0'; |
d = *next - '0'; |
else if (*next >= 'a' && *next <= 'z') |
else if (*next >= 'a' && *next <= 'z') |
l = base * l + *next - 'a' + 10; |
d = *next - 'a' + 10; |
else if (*next >= 'A' && *next <= 'Z') |
else { |
l = base * l + *next - 'A' + 10; |
assert(*next >= 'A' && *next <= 'Z'); |
|
d = *next - 'A' + 10; |
|
} |
|
if (d >= base) { |
|
fprintf(stderr, |
|
"m4: error in number %s\n", yytext); |
|
return 0; |
|
} |
|
l = base * l + d; |
next++; |
next++; |
} |
} |
} |
} |