Re: Иерархия классов для узлов дерева компилятора
От: icWasya  
Дата: 14.08.13 10:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Запутался. С одной стороны, узлы делятся на значения и выражения (которые, в свою очередь, могут содержать другие узлы, являющиеся значениями или выражениями). С другой стороны, выражения и значения делятся по типу возвращаемого значения (логические, числовые, строковые). Соотвественно, не все узлы могут быть дочерними узлами для других узлов. Например, для операции сложения нельзя использовать одновременно строку и число (но можно складывать строку со строкой или число с числом). Какой должна быть иерархия классов, позволяющая на этапе компиляции проверить хотя бы частично, что родительский узел содержит узлы правильных типов? Можно ли обойтись без множественного наследования?


Почему для операции сложения нельзя использовать одновременно строку и число ? В некоторых языках можно.
Даже в C++, если где-нибудь есть функция
string operator +(string A,int B);
с какой-нибудь осмысленной семантикой — например переводящая сначала число в строку и добавляющая её к исходной строке.

Вам, скорее всего, нужно строить только дерево разбора, основываясь на приоритетах операций, а типы выводить уже потом, анализируя это дерево и
ища для операторов функции с подходящими сигнатурами, а вот если таковые не найдутся, то диагностировать ошибку.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.