ID
- это просто тип терминала, возвращаемый лексером. Идея состоит в том, что в случае имен переменных (и чисел) другая возвращаемая информация будет указывать имя (или номер). В C-подобном псевдо-коде лексер делает что-то вроде:
char *tok = tokenise();
if (!strcmp(tok, "int"))
{
return INT;
}
else if (is_name(tok))
{
strcpy(parser.name, tok);
return ID;
}
else if (is_number(tok))
{
parser.number = atoi(tok);
return NUM;
}
...
Парсер получает тип терминала (INT, ID, NUM и т. Д.), И этого достаточно для применения правил грамматики. Действия в правилах могут затем включать дополнительную информацию (parser.name, parser.number и т. Д.) Либо напрямую, либо при создании AST.