我已经为C++中的一种愚蠢的编程语言创建了一个解释器,并且完成了整个核心结构(Tokenizer,解析器,解释器包括符号表,核心函数等)。以编程语言管理库和导入
现在我有创建和管理的函数库这一解释的一个问题(我会解释我的意思与更高版本)
所以目前我的核心功能处理程序是可怕:
// Simplified version
myLangResult SystemFunction(name, argc, argv)
{
if (name == "print")
{
if(argc < 1)
{
Error('blah');
}
cout << argv[ 0 ];
} else if (name == "input") {
if(argc < 1)
{
Error('blah');
}
string res;
getline(cin, res);
SetVariable(argv[ 0 ], res);
} else if (name == "exit) {
exit(0);
}
现在想起其他每个人,如果是10倍更复杂,并有25个以上的系统功能。难以维护,感觉可怕,太可怕了。
所以我想:如何创建一些类库包含所有的功能,如果他们进口初始化自己并将其功能添加到正在运行的解释器的符号表。
然而,这是我真的不知道该怎么去的地步。
我想达到什么是有如:一个(EXTERN?)字符串库对我的语言,如:字符串,它是在程序中使用该语言,例如输入:
import string
myString = "abcde"
print string.at(myString, 2) # output: c
我的问题:
- 如何独立于核心解释函数库并加载它们?
- 如何将所有函数放入列表并在需要时将其添加到符号表中?
我在想什么做的事:
在翻译开始,所有图书馆都用它编写,每一个函数调用类似RegisterFunction(string namespace, myLangResult (*functionPtr));
它增加了自己的列表。然后在语言中调用import X
时,用RegisterFunction构建的列表将添加到符号表中。
缺点映入脑海:
所有图书馆都直接在解释核心,规模的增长,它肯定会减慢车速。