0

Я прочитал в курсе проектирования компилятора, что вывод сканирования представляет собой последовательность пар (код токена, позиция маркера в таблице символов). Я немного запутался в значении «позиции». Когда таблица символов представлена ​​в виде структуры, элементы которой могут быть доступны с помощью индекса, например массива, «позиция» понятна, это означает 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"]), ...)?

Я действительно не знаю, является ли это правильным подходом, что еще может означать «позиция» в дереве или хеш-таблице?

Спасибо заранее!

+0

Некоторые языки, такие как Pascal и аналогичные языки, не имеют * ключевых слов *, вместо этого они имеют * зарезервированные слова *, которые могут быть введены в таблицу символов, как любой другой символ. Его «позиция» - это просто индекс, в котором символ хранится в таблице. –

+0

Я понимаю, о чем вы говорите, но вопрос в том, означает ли [позиция в таблице символов] [указатель], когда таблица является деревом или хэш-таблицей? ». – porumbel

+0

«Позиция» может быть любым, что вы хотите, включая указатель, если это способ найти структуру данных символа. –

ответ

0

@Joachim Pileborg писал:

Некоторые языки, такие как Pascal и подобных языков, не ключевые слова, а они зарезервированные слова, которые могут быть введены в таблицу символов, как и любой другой символ. Его «позиция» - это просто индекс, в котором символ хранится в таблице.

«Позиция» может быть любым, что вы хотите, чтобы быть, включая указатель, до тех пор, пока его способ найти структуру данных символа.

+0

[Комментарии, преобразованные в сообщество Wiki-ответ] (http: //meta.stackoverflow.ком/вопросы/251597/вопрос-с-не-ответов, но, проблема решенной-в-комментарии). –

Смежные вопросы