2016-10-26 5 views
4

Я искал базу кода Roslyn и заметил, что у них есть две версии синтаксиса (один внутренний и один публичный). Часто они, по-видимому, упоминаются как «красные» узлы и «зеленые» узлы. Мне интересно, может ли кто-нибудь объяснить, что аргументирует наличие двух версий синтаксиса.Почему у Roslyn есть две версии синтаксиса для каждого языка?

+0

Смотрите также http://stackoverflow.com/questions/10417169/are-roslyn-syntaxnodes-reused/10417510#10417510 –

+0

Для более фона на этом, вы можете прочитать статью, которую я написал некоторое время назад. Страница 35: https://www.dropbox.com/s/rc9edahndlog0je/MainPaper.pdf?dl=0 –

ответ

8

Persistence, Facades and Roslyn’s Red-Green Trees От:

«Зеленый» дерево неизменен, стойкие, не имеет родителя ссылки, строится «снизу вверх», а каждый узел отслеживает его ширина, но не ее абсолютное положение. Когда происходит редактирование, мы восстанавливаем только части зеленого дерева, на которые повлияло редактирование, которое обычно составляет около O (log n) общих узлов синтаксического анализа в дереве.

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

Вы, потребитель API Roslyn, только когда-либо видите красное дерево; зеленое дерево - это деталь реализации. (И если вы используете отладчик для всплытия во внутреннее состояние узла синтаксического анализа, вы фактически увидите, что есть ссылка на другой узел синтаксиса другого типа, это зеленый узел дерева.)

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

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

  • Нет связанных вопросов^_^