Немного подробностей.
"Context free" = "контекстно-свободный". Дело в том, что в теории формальных языков выделяют несколько видов грамматик (см.
Иерархия Хомского). Контекстно-свободные грамматики - это такой вид грамматик, где символы (абстрактные, не обязательно только буквы/цифры) имеют одно и то же значение независимо от контекста, т.е. окружающих символов. Именно контекстно-свободные грамматики лежат в основе большинства языков программирования (но не всех и не всегда).
Язык, используемый в Context free представляет собой набор правил, называемый грамматикой.
Каждое правило может содержать в себе другие правила, примитивы и само себя (точнее, рекурсивный вызов себя). Правила могут иметь одинаковые имена, в этом случае получаем недетерминированное правило, где каждая версия выбирается случайно (с учетом весовых коэффициентов).
Язык содержит несколько простых примитивов, средства для работы с цветом, механизм повторения узора (tiling, плитка), масштабирования/вращения/скоса фигур (см.
Афинные преобразования), средства рисования кривых (отрезки, кривые Безье) и заливки цветом. В общем, стандартный для процедурной графики набор.
Характеристики языка:
- декларативный на уровне правил: описывается желаемый результат (набор правил типа "цветок - это шесть лепестков с такими-то параметрами"), а не способ его получения.
- императивный на уровне рисования кривых: описывается способ рисования кривой (глаголами типа "передвинуть", "нарисовать" и т.п.)
- поддержка модульности посредством директивы include - отдельные правила можно помещать в отдельные файлы для повторного использования
- поддержка рекурсии (во-видимому, бесконечной) и циклов
- стандартный набор арифметических/тригонометрических операций, по-видимому, нерасширяем
Для полноценного использования языка необходимо знать:
В общем, язык не самый сложный, но довольно интересный. Как можно видеть выше, результат в большей степени ограничен фантазией, чем возможностями контекстно-свободной грамматики.