"Sprache" монадический синтаксический анализатор `Or` и`Many`

Я использую Sprache monadic parser для разбора DSL.

Это фрагмент моей грамматики:

    public static readonly Parser<IExpression> TerminatedStatement =
        from exp in Parse.Ref(() => Expression)
        from _ in Parse.Char(';').Token()
        select exp;

    public static readonly Parser<IExpression> Statement =
            Parse.Ref(() => TerminatedStatement)
            .Or(Parse.Ref(() => InvocationStatement));

    public static readonly Parser<Statements> Statements =
        from statements in Statement.Many()
        select new Statements(statements);

если я тогда использую это с Statements.Parse(" ") Я получаю исключение, говорящее, что произошел неожиданный конец ввода.

Как это может быть, когда Statements использовать Many оператор, который AFAIK дает 0-п результатов.

" " должен вернуть Statements экземпляр, содержащий 0 операторов.

Так как же парсер может пожаловаться на неожиданный конец ввода? не следует ли просто сделать вывод, что там нет никаких заявлений? (не имеет значения, что делают разные выражения, составляющие утверждения)

0 ответов

Другие вопросы по тегам