1678 |
static void |
static void |
1679 |
token_translations_init (void) |
token_translations_init (void) |
1680 |
{ |
{ |
1681 |
int last_user_token_number = 256; |
int num_256_available_p = TRUE; |
1682 |
int i; |
int i; |
1683 |
|
|
1684 |
/* Set the user numbers. */ |
/* Find the highest user token number, and whether 256, the POSIX |
1685 |
|
preferred user token number for the error token, is used. */ |
1686 |
|
max_user_token_number = 0; |
1687 |
|
for (i = 0; i < ntokens; ++i) |
1688 |
|
{ |
1689 |
|
symbol_t *this = symbols[i]; |
1690 |
|
if (this->user_token_number != SUNDEF) |
1691 |
|
{ |
1692 |
|
if (this->user_token_number > max_user_token_number) |
1693 |
|
max_user_token_number = this->user_token_number; |
1694 |
|
if (this->user_token_number == 256) |
1695 |
|
num_256_available_p = FALSE; |
1696 |
|
} |
1697 |
|
} |
1698 |
|
|
1699 |
|
/* If 256 is not used, assign it to error, to follow POSIX. */ |
1700 |
|
if (num_256_available_p && errtoken->user_token_number == SUNDEF) |
1701 |
|
errtoken->user_token_number = 256; |
1702 |
|
|
1703 |
|
/* Set the missing user numbers. */ |
1704 |
|
if (max_user_token_number < 256) |
1705 |
|
max_user_token_number = 256; |
1706 |
|
|
1707 |
for (i = 0; i < ntokens; ++i) |
for (i = 0; i < ntokens; ++i) |
1708 |
{ |
{ |
1709 |
symbol_t *this = symbols[i]; |
symbol_t *this = symbols[i]; |
1710 |
if (this->user_token_number == SUNDEF) |
if (this->user_token_number == SUNDEF) |
1711 |
this->user_token_number = ++last_user_token_number; |
this->user_token_number = ++max_user_token_number; |
1712 |
if (this->user_token_number > max_user_token_number) |
if (this->user_token_number > max_user_token_number) |
1713 |
max_user_token_number = this->user_token_number; |
max_user_token_number = this->user_token_number; |
1714 |
} |
} |
1720 |
inputs. */ |
inputs. */ |
1721 |
for (i = 0; i < max_user_token_number + 1; i++) |
for (i = 0; i < max_user_token_number + 1; i++) |
1722 |
token_translations[i] = undeftoken->number; |
token_translations[i] = undeftoken->number; |
|
|
|
1723 |
symbols_do (symbol_translation, NULL); |
symbols_do (symbol_translation, NULL); |
1724 |
} |
} |
1725 |
|
|
1845 |
errtoken = getsym ("error"); |
errtoken = getsym ("error"); |
1846 |
errtoken->class = token_sym; |
errtoken->class = token_sym; |
1847 |
errtoken->number = ntokens++; |
errtoken->number = ntokens++; |
|
errtoken->user_token_number = 256; /* Value specified by POSIX. */ |
|
1848 |
|
|
1849 |
/* Construct a token that represents all undefined literal tokens. |
/* Construct a token that represents all undefined literal tokens. |
1850 |
It is always token number 2. */ |
It is always token number 2. */ |