Вход:  Пароль:  
FreeSource: AltLinux/Sisyphus/Alterator/evolution2 ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Это старая версия AltLinux/Sisyphus/Alterator/evolution2 за 2005-10-26 13:56:17..

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


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

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


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


Возьмём традиционное описание интерфейса 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”) – изменит текст кнопки.


Вот и всё ;)



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