Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
monolithed
1

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

29.01.2012, 15:18. Показов 1318. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача не совсем типичная, хочу написать небольшой анализатор кода для разбора вложенных структур, которые должны транслироваться в валидный 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;
}
Возможно я не так начал разбор, но идея была такая: сперва получить идентификаторы, которых мне не хватает, а затем объеденить с тем что есть. Осталось собрать имена селекторов.

Если есть какие-то идеи с удовольствием выслушаю.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2012, 15:18
Ответы с готовыми решениями:

Названия вложенных структур
Почему поле структуры, содержащее переменные другой структуры, воспринимается компилятором без...

Инициализация вложенных структур
#include &lt;iostream&gt; using namespace std; int main() { struct one { int var1; ...

Видимость вложенных структур
public struct pinInfo_ { public struct Control_ { public int...

Объявление вложенных структур
Вот задание: Создать структуру Data, хранящую данные о ноутбуках: номер - number типа int, индекс...

0
29.01.2012, 15:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2012, 15:18
Помогаю со студенческими работами здесь

Парсинг вложенных объектов
Всем привет. Есть вот такой объект: var a= { nodes: }, { q:3 } ] }

Парсинг вложенных div
Доброго времени суток! Возникла задачка спарсить комменты с хабра. Проблема в том, что там идет...

Передача вложенных структур в функцию
Как осуществляется передача вложенных структур в функцию ?

создание вложенных структур в perl
Здравствуйте! Задача вот такая: необходимо реализовать структуру следующего вида: , , , ] ...

Десериализация массивов вложенных структур
Здравствуйте. Делаю сохранение/загрузку в игре. Создал простой формат сохранения и успешно научился...

Парсинг вложенных тегов в xml
здравствуйте, интересует вопрос, как парсить &quot;вложенные&quot; теги. У меня есть XMLчик &lt;?xml...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru