如何解决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 举报,一经查实,本站将立刻删除。