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

Дерево разбора - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ что-то не так http://www.cyberforum.ru/cpp-beginners/thread255764.html
в кои-то веки добился того что компилятор c-free не ругается на мой модуль.но использовать там я его не могу. решил запустить на visual studio. создал новый проект,в него отправил код из основной программы.потом надо было присоединить модуль.перенес файлы spisok.cpp и spisok.h в каталог с проектом. проект - добавить существующий объект - добавил и spisok.cpp и spisok.h.при компиляции выдает...
C++ считывание строки. С++ Строка считывается посимвольно буквами. а надо, чтобы словами.. как это сделать? FILE *fp2 = fopen("V.txt", "rb"); //открываем файл "dictionary.txt" fseek(fp2, 0, SEEK_END); //устанавливаем позицию от конца до нуля, находим размер long long size2 = ftell(fp2); //записываем размер исходного файла fseek(fp2, 0, SEEK_SET); //возвращаемся в начало ... http://www.cyberforum.ru/cpp-beginners/thread255758.html
Какое исключение возникает при невозможности открыть файл? C++
какое исключение отвечает за отсутствие файла?за невозможность открыть файл? FileNotFoundException?
Конструктор класса C++
Имеется: class block{ public: block(int, int); private: int CoordX; int CoordY; }; block::block(int X, int Y){ CoordX = X;
C++ Отсортировать методом выбора элементы тех строк матрицы, которые содержат символ "/" http://www.cyberforum.ru/cpp-beginners/thread255742.html
помогите пожалуйста сделать задачку: разработать приложение выполняющее след. функции:ввести с клавы значение элементов символьного двумерного массива , отсортировать по возростанию методом выбора элементы тех строк,которые содержат символ "/" результат вывести на экран....... или подскажите как отсортировать строки методом выбора или алгоритм метода сортировки...
C++ подскажите криворукому как правильно использовать команду ToolsAPI (библиотека для вызова, процесс, на который она ориентируется и т.д.; с примером, если не затруднит) и какой аналог для команды delay в С++ (опять же с примером желательно) заранее спасибо) подробнее

Показать сообщение отдельно
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
12.03.2011, 13:47     Дерево разбора
Вообще, обратная польская может здесь сработать, так как по сути она обозначает инверсный порядок обхода дерева, когда первым посещаются сыновья узла слева направо, и только потом уже родительский узел, так что запись вида " a b c * +" в принципе в дерево перевести не сложно, набираем операнды в стек, ну и при встрече оператора генерируем узел и цепляем к дереву.
А так я лично, если требуется разобрать что-нибудь маленькое, обычно обхожусь LL-анализом или алгоритмом Эрли (нерационально конечно малость, но зато писать легко), хоть и приходится целую грамматику определять ради этого.

Добавлено через 7 минут
И еще если есть больше желания получить работающий код, чем даже просто интерес к парсингу, чтобы всё от руки набивать, то я бы рекомендовал попробовать генераторы парсеров. К bison'у и flex'у у меня конечно отношение не очень, но вот boost::spirit рекомендовать могу, там грамматику забить не сложно, да и генерация дерева делается по сути очень просто, только позаботиться о рекурсивной обертке для дерева типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct Tree;
 
typedef boost::variant<
        boost::recursive_wrapper<Tree>
        , std::string
    > Tree_node;
 
struct Tree
    {
    std::string _operator;
    std::vector<Tree_node> children;
    };
 
BOOST_FUSION_ADAPT_STRUCT(
    Tree,
    (std::string,_operator)
    (std::vector<Tree_node>,children)
    )
Дабы основу для построения дерева обозначить, обозначить синтезируемые атрибуты у правил грамматики необходимые и, если хочется перевести это дерево в своё деревянное представление, то наследуете посещатель узлов дерева от boost::static_visitor и определяете те действия, что нужны.
 
Текущее время: 08:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru