0

我试图弄清楚如何为 Lua 编写自动完成算法,但是由于与许多脚本语言一样,它缺少静态类型系统,我认为我需要后台编译,但是在后台编译期间很容易遇到停止问题,所以我想知道以前是否有人解决过这种事情,解决编译和停止的标准策略是什么?

4

2 回答 2

1

基于静态文本分析的自动完成听起来比试图在后台编译更合理。大多数提供自动完成功能的文本编辑器都使用这种方法,尽管它并不准确。

为此,您可以解析文档以查找名称并记录它们所属的范围。随着该点在文档中移动,您的自动完成功能会记录它当前所在的范围,并提供该点应该可用的名称。

由于默认情况下 LUA 是全局范围,如果您的程序员没有使用“local”关键字来缩小范围,您最终可能会得到一个相当污染的命名空间。

于 2009-02-25T15:52:05.390 回答
1

你可以

  • 实际执行代码,看看某个特定变量代表什么类型的对象,如果耗时过长则中途截断执行
  • 猜猜如果 Lua 有类型,实际变量会有什么类型。这意味着您必须创建一个类型系统,这是一项不平凡的任务(您必须具有足够的限制性以允许对对象模型进行推理,并且足够允许足够多的 Lua 程序实际上符合您的模型)。然而,所有闪亮的新 javascript 引擎都试图这样做,AFAIK,所以你可以在那里寻找指针。
  • 只是从语法猜测。例如,emacs 补全,它只查找相同的前缀,在其他 IDE 通常失败的情况下(C++ 模板)就像魅力一样
于 2009-02-25T16:04:07.937 回答