Супермощный парсер, как анализировать строку с ключевым словом в конце и префиксом переменной длиныC#

Место общения программистов C#
Anonymous
Супермощный парсер, как анализировать строку с ключевым словом в конце и префиксом переменной длины

Сообщение Anonymous »

Я использую библиотеку синтаксического анализатора Superpower на C#. Я хотел бы создать синтаксический анализатор, который будет анализировать строку, аналогичную следующему выражению регулярного выражения:

Код: Выделить всё

(?'prefix'.*)(some\skeyword)
Например, из строки «Это некоторый префикс некоторого ключевого слова» я хотел бы получить в качестве префикса «Это некоторый префикс».
Моя попытка заключается в следующем:

Код: Выделить всё

        public static readonly TokenListParser Text =
Token.EqualTo(StoryToken.Text)
.Select(x => x.Span.ToStringValue());

public static readonly TokenListParser Keyword =
from k1 in Token.EqualToValueIgnoreCase(StoryToken.Text, "some")
from k2 in Token.EqualToValueIgnoreCase(StoryToken.Text, "keyword")
select "some keyword";

public static readonly TokenListParser TextWithKeyword =
from prefix in Text.Many()
from keyword in Keyword
select string.Join(" ", prefix) + " " + keyword;
Но это не работает. Проблема в том, что строка:

Код: Выделить всё

            from prefix in Text.Many()
потребляет все токены из входных данных, включая «некоторые» и «ключевое слово», и анализатор завершается с ошибкой «ожидалось «некоторые», но обнаружен конец ввода».
Я пытался добавить .Try() перед .Many() в этой строке и пытался добавить .AtEnd() к ключевому слову, но это ничего не меняет.
Есть идеи, как я могу достичь своей цели с помощью парсера Superpower?

Подробнее здесь: https://stackoverflow.com/questions/791 ... and-variab

Вернуться в «C#»