Вход:  Пароль:  
FreeSource: AltLinux/Sisyphus/Alterator/evolution2 ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

«Естественный» язык описания интерфейсов


Всё что изложено пока является только идеей на далёкое будущее ... но кто знает когда оно наступит ;)

Стандартные описания


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


Возьмём традиционное описание интерфейса alterator.

Имеем схему следующего вида (объект атрибут атрибут ... ). Где атрибутом может выступать:


Всё конечно хорошо, достаточно примитивно и дубово. Но уже первые естестенные упрощения являются невозможными. Например я захотел изменить текст кнопки, естественно это сделать как (button text “new-text”). Но наш язык этой возможности не поддерживает.
Аналогично. Мы можем написать (button active). Но не можем – (active button). Попытаемся преодолеть эти странные ограничения. А именно, добавим категории хорошо знакомые нам по естественным языкам:

Сразу отметим, что хотим получить язык полностью совместимый с существующим, дабы пользователи не жедающие этих «улучшений» могли продолжать работать по стандартной схеме.

Правила нового языка

Просто не будет. За удовольствие надо платить ;)


  1. Разбор предложения идёт с лева на права. Конструкция “a b” ниже будет описываться как a применяемый к b.
  2. Предложение ограничивается круглыми скобками. Возможно вкладывать одно предложение в другое. Например (a b (c d)). То есть скобки – это своеобразные знаки препинания.
  3. Все базовые объекты – есть существительные. Например существительными являются все примитивные типы данных, а также производные объекты типа button,label,text и т. д.
  4. Существительные могут быть едиственного и множественного числа. В случае множественного числа количество объектов может быть как определено так и не определено.
  5. Существительные единственного числа могут быть сочетаемые с другими существительными, а могут быть не сочетаемые. В случае сочетаемости существительное + существительное даёт прилагательное. В противном случае – список из существительных. Например, text сочетаем с любой строкой, поэтому text “aaa” – есть прилагательное (или по старинке аттрибут с заданным значением). А вот label и button не сочетаемы друг с другом, а поэтому их соединение даёт просто два существительных, собственно label и button.
  6. Прилагательное при присоединении к нему прилагательного даёт составное прилагательное (ни или по старинке список аттрибутов с заданными значениями). Например layout-policy сочетаемо с цифрами. А получившееся прилагательное сочетаемо тоже с цифрами, а получившееся прилагательное сочетаемо с символами. А получившееся прилагательное уже ни с кем не сочетаемо. Получаем возможные аттрибуты (layout-policy 10), (layout-policy 10 20) и (layout-policy 10 20 center).
  7. Прилагательное + сочетаемое с ним существительное, даёт расширенное прилагательное ( это позволит нам сделать аттрибуты со списками значений, например, text “aaa” activity #t ).
  8. Прилагательное + не сочетаемое с ним существительное, равносильно «существительное + прилагательное». То есть они просто меняются местами. Например active button превращается в button active, active invisible button равносильно button active invisible
  9. По-умолчанию, у существительного множественного числа реальное количество объектов не определено. buttons – это просто несколько кнопок. А сколько их? Неизвестно.
  10. Числительное применямое к прилагательному или существительному, превращает его в соотв. объект множественного числа с заданным числом экземпляров.
  11. Числительное применяемое к числительному, есть числительное отвечающее их сумме .twenty two – это двадцать два.
  12. Количество объектов так и не определено для существительного, то производится автоматическое его определение, а именно оно равно в точности следуемым за ним существительным. Прилагательные следующие за таким объектом применяется к каждому полученному экземляру. Например texts “aaa” “bbb” bold – это в точности равосильно списку из text “aaa” bold и text “bbb” bold. Здесь bold – прилагательное.
  13. Вообще когда к существительному множественного числа применяются прилагательные, последние применяются к каждому экземпляру.

Ну вот кажется и всё. Благодаря последним правилам можно даже задать такие конструкции как «две активные кпопки» – (two active buttons) ну или «активные кнопки с текстами aa и bb» – //(active buttons texts “aa” “bb”).


Вот мы и получили язык, в котором помимо стандартных конструкций допустимы ещё несколько «естественно» звучащих с точки зрения человеческих языков. Более того получают смысл конструкции (button text) – это прилагательное и (button text “aaa”) – это существительное с прилагательным. Кроме того мы получили возможность сразу проверять применимость тех или иных атрибутов к виджетам. Имеющиеся синтаксические правила позволяют автоматически создать документацию по языку описания интерфейса.


От описания к виджетам


То что язык есть – это хорошо. Осталось превратить описание в реальный виджет. Для этого мы немного усложним базовое понятие нашего языка – существительное.
Прилагательное есть не что иное как существительное с заданными свойствами. Завершённое предложение описывающее виджет есть не что иное как прилагательное. Если это не так – значит предложение составлено не верно.


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


Если существительное уже реализовано, то его поведение уже несколько иное. При действиии на реализованное существительное сочетаемым с ним существительным получается не прилагательное, а возникает требование к реализации отдать свойство заданное соответствующим именем. (button text) – вернёт текст кнопки. При действии на реализованное существительное прилагательным, реализации поступает команда на изменнение свойстве (button text “aaa”) – изменит текст кнопки.

Реализация


Этот раздел всё ещё в стадии написания


Для реализации этой затей потребуются следующие структуры:


.....



 
Файлы [Скрыть файлы/форму]
Комментариев нет. [Показать комментарии/форму]