我开发了一个简单的 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 文件,我认为您已经做得很好了!