“Sprache”monadic解析器`Or`和`Many`语义

时间:2015-07-13 11:16:34

标签: c# sprache

我正在使用Sprache monadic解析器来解析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-n结果,那怎么可能呢?

" "应返回包含0个语句的Statements实例。

那么解析器如何抱怨输入意外结束?难道它只是得出结论,那里没有陈述? (无论构成陈述的不同表达形式是什么时髦的东西)

0 个答案:

没有答案