Я прочитал в курсе проектирования компилятора, что вывод сканирования представляет собой последовательность пар (код токена, позиция маркера в таблице символов). Я немного запутался в значении «позиции». Когда таблица символов представлена в виде структуры, элементы которой могут быть доступны с помощью индекса, например массива, «позиция» понятна, это означает 1-й, 2-й, 99-й элементы в массиве. Например, для исходного кода:Компиляторный сканер - «позиция» в таблице символов, означающий
if (a == b) a = a + c;
выход сканирования будет поток: (..., (ID, 1), ..., (идентификатор, 2), ... , (id, 3)) - Я не показывал другие токены для простоты - и таблица символов будет (a, b, c), поэтому a в положении 1, b в положении 2, c в позиции 3 в таблице символов.
Что происходит, когда таблица символов представлена как двоичное дерево поиска? Для того же исходного кода дерево таблиц символов будет иметь корневой узел с ключом «b»; левого узла Б будет ключа «а» и Б правого узел будет иметь ключ «с». Каким должен быть результат сканирования теперь (..., (id,?), ..., (id,?), ..., (id,?))? Если мое дерево реализовано с использованием класса Node, я должен сделать smth следующим образом: (..., (id, ссылка на узел, чей ключ = a), ...)?
Как насчет таблицы символов hashtable? В C#, например, можно ли использовать HashST-объект HashST, а вывод сканирования выглядит следующим образом: (..., (id, указатель на HashST ["a"]), ...)?
Я действительно не знаю, является ли это правильным подходом, что еще может означать «позиция» в дереве или хеш-таблице?
Спасибо заранее!
Некоторые языки, такие как Pascal и аналогичные языки, не имеют * ключевых слов *, вместо этого они имеют * зарезервированные слова *, которые могут быть введены в таблицу символов, как любой другой символ. Его «позиция» - это просто индекс, в котором символ хранится в таблице. –
Я понимаю, о чем вы говорите, но вопрос в том, означает ли [позиция в таблице символов] [указатель], когда таблица является деревом или хэш-таблицей? ». – porumbel
«Позиция» может быть любым, что вы хотите, включая указатель, если это способ найти структуру данных символа. –