我正在寻找编写处理许多纯文本格式的代码的方法,这些纯文本格式在原理上都相似,但是语法不同。例如。一个就像
NUM_ENTRIES=33
BEGIN ENTRY
NAME=name
PROPERTY1=Value
PROPERTY2=Some_Value
SYNONYM=asdf,asdfas
BEGIN TABLE
555, 666
333, 444
BEGIN ENTRY
NAME=xyx
[...]
另一个:
Name: name
Property1: value
Property2: some_value
Synonym: asdf
Synonym: asdfas
Table Rows: 2
555 666
333 444
(two newlines separate entries)
Name: xyx
(这是质谱格式,其中有5或6种左右浮动。)所有这些格式都不是那么复杂。有些在属性中具有层次结构。
我可以轻松地为每个编写一个单独的解析器和编写器。但是我的愿望是改为以某种方式指定文档格式,以便可以在内部进行读写。基本上,一个类似于lex / yacc规范的语法文件,不仅指定如何读取,而且还指定如何编写任何元素。即我将为每个元素同时指定一个解析规则和一个书写规则。例如,我将PROPERTY
指定为KEY: VALUE\n
,并将其与写作为sprintf("%s: %s\n", key, value)
那里有这样的概念吗?
我知道:
我可能会在R中实现它,但这没关系。我大多只是不想在概念上重新发明轮子。