Вот смотрите, возмем на рассмотрение XAML, HTML, SVG.
Все эти языки пораждают графическое изображение. Все имеют AST.
Теперь предположим что я начинаю писать графическую либо для рисования. Таких великое множество, взять хотя бы репорт генераторы.
Тогда я начинаю, следуя традиции, создавать объектную модель:
Page
Page.Background,
Rectangle,
.. и т.д и т.п.
Вопрос собств. в чем — где начинается принципиальное отличие просто объектной модели от АСТ языка ?
Оно вообще есть?
Вообще-то есть три сущности: AST, DOM и FS (formatting structure в терминах CSS).
В AST узел Rectangle описывает просто прямоугольник, его положение, размеры, толщину и цвет линий.
В DOM узел Rectangle не только описывает прямоугольник, но и позволяет им манипулировать
В FS может вообще не быть ни узла Rectangle, ник акой либо иерархии, а только 4 прямые линии и 4 кривые Безье (для скругления углов).
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, barn_czn, Вы писали:
A>Вообще-то есть три сущности: AST, DOM и FS (formatting structure в терминах CSS). A>В AST узел Rectangle описывает просто прямоугольник, его положение, размеры, толщину и цвет линий. A>В DOM узел Rectangle не только описывает прямоугольник, но и позволяет им манипулировать
не принципиально. AST тоже можно манипулировать. пример — кодогенерация.
A>В FS может вообще не быть ни узла Rectangle, ник акой либо иерархии, а только 4 прямые линии и 4 кривые Безье (для скругления углов).
FS — вообще можно рассматривать как часть AST, тоже не принципиально
Здравствуйте, barn_czn, Вы писали:
_>Page _>Page.Background, _>Rectangle, _>.. и т.д и т.п.
_>Вопрос собств. в чем — где начинается принципиальное отличие просто объектной модели от АСТ языка ? _>Оно вообще есть?
Отличаются они тем, что моделирую принципиально разные вещи. Предметная область одной модели — сами графические примитивы (страницы, прямоугольники и т.п.), другой — синтаксис языка (термы, выражения).
Можно обойтись как без той, так и без другой модели. По большому счету они нужны лишь для удобства
То есть если будет удобно работать с графическими примитивами в терминах синтаксисического разбора языка, то и ладно.
Здравствуйте, barn_czn, Вы писали:
_>Вопрос собств. в чем — где начинается принципиальное отличие просто объектной модели от АСТ языка ?
Где кончается атмосфера и начинается космос? С какова количества выпавших волос начинается лысина?
Для произвольного XML документа — отличия нет.
А вот в прикладных применениях они могут различаться сильно. Например <button X=500> и <button.X>500</> могут означать одно и то же — задание значения свойства X. Тогда на уровне AST будет два разных представления, на уровне модели — одно.
Здравствуйте, hardcase, Вы писали:
H>AST порождается парсером языка — успешным применением правил грамматики.
Ага. А ещё AST может содержать некорректные узлы — если парсер умеет восстанавливаться после ошибки. А объектная модель таких содержать не должна.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, barn_czn, Вы писали:
_>>Вопрос собств. в чем — где начинается принципиальное отличие просто объектной модели от АСТ языка ?
H>AST порождается парсером языка — успешным применением правил грамматики.
не согласен. под готовый AST можно подогнать множество грамматик, на вкус и цвет.
Здравствуйте, barn_czn, Вы писали:
_>не согласен. под готовый AST можно подогнать множество грамматик, на вкус и цвет.
Но в конечном счете успешное применение правил этих грамматик будет строить AST. Я не говорю что каждое правило будет порождать некий объект — оно может порождать а может и нет: например пробелы и комментарии могут игнорироваться и правила для пробелов и комментариев будут такие строки просто проглатывать (допускать, говоря в терминах парсера). Я говорю о том, что AST — это, как правило, выхлоп парсера.
_>Вопрос собств. в чем — где начинается принципиальное отличие просто объектной модели от АСТ языка ? _>Оно вообще есть?
в общем случае, AST шире чем объектная модель.
в AST-е обычно есть полный аналог объектной модели (для ее порождения), но еще плюс есть конструкции, которые позволяют описывать ссылки между объектами (в объектной модели ссылка уже просто ссылка), в AST-е могут появляться конструкции уменьшающие дублирование информации и т.д.