2014-01-23 2 views
1

Я хочу написать собственный упрощенный синтаксический анализатор CSS для моих собственных целей. Он должен признать несколько свойств (не все из них, конечно). Итак, я проецировал архитектуру и теперь хочу проецировать мелкие детали.Как создать общую структуру, содержащую значения свойств CSS.

Прямо сейчас мне нужно создать универсальную структуру, которая может содержать значение любого свойства CSS. Я думал об объединении с структурами для каждого возможного свойства обработки, но для меня это похоже на квадратное колесо - существует 146 свойств (я хочу предоставить поддержку только около 20-40, но это не имеет значения) - так что я необходимо создать союз с 146 различными структурами и, кроме того, описать эти структуры. Мой проект составляет около 60 КБ прямо сейчас, я не хочу, чтобы он вырос до 60 МБ.

Я думал о значении char [255], но он делает ограничение для каждого значения меньше, чем 255 (или N) символов. Что я могу сделать, чтобы решить эту небольшую проблему?

+0

Динамического распределения памяти? –

+0

@MrLister, вы хотите иметь указатель на динамический блок памяти и интерпретировать данные, как нужна функция, такая как CSSBorder (int * block)? –

+0

Возможно, изменение в C++ - это вариант. –

ответ

3

Один (довольно простой) способ будет подходить к нему, как так

struct CSS { 
    char *property; 
    char *value; 
} 

Затем, в то время как разборе CSS документа или любой, как вы хотите, чтобы заполнить его, выделить структуру с таНос.

Вы можете сверху или в стороне от включения связанного списка, так что, когда вы хотите освободить выделенную память, вы просто просматриваете список и освобождаете все выделенные переменные char *. Структура может выглядеть следующим образом:

struct CSS_property { 
    char *property; 
    char *value; 
    struct CSS_property *next; 
} 

Куда дальше будет содержать указатель на следующий структуры, если есть один или NULL, если нет

Наконец, я полагаю, вы должны были бы тип удерживать совпадение. Может быть, это может выглядеть следующим образом:

struct CSS_matcher { 
    char *matcher; 
    struct CSS_property *properties; 
    struct CSS_matcher *next; 
} 

Указатель свойств будет указывать на первое свойство этого блока, CSS_matcher само по себе может быть еще один связанный список всех matchers вы столкнетесь в файле CSS.

Я не знаком с правильной терминологией CSS, я уверен, что они на самом деле не называют matchers matchers ...

+0

Спасибо. Ты задумался, чтобы идти правильным путем. –

Смежные вопросы