tokens {...} 块)
可以使用以下类进行测试:
import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
import org.antlr.stringtemplate.*;
public class Main {
public static void main(String[] args) throws Exception {
BibTexLexer lexer = new BibTexLexer(new ANTLRFileStream("test.bib"));
BibTexParser parser = new BibTexParser(new CommonTokenStream(lexer));
CommonTree tree = (CommonTree)parser.parse().getTree();
DOTTreeGenerator gen = new DOTTreeGenerator();
StringTemplate st = gen.toDOT(tree);
System.out.println(st);
}
}
以下是示例Bib输入(文件:test.bib
):
@PREAMBLE{
"\newcommand{\noopsort}[1]{} "
# "\newcommand{\singleletter}[1]{#1} "
}
@string {
me = "Bart Kiers"
}
@ComMENt{some comments here}
% or some comments here
@article{mrx05,
auTHor = me # "Mr. X",
Title = {Something Great},
publisher = "nob" # "ody",
YEAR = 2005,
x = {{Bib}\TeX},
y = "{Bib}\TeX",
z = "{Bib}" # "\TeX",
},
@misc{ patashnik-bibtexing,
author = "Oren Patashnik",
title = "BIBTEXing",
year = "1988"
} % no comma here
@techreport{presstudy2002,
author = "Dr. Diessen, van R. J. and Drs. Steenbergen, J. F.",
title = "Long {T}erm {P}reservation {S}tudy of the {DNEP} {P}roject",
institution = "IBM, National Library of the Netherlands",
year = "2002",
month = "December",
}
运行演示
如果您现在从语法中生成解析器和词法分析器:
java -cp antlr-3.3.jar org.antlr.Tool BibTex.g
并编译所有的.java
源文件:
javac -cp antlr-3.3.jar *.java
最终运行Main
类:
*nix/MacOS
java -cp .:antlr-3.3.jar Main
Windows
java -cp .;antlr-3.3.jar Main
你将在控制台看到一些输出,这些输出对应于以下的AST:
![enter image description here](https://istack.dev59.com/W7TqM.webp)
(点击图像可放大,生成于 graphviz-dev.appspot.com)
需要强调的是:我没有进行过语法测试!我写了一段时间,但从未在任何项目中真正使用它。
"text $2 \times \pi$ text"
,据我所知。你是否也想解析所有这些内容,或者前导内容和引用(或大括号)的内容可以被标记为单个标记? - Bart Kiers