Декларативная реализация графического языка
Недавно я начал работать над проектом, касающимся построения графического интерфейса с использованием некоторой формы декларативного языка. Я имею в виду, что мне нужно описать иерархию объектов, не указывая тип виджетов GUI, которые будут использоваться, чтобы "показать" эту иерархию. Например, для некоторой существующей иерархии H, используя нотацию JSON (или что-то подобное):
H =
{
"title" : "Label_1"
"children" :
[
{
"title" : "Label_2"
"children":
[
{
"title": "Field_A"
"type": "Integer"
"value": 10
},
{
"title": "Field_B"
"type": "String"
"value": "YES"
}
]
}
]
}
Кто-то может построить простое окно, которое будет показано пользователю нажатием кнопки с надписью "Label_1". То окно можно было бы тогда озаглавить " Label_2" и иметь два поля с метками "Field_A" и "Field_B", принимающие целочисленные и логические значения. значения соответственно.
Кто-то другой мог бы поместить эту иерархию в древовидный список, например
--------------------------------------------------------
>Label_1 |
>Label_2 |
>Field_A | 10
>Field_B | YES
Мой первый вопрос: ну, должен ли я построить какую-то форму синтаксического анализатора языка, чтобы достичь чего-то подобного ? Могу ли я тогда использовать JSON ? Хотя мне не нужно поддерживать сложные иерархии, есть необходимость поддерживать взаимоисключающие иерархии (что-то вроде Радио кнопки включения / выключения опций). У меня такое чувство, что это похоже на некую форму разбора языка с помощью пары операторов. Не поймите меня неправильно, я инженер-механик, и я не опытный программист.
Заранее благодарю вас за ваши комментарии и помощь.
3 ответа:
JSON был бы одним из вариантов. XML был бы другим -- например, Microsoft использует XAML (диалект XML) именно для этой цели, а W3C имеет (довольно новую) спецификацию упаковки виджетов (используя другой диалект XML). Любой из них позволит вам использовать существующие Парсеры вместо того, чтобы строить еще один с нуля.
Я просто тестирую QML для реальной среды пользовательского интерфейса в проекте C++, основанном на Qt. И я думаю, что это очень мощный декларативный язык, поэтому, если вы уже знаете некоторые основы Qt, вы можете использовать его.
Вы можете создавать современные, профессиональные и красивые пользовательские интерфейсы очень и очень быстро. И вы также можете легко соединить декларативный язык с вашим кодом C++ и наоборот.