Другие рассказали об основах, но я хотел бы сказать несколько слов о том, как реализован компилятор, который может быть полезным в его случае.
Компилятор поддерживает список (называемый таблицей символов ) переменных имен , используемых в любой конкретной точке программы, и некоторую информацию о переменных. Список информации включает в себя:
- их назначенное хранилище (в этом регистре, в той ячейке памяти и т. Д.) *
- какого они типа (то есть целое число или строка или
SubWhatsitObj
), включая любое ограничение (например, постоянство)
- любая информация о связи, необходимая компилятору
Компилятор использует эту информацию, чтобы решить, как обрабатывать выражения, включающие переменные. Вид метаинформации, хранящейся в таблице символов, также может быть получен для любого выражения из его компонентов.
За исключением специального случая преобразования числовых типов, приведение просто указывает компилятору использовать метаданные другой для переменной или выражения, чем обычно бывает. Биты в памяти не затрагиваются вообще, но результат вычисления может быть.