TeX 作为其他语言的编译器或预处理器,其表现力如何?一个很好的例子是,listings
TeX 的软件包经过了修改,可以识别几乎所有编程语言的标记类型。所以,TeX 可以成为一种预处理器。
但是 TeX 可以作为解析器吗?你能用 TeX 实现类似 YACC 的东西吗?这样你就可以定义一个 BNF,然后其余的输入将由这个 BNF 解析。
让我们稍微简化一下这个问题。至少在理论上是可能的(不能通过模拟图灵机来作弊)制作这样的lex.tex
文件,以便输入文件
\input lex.tex
DEFINITIONS
letter=[a-zA-Z];
digit=0-9;
alphanum=$(Letter)|$(digit);
id=$(letter)$(alphanum)*
RULES
id -> { some($); }
INPUT
hello world
实际上,它的行为类似于一个词法分析器,有三个部分:定义、规则和输入。前两个部分定义了如何INPUT
处理该部分,产生
some(hello) some(world)
如果这在某种程度上是可能的并且是现实的,那么人们可能会渴望更多,yacc.tex
然后也许,一个通用处理器/编译器全部用 tex 编写?那不是很令人兴奋吗?