"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 операторов.
Так как же парсер может пожаловаться на неожиданный конец ввода? не следует ли просто сделать вывод, что там нет никаких заявлений? (не имеет значения, что делают разные выражения, составляющие утверждения)