Декларативная реализация графического языка


Недавно я начал работать над проектом, касающимся построения графического интерфейса с использованием некоторой формы декларативного языка. Я имею в виду, что мне нужно описать иерархию объектов, не указывая тип виджетов 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 3

3 ответа:

JSON был бы одним из вариантов. XML был бы другим -- например, Microsoft использует XAML (диалект XML) именно для этой цели, а W3C имеет (довольно новую) спецификацию упаковки виджетов (используя другой диалект XML). Любой из них позволит вам использовать существующие Парсеры вместо того, чтобы строить еще один с нуля.

То, что вы ищете, называется QML

Это декларативный язык графического интерфейса Qt, основанный на JSON.

Мне было интересно то же самое, поэтому я начал поток для сбора информации об открытых исходных кодах, декларативных языках GUI. Если вы ищете альтернативы, проверьте это.

Я просто тестирую QML для реальной среды пользовательского интерфейса в проекте C++, основанном на Qt. И я думаю, что это очень мощный декларативный язык, поэтому, если вы уже знаете некоторые основы Qt, вы можете использовать его.

Вы можете создавать современные, профессиональные и красивые пользовательские интерфейсы очень и очень быстро. И вы также можете легко соединить декларативный язык с вашим кодом C++ и наоборот.