Форум программистов, компьютерный форум CyberForum.ru

Разбор вложенных структур (парсинг CSS) - C++

Восстановить пароль Регистрация
 
monolithed
Сообщений: n/a
29.01.2012, 15:18     Разбор вложенных структур (парсинг CSS) #1
Задача не совсем типичная, хочу написать небольшой анализатор кода для разбора вложенных структур, которые должны транслироваться в валидный CSS.
Однако не получается захватить идентификаторы родительских селекторов.

Пример вложенной структуры:

CSS
1
2
3
4
5
6
7
8
9
10
11
12
#foo {
    border: 1px;
    a {
        border: 2px;
    }
    b {
        border: 3px;
        c {
            border: 4px; /* comment */
        }
    }
}
То, что я хочу получить в итоге:

CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#foo {
    border: 1px;
}
 
#foo a {
    border: 2px;
}
 
#foo b {
    border: 3px;
}
 
#foo b c {
    border: 4px; /* comment */
}
Мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <iterator>
#include <string>
 
using namespace std;
 
int main() {
 
    string str = "\
    #foo {\
        border: 1px;\
        a {\
            border: 2px;\
        }\
        b {\
            border: 3px;\
            c {\
                border: 4px; /* comment */\
            }\
        }\
    }";
 
    string::const_iterator i = str.end(),
    begin = str.begin(), end;
 
    while (i != begin) {
        if (*i == ';' || (*i == '/' && *(i-1) == '*')) {
            end = i++;
 
            while (*i-- != '{');
 
            while (true) {
                if (*i == ';' || *i == '}' || *i == '{' || i == begin)
                    break;
                i--;
            }
 
            string item(++i, ++end);
            cout << item << "}" << endl;
        }
        i--;
    }
 
    return 0;
}
Out:

CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
c {
    border: 4px; /* comment */
}
 
b {
    border: 3px;
}
 
a {
    border: 2px;
}
 
#foo {
    border: 1px;
}
Возможно я не так начал разбор, но идея была такая: сперва получить идентификаторы, которых мне не хватает, а затем объеденить с тем что есть. Осталось собрать имена селекторов.

Если есть какие-то идеи с удовольствием выслушаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2012, 15:18     Разбор вложенных структур (парсинг CSS)
Посмотрите здесь:

Названия вложенных структур C++
C++ Динамические массивы структур;Классы. Класс массивы структур;Классы. Класс динамического массива структур.
Научиться работать с векторными данными языка «С»: структурами и объединениями. Изучить правила объявления структур и объединений, обращение к их полям, построение вложенных векторных типов данных. C++
Массив структур, сохранение начала каждой из структур C++
C++ описать структуру, создать класс, в котором описать 3 поля: два простых типа и массив структур. Создать в классе 4 функции работы с массивом структур
C++ Блочная сортировка структур (Отсортировать массив структур по фамилии)
Упрощение вложенных циклов C++
C++ Разбор указателей и структур - каковы их суть и назначение

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru