【发布时间】:2011-05-07 20:45:21
【问题描述】:
我想解析一种语法稍显古怪的基于文本的文件格式。以下是一些有效的示例行:
<region>sample=piano C3.wav key=48 ampeg_release=0.7 // a comment here
<region>key = 49 sample = piano Db3.wav
<region>
group=1
key = 48
sample = piano D3.ogg
我认为想出一个有意义的正则表达式对我来说太复杂了,但我想知道是否有一种很好的方法可以在不编写自己的解析器的情况下标记这种类型的输入?即我想要读取上述输入并吐出“令牌”流的东西,例如,我的示例格式开头的输出将类似于:
new Region(), new Sample("piano C3.wav"), new Key("48"), new AmpegRelease("0.7"), new Region()
是否有一个好的库/教程可以为我指明正确的方向,以一种优雅的方式来实现它?
更新:我用 Irony 尝试过这个,但是我需要解析的语法的怪癖(特别是 sample= 后面的数据可以有一个空格)导致他们建议我最好基于 String.Split 编写自己的代码。见讨论here。
【问题讨论】:
-
这个文件格式是 sfz 吗?很难google,如果是请注明
-
是的,格式是here,但我通常对解决此类问题的最佳方法感兴趣,而不管 sfz 的具体情况如何