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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Что такое семафоры? http://www.cyberforum.ru/cpp-beginners/thread437394.html
сразу хочу показать ссылку http://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BC%D0%B0%D1%84%D0%BE%D1%80_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0) ниче не ясно... можете помочь разобраться? Семафо́р — объект, позволяющий войти в заданный участок кода не более чем n потокам. Определение введено Эдсгером Дейкстрой. Семафоры используются при передаче данных через...
C++ Не могу написать программу перемножения матриц #include <iostream> #include <conio.h> using namespace std; int i,j; void vvod(int X) { for(i=0;i<=4;i++) for(j=0;j<=4;j++) X=rand() % 10; } http://www.cyberforum.ru/cpp-beginners/thread437386.html
C++ ООР множественное определение конструктора
Доброго времени, народ! Учился по книге Дейтела, и наткнулся на такой пример. Перепечатал, два раза проверил, ещё раз перепечатал. Прочитал ошибку, перевел, получалось что произошло множественное определение конструктора, ну или как то так. Вот примеры, кто сталкивался? помогите пожалуйста, с меня плюсозавр в репутационный период полезно ответившего. create.h //CREATE.H #ifndef...
Подключение заголовочных файлов. C++
У меня есть заголовочный файл: ...\1\2\file.h. в папке "1" есть file2.h. Как подключить к "file.h" "file2.h"?
C++ создать класс http://www.cyberforum.ru/cpp-beginners/thread437303.html
создать класс строк и реализовать какие захочешь функции в нем. ребят можете помочь,знаю что примитивно но я вообще в этом ноль
C++ переписать 20 максимальных элементов в массив Создать массив из случайных 100 четырехзначных элементов. Переписать в массив из 20 элементов 20 самых больших чисел из первого массива. Нельзя создавать временный массив, сортировать 100-элементный) #include "stdafx.h" #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int _tmain(int argc, _TCHAR* argv) { подробнее

Показать сообщение отдельно
monolithed
Сообщений: n/a
29.01.2012, 15:18     Разбор вложенных структур (парсинг CSS)
Задача не совсем типичная, хочу написать небольшой анализатор кода для разбора вложенных структур, которые должны транслироваться в валидный 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;
}
Возможно я не так начал разбор, но идея была такая: сперва получить идентификаторы, которых мне не хватает, а затем объеденить с тем что есть. Осталось собрать имена селекторов.

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