Changeset View
Changeset View
Standalone View
Standalone View
head/sys/ddb/db_lex.c
Show First 20 Lines • Show All 157 Lines • ▼ Show 20 Lines | db_flush_lex(void) | ||||
db_look_char = 0; | db_look_char = 0; | ||||
db_look_token = 0; | db_look_token = 0; | ||||
} | } | ||||
static int | static int | ||||
db_lex(int flags) | db_lex(int flags) | ||||
{ | { | ||||
int c, n, radix_mode; | int c, n, radix_mode; | ||||
bool lex_wspace; | bool lex_wspace, lex_hex_numbers; | ||||
switch (flags & DRT_RADIX_MASK) { | switch (flags & DRT_RADIX_MASK) { | ||||
case DRT_DEFAULT_RADIX: | case DRT_DEFAULT_RADIX: | ||||
radix_mode = -1; | radix_mode = -1; | ||||
break; | break; | ||||
case DRT_OCTAL: | case DRT_OCTAL: | ||||
radix_mode = 8; | radix_mode = 8; | ||||
break; | break; | ||||
case DRT_DECIMAL: | case DRT_DECIMAL: | ||||
radix_mode = 10; | radix_mode = 10; | ||||
break; | break; | ||||
case DRT_HEXADECIMAL: | case DRT_HEXADECIMAL: | ||||
radix_mode = 16; | radix_mode = 16; | ||||
break; | break; | ||||
} | } | ||||
lex_wspace = ((flags & DRT_WSPACE) != 0); | lex_wspace = ((flags & DRT_WSPACE) != 0); | ||||
lex_hex_numbers = ((flags & DRT_HEX) != 0); | |||||
c = db_read_char(); | c = db_read_char(); | ||||
for (n = 0; c <= ' ' || c > '~'; n++) { | for (n = 0; c <= ' ' || c > '~'; n++) { | ||||
if (c == '\n' || c == -1) | if (c == '\n' || c == -1) | ||||
return (tEOL); | return (tEOL); | ||||
c = db_read_char(); | c = db_read_char(); | ||||
} | } | ||||
if (lex_wspace && n != 0) { | if (lex_wspace && n != 0) { | ||||
db_unread_char(c); | db_unread_char(c); | ||||
return (tWSPACE); | return (tWSPACE); | ||||
} | } | ||||
if (c >= '0' && c <= '9') { | if ((c >= '0' && c <= '9') || | ||||
(lex_hex_numbers && | |||||
((c >= 'a' && c <= 'f') || | |||||
(c >= 'A' && c <= 'F')))) { | |||||
/* number */ | /* number */ | ||||
int r, digit = 0; | int r, digit = 0; | ||||
if (radix_mode != -1) | if (radix_mode != -1) | ||||
r = radix_mode; | r = radix_mode; | ||||
else if (c > '0') | else if (c != '0') | ||||
r = db_radix; | r = db_radix; | ||||
else { | else { | ||||
c = db_read_char(); | c = db_read_char(); | ||||
if (c == 'O' || c == 'o') | if (c == 'O' || c == 'o') | ||||
r = 8; | r = 8; | ||||
else if (c == 'T' || c == 't') | else if (c == 'T' || c == 't') | ||||
r = 10; | r = 10; | ||||
else if (c == 'X' || c == 'x') | else if (c == 'X' || c == 'x') | ||||
▲ Show 20 Lines • Show All 112 Lines • ▼ Show 20 Lines | switch (c) { | ||||
return (tDOLLAR); | return (tDOLLAR); | ||||
case '!': | case '!': | ||||
c = db_read_char(); | c = db_read_char(); | ||||
if (c == '='){ | if (c == '='){ | ||||
return (tLOG_NOT_EQ); | return (tLOG_NOT_EQ); | ||||
} | } | ||||
db_unread_char(c); | db_unread_char(c); | ||||
return (tEXCL); | return (tEXCL); | ||||
case ':': | |||||
c = db_read_char(); | |||||
if (c == ':') | |||||
return (tCOLONCOLON); | |||||
db_unread_char(c); | |||||
return (tCOLON); | |||||
case ';': | case ';': | ||||
return (tSEMI); | return (tSEMI); | ||||
case '&': | case '&': | ||||
c = db_read_char(); | c = db_read_char(); | ||||
if (c == '&') | if (c == '&') | ||||
return (tLOG_AND); | return (tLOG_AND); | ||||
db_unread_char(c); | db_unread_char(c); | ||||
return (tBIT_AND); | return (tBIT_AND); | ||||
Show All 33 Lines |