File contexts
因为#include可以发生在输入文件的中间,所以词法分析器需要将文件上下文推送到堆栈。文件输入缓冲区,宏扩展缓冲区和令牌队列形成一个所谓的“上下文”。它是特定于文件的,因此必须将其推送到堆栈上,以便词法分析器可以返回父级(解析#include后),而不会丢失任何令牌或宏文本。请注意,宏也可以包含#includes。
fb.bas:fbIncludeFile()
基本上只包括:
lexPush()
cProgram()
lexPop()