Разбор фразы с помощью Sprache (слова, разделенные пробелами) - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь написать в Sprache синтаксический анализатор, который будет анализировать фразу

Основное правило состоит в том, что в него должны входить слова, разделенные одним пробелом, причем первый и последний символы строки являютсяпробел.

Я ожидал бы вызвать что-то вроде следующего:

string phrase = PhraseParser.Parse("         I want to return up to this point        ");

и получить результирующую строку «Я хочу вернуться к этой точке».

Я пробовал множество реализаций, но ни одна из них не делала этого для меня.

Обновление Благодаря @PanagiotisKanavos трюк заключался бы в использовании оператора .Then ().Следующие слова:

public static Parser<string> WordParser =
        Parse.Letter.Many().Text().Token();

public static Parser<string> PhraseParser =
        from leading in Parse.LetterOrDigit.Many().Text()
        from rest in Parse.Char(' ').Then(_ => WordParser).Many()
        select leading + " " + String.Join(" ", rest);

Возможно, еще можно немного его почистить, но концепция есть.

1 Ответ

2 голосов
/ 13 мая 2019

Благодаря @PanagiotisKanavos хитрость заключается в использовании оператора .Then ().Следующие работы:

public static Parser<string> WordParser =
    Parse.Letter.Many().Text().Token();

public static Parser<string> PhraseParser =
    from leading in Parse.LetterOrDigit.Many().Text()
    from rest in Parse.Char(' ').Then(_ => WordParser).Many()
    select leading + " " + String.Join(" ", rest);
...