Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Position Iterator

Boost , ,

Position Iterator

Часто при написании парсера, который способен обнаруживать ошибки в формате входного потока, мы хотим, чтобы он сообщал пользователю, где ошибка произошла в этом входе. Классическим примером является написание компилятора или интерпретатора, который обнаруживает синтаксические ошибки в парсируемой программе, указывая номер строки и, возможно, даже положение в строке, где была обнаружена ошибка.

Класс position_iterator - это инструмент, предоставляемый в Spirit, который позволяет авторам парсеров легко реализовать эту функциональность. Концепция довольно проста: этот класс представляет собой обертку итератора, которая отслеживает текущее положение в файле, включая текущий файл, строку и столбец. Для этого требуется один параметр шаблона, который должен быть типом итератора, который должен быть обернут.

Чтобы использовать его, вам нужно добавить следующее:

    #include <boost/spirit/iterator/position_iterator.hpp>

Или включить все итераторы в Духе:

    #include <boost/spirit/iterator.hpp>

Для построения обертки необходимы как начальный, так и конечный итераторы входной последовательности, а также имя файла входной последовательности. Необязательно также можно указать начальную строку и номера столбцов, которые по умолчанию равны 1. Конструкция по умолчанию без параметров создает общий итератор окончания последовательности, аналогично тому, как это делается в потоковых операторах стандартной библиотеки C++.

Завернутый итератор должен принадлежать к категории входного или переднего итератора, и позиционный итератор просто наследует эту категорию.

Например, для создания начальных и конечных позиционных итераторов из входной C-струны можно использовать:

    char const* inputstring = "...";
    typedef position_iterator<char const*> iterator_t;
    iterator_t begin(inputstring, inputstring+strlen(inputstring));
    iterator_t end;

Operations

    void set_position(file_position const&);

Назовите эту функцию, когда вам нужно изменить текущее положение, сохраненное в итераторе. Например, при разборе директив C-style #include, входящий файл должен быть отмечен перезагрузкой файла и столбца на 1 и 1 и имя на имя нового файла.

    file_position const& get_position() const;

Позвоните этой функции, чтобы восстановить текущую позицию.

    void set_tabchars(int);

Назовите это, чтобы установить количество вкладок на персонажа. Это значение необходимо для правильного отслеживания номера столбца.

file_position

File_position - это структура, которая удерживает позицию в файле. Его полями являются:

file_position fields
std::string file; Name of the file. Hopefully a full pathname
int line; Line number within the file. By default, the first line is number 1
int column; Column position within the file. The first column is 1

См.position_iterator.cppВ качестве примера. Это часть духовного распределения.


 

Статья Position Iterator раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 05:00:23/0.0038669109344482/1