用于文本格式的“文档模型”解析器/编写器?

时间:2020-08-22 11:28:21

标签: parsing grammar bnf

我正在寻找编写处理许多纯文本格式的代码的方法,这些纯文本格式在原理上都相似,但是语法不同。例如。一个就像

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)

的作品相关联。

那里有这样的概念吗?

我知道:

  • lex / yacc用于指定解析器,以及BNF
  • XSLT指定文档转换
  • 所有这些格式看起来都像是YAML的卑鄙版本,也许只要编写从每种格式到YAML的转换并返回就足够了

我可能会在R中实现它,但这没关系。我大多只是不想在概念上重新发明轮子。

0 个答案:

没有答案
相关问题