BibTeX 数据库中的“黄金标准”

BibTeX 数据库中的“黄金标准”

我开发了一个简单的 BibTeX 解析器。我想测试它是否可以处理 BibTeX 数据库中可能出现的所有细微差别。

是否存在一个标准.bib文件可以用来检查我的解析器,以便我可以确保它的解析能力?

我已经尝试过从.bib互联网上获取一些文件并且它们被正确处理。

答案1

科学书目汇编提供了大量的测试用例。网站上的测试用例可能是由漂亮的打印机生成的,因此语法特征会比较统一。但是,也有指向原始文件的链接,应该更加多样化。

对于测试解析器来说,通常没有人黄金标准。编译器编写者依赖于单独的测试用例和测试用例生成器。测试用例生成器由语言的语法驱动,可以帮助找到实践中很少出现的极端情况。不过,开发这些需要付出巨大的努力。如果你好奇,可以寻找模糊测试以 C 语言为例,查找并理解 C 编译器中的错误是一篇关于这个主题的有趣文章。

答案2

如果你安装了 biblatex,那么你有一个不错的示例 .bib 文件$TEXMF\bibtex\bib\biblatex\biblatex-examples.bib。它有很多注释,描述了每个 bibtex 条目可能存在的缺陷。或者,你可以从此处下载文件:http://mirror.ctan.org/macros/latex/contrib/biblatex/bibtex/bib/biblatex/biblatex-examples.bib

答案3

我正在考虑 BibTeX 格式的 BNF 语法,但我自己找不到。我找到的最接近的就是这个(来自TCL/TK维基百科):

# A rough grammar (case-insensitive):
#
# Database  ::= (Junk '@' Entry)*
# Junk      ::= .*?
# Entry ::= Record
#       |   Comment
#       |   String
#       |   Preamble
# Comment   ::= "comment" [^\n]* \n     -- ignored
# String    ::= "string" '{' Field* '}'
# Preamble  ::= "preamble" '{' .* '}'   -- (balanced)
# Record    ::= Type '{' Key ',' Field* '}'
#       |   Type '(' Key ',' Field* ')' -- not handled
# Type  ::= Name
# Key   ::= Name
# Field ::= Name '=' Value
# Name      ::= [^\s\"#%'(){}]*
# Value ::= [0-9]+
#       |   '"' ([^'"']|\\'"')* '"'
#       |   '{' .* '}'          -- (balanced)

如果您的解析器能够很好地处理您测试的所有 .bib 文件,我认为您已经做得很好了!

相关内容