metafont语言是一种无上下文语法吗?

时间:2014-12-11 19:17:35

标签: metafont

元信息语言是一种无上下文语法吗?

我是词法分析器/解析器/编译器的新手,我试图大致了解编写元编译器的难度。

1 个答案:

答案 0 :(得分:0)

不是。 Metafont语言基本上是一个在令牌流上运行的宏扩展器。它是一种巧妙但非常复杂的设计,允许语法在运行时更改。令牌不是固定的,就像它们在大多数语言中一样,但它们是变量,它们的含义可以在运行时更改。

Metafont区分用作变量名称的一部分的令牌(名为 tags )和作为句法元素(名为 sparks )。当解析器遇到标记时,它会在进行任何评估之前首先查找标记的含义。这导致在执行metafont程序期间令牌流的含义可能会完全改变!

在mf中采用以下示例:

$ mf
This is METAFONT, Version 2.718281 (TeX Live 2013/Debian)
**expr
(/usr/share/texlive/texmf-dist/metafont/base/expr.mf
gimme an expr: 1plus5
>> plus5
gimme an expr: begingroup let plus=+ endgroup
>> vacuous
gimme an expr: 1plus5
>> 6

令牌流1plus2解析为1*plus2,其中 plus2是一个变量,因为plus被定义为标记。 在第二个表达式中,我们将plus重新定义为 spark +的含义相同。 (begingroup需要附上 表达式中的命令)。当我们再次解析1plus5时,它 代表1 + 5,因此评估为6

metafont中的宏扩展非常复杂,它可以扩展变量, 但是火花也可以包含宏,具有不同的扩展规则。 还有用于不同固定性的中缀功能的扩展器。 了解这一点的最佳方法是阅读 metafontbook