[Sprache Parser]: Привязать результат парсинга к позиции в тексте
От: 0x7be СССР  
Дата: 22.02.16 17:44
Оценка:
Коллеги,

экспериментирую сейчас с парсером Sprache. Пытаюсь понять, как пробросить трассировку от результата парсинга к позиции в тексте.

Предположим, есть у меня такой парсер:
        public static readonly Parser<HexLiteral> HexLiteralParser =
            from leading in Parse.Char('0').Once()
            from digits in Parse.Chars("0123456789ABCDEFabcdef").Many()
            from trailing in Parse.Chars("hH").Once()
            select new HexLiteral
            {
                Value = new string(digits.ToArray())
            };

есть ли возможность при конструировании экземпляра HexLiteal как-то получить информацию о том, какой кусок текста (или хотя бы его начало) был захвачен и распознан этим парсером?
Заранее спасибо.
Re: [Sprache Parser]: Привязать результат парсинга к позиции в тексте
От: samius Япония http://sams-tricks.blogspot.com
Дата: 22.02.16 21:25
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Коллеги,


0>экспериментирую сейчас с парсером Sprache. Пытаюсь понять, как пробросить трассировку от результата парсинга к позиции в тексте.


0>есть ли возможность при конструировании экземпляра HexLiteal как-то получить информацию о том, какой кусок текста (или хотя бы его начало) был захвачен и распознан этим парсером?


Судя по беглому просмотру исходников, нужная информация содержится в свойстве Remainder контейнера IResult<T>. Для того, что бы ей воспользоваться, надо отказаться от монадического шугара from, который "извлекает" T из IResult<T>, и написать метод врукопашную. Полагаю, достаточно будет взять Remainder от контейнера leading или digits.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.