微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sprache 如何处理多行连续值

如何解决Sprache 如何处理多行连续值

我正在使用 Sprache 来解析旧文件

文件具有与键值字典非常相似的以下结构:

Entity
{
  propertyA simple
  propertyB 10-1
  propertyC "first"
  propertyD "I am a line that spawns
  to another line"
  propertyE "second"
  propertyF 1,2,3,4,5,6,\
    7,8,9,10,11,\
    12,13,14
  propertyG "one","two","three",\
  "four","five","six","seven",\
  "eight","nine"
}

我能够正确处理文件,但当它有 "\" 行延续时不能。

我所做的唯一肮脏的 hack 是替换作为输入发送到解析器的字符串并替换字符,因此没有行继续:

public static Document ParseLegsacyFile(string input)
{
     // HACK
     return Document.Parse(input.Replace("\\\r\n",string.Empty));
}

我不想承担这个技术债务...

无论如何指示解析器忽略模式“\”和“\r\n”并替换为空字符串?

我已经尝试过“Except”(带“Or”)、“Return”和“Then”,但都没有成功。

这是我正在使用的解析器的一部分。以下仅针对“价值”部分:

      public static readonly Parser<GenericObject> Value =

        from value in Parse.AnyChar.Until(Parse.LineEnd).Text()

        select new GenericObject(value);



    private static readonly Parser<GenericString> SingleString =

        from result in (from open in Parse.Char(Quote)

            from content in Parse.CharExcept(Quote).Many().Text()

            from close in Parse.Char(Quote)

            select content).Token()

    select new GenericString(result);



   public static readonly Parser<GenericString> StringValue =

       from value in SingleString .DelimitedBy(Parse.Char(Char.Parse(Comma)))

       select new StringLiteral(string.Join(Comma,value));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。