7

我正在使用 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 结果。

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

那么解析器如何抱怨输入意外结束呢?它不应该只是断定那里没有任何陈述吗?(无论构成语句的不同表达方式有什么时髦的东西)

4

0 回答 0